From 62d0d3fb4838b5750c0e44a848d44087ff674fd1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 14 Dec 2022 17:31:15 +0100 Subject: [PATCH 001/364] add bls12_381 hosts --- Cargo.lock | 173 +++++++++++++++++++++++++++- primitives/arkworks/Cargo.toml | 28 +++++ primitives/arkworks/src/lib.rs | 203 +++++++++++++++++++++++++++++++++ primitives/io/Cargo.toml | 2 + primitives/io/src/lib.rs | 35 ++++++ 5 files changed, 435 insertions(+), 6 deletions(-) create mode 100644 primitives/arkworks/Cargo.toml create mode 100644 primitives/arkworks/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index ea34146f16f9b..ec3984c824e30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,6 +73,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "ahash" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -112,6 +123,123 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "698b65a961a9d730fb45b6b0327e20207810c9f61ee421b082b27ba003f49e2b" +[[package]] +name = "ark-bls12-381" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45de41dee7fbd21b6241a2c1254498aa25463bd91ce3cc7c5bccaa6916ef047d" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f358ed64ac9fc6cc1c47dd484a64248d2edc8708e19c039afd666b9d4caeb423" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.1", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c7e014e61fb7a579a01f33b900b4dced5718c191d949d2172e0648049c33c4" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.3", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c6e6fdb3e17774b9e413cd04b5b8e8718d68a3be4e3841177beacd81086e9b" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ca2540a04f150bb36a97bfb34a17e9eae243bfd691621f21396f04e5bbde2bf" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-poly" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46be5569ab08dfaaeedeccb06ca89eed87a707e825fa3f9cd22aa4096ff787a" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.1", +] + +[[package]] +name = "ark-serialize" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7aa0aa2e2f75b99b4cd0dc64338d380a2e4cceacd1bd6907bfe8fbe2efe210a" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.3", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab275ff26d56b90a50c8ad8613a9d812efe2f245cdef2a65d22cc403f1a02a7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-std" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5b16d734e9b2e43886ff586755219df7fb9639cc04ab00c7e636708a5ba06a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "array-bytes" version = "4.1.0" @@ -1396,6 +1524,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -2567,7 +2706,16 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" +dependencies = [ + "ahash 0.8.2", ] [[package]] @@ -7640,7 +7788,7 @@ dependencies = [ name = "sc-finality-grandpa" version = "0.10.0-dev" dependencies = [ - "ahash", + "ahash 0.7.6", "array-bytes", "assert_matches", "async-trait", @@ -7849,7 +7997,7 @@ dependencies = [ name = "sc-network-gossip" version = "0.10.0-dev" dependencies = [ - "ahash", + "ahash 0.7.6", "futures", "futures-timer", "libp2p", @@ -8919,6 +9067,18 @@ dependencies = [ "sp-arithmetic", ] +[[package]] +name = "sp-arkworks" +version = "0.0.1" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "sp-std", +] + [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" @@ -9224,6 +9384,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "secp256k1", + "sp-arkworks", "sp-core", "sp-externalities", "sp-keystore", @@ -9585,7 +9746,7 @@ dependencies = [ name = "sp-trie" version = "7.0.0" dependencies = [ - "ahash", + "ahash 0.7.6", "array-bytes", "criterion", "hash-db", @@ -10779,9 +10940,9 @@ checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "void" diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml new file mode 100644 index 0000000000000..dcc0d48941973 --- /dev/null +++ b/primitives/arkworks/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "sp-arkworks" +version = "0.0.1" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "Primitive core crate hashing implementation." +documentation = "https://docs.rs/sp-core-hashing" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-ff = { version = "0.4.0-alpha", default-features = false } +ark-ec = { version = "0.4.0-alpha", default-features = false } +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-bls12-381 = { version = "0.4.0-alpha" } +sp-std = { version = "5.0.0", default-features = false, path = "../std" } + + +[features] +default = ["std"] +std = [ + "sp-std/std", +] diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs new file mode 100644 index 0000000000000..0a4b4d8d17ed3 --- /dev/null +++ b/primitives/arkworks/src/lib.rs @@ -0,0 +1,203 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_bls12_381::{Bls12_381, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing}, + Group, +}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +const F12_COMPRESSED_SIZE: usize = 576; + +/// Compute multi pairing through arkworksrk_bls12_381::G2Projective +pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { + let g1: Vec<_> = vec_a + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Prepared::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let g2: Vec<_> = vec_b + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let res = Bls12_381::multi_pairing(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { + let g1: Vec<_> = a_vec + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G1Prepared::from) + .unwrap() + }) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G2Prepared::from) + .unwrap() + }) + .collect(); + let res = Bls12_381::multi_miller_loop(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute final exponentiation through arkworks +pub fn final_exponentiation(f12: &[u8]) -> Vec { + let cursor = Cursor::new(f12); + let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = Bls12_381::final_exponentiation(MillerLoopOutput(f12)).unwrap(); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +#[cfg(test)] +mod tests { + use super::*; + use ark_ec::AffineRepr; + use sp_std::vec; +} diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index cd900b8f158ef..9213267ae8fb8 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -28,6 +28,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } +sp-arkworks = { version = "0.0.1", default-features = false, optional = true, path = "../arkworks" } log = { version = "0.4.17", optional = true } futures = { version = "0.3.21", features = ["thread-pool"], optional = true } parking_lot = { version = "0.12.1", optional = true } @@ -53,6 +54,7 @@ std = [ "sp-runtime-interface/std", "sp-wasm-interface/std", "sp-tracing/std", + "sp-arkworks", "tracing/std", "tracing-core/std", "log", diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 600d76b3b4300..79400551e2940 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1120,6 +1120,41 @@ pub trait Crypto { .map_err(|_| EcdsaVerifyError::BadSignature)?; Ok(pubkey.serialize()) } + + /// Compute a multi pairing + fn bls12_381_multi_pairing(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::multi_pairing(a, b) + } + + /// Compute a multi Miller loop + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation + fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + sp_arkworks::final_exponentiation(f12) + } + + /// Compute a bigint_msm on G2 + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::mul_projective_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::mul_affine_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::mul_projective_g1(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::mul_affine_g1(base, scalar) + } } /// Interface that provides functions for hashing with different algorithms. From 22db96a0082f51526a3b40118c7fd561242d9489 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 14 Dec 2022 17:59:04 +0100 Subject: [PATCH 002/364] move bls12_381 into mod --- primitives/arkworks/src/bls12_381.rs | 203 ++++++++++++++++++++++++++ primitives/arkworks/src/lib.rs | 204 +-------------------------- primitives/io/src/lib.rs | 14 +- 3 files changed, 211 insertions(+), 210 deletions(-) create mode 100644 primitives/arkworks/src/bls12_381.rs diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs new file mode 100644 index 0000000000000..0a4b4d8d17ed3 --- /dev/null +++ b/primitives/arkworks/src/bls12_381.rs @@ -0,0 +1,203 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_bls12_381::{Bls12_381, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing}, + Group, +}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +const F12_COMPRESSED_SIZE: usize = 576; + +/// Compute multi pairing through arkworksrk_bls12_381::G2Projective +pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { + let g1: Vec<_> = vec_a + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Prepared::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let g2: Vec<_> = vec_b + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let res = Bls12_381::multi_pairing(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { + let g1: Vec<_> = a_vec + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G1Prepared::from) + .unwrap() + }) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G2Prepared::from) + .unwrap() + }) + .collect(); + let res = Bls12_381::multi_miller_loop(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute final exponentiation through arkworks +pub fn final_exponentiation(f12: &[u8]) -> Vec { + let cursor = Cursor::new(f12); + let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = Bls12_381::final_exponentiation(MillerLoopOutput(f12)).unwrap(); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +#[cfg(test)] +mod tests { + use super::*; + use ark_ec::AffineRepr; + use sp_std::vec; +} diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 0a4b4d8d17ed3..667950dc69077 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,203 +1 @@ -// This file is part of Substrate. - -// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Hashing Functions. - -#![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] - -use ark_bls12_381::{Bls12_381, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - Group, -}; -use ark_ff::PrimeField; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; -use sp_std::{vec, vec::Vec}; - -const F12_COMPRESSED_SIZE: usize = 576; - -/// Compute multi pairing through arkworksrk_bls12_381::G2Projective -pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { - let g1: Vec<_> = vec_a - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let g2: Vec<_> = vec_b - .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let res = Bls12_381::multi_pairing(g1, g2); - // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - -/// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .map(::G1Prepared::from) - .unwrap() - }) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .map(::G2Prepared::from) - .unwrap() - }) - .collect(); - let res = Bls12_381::multi_miller_loop(g1, g2); - // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - -/// Compute final exponentiation through arkworks -pub fn final_exponentiation(f12: &[u8]) -> Vec { - let cursor = Cursor::new(f12); - let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = Bls12_381::final_exponentiation(MillerLoopOutput(f12)).unwrap(); - // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized -} - -#[cfg(test)] -mod tests { - use super::*; - use ark_ec::AffineRepr; - use sp_std::vec; -} +pub mod bls12_381; \ No newline at end of file diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 79400551e2940..4c90a88f91923 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1123,37 +1123,37 @@ pub trait Crypto { /// Compute a multi pairing fn bls12_381_multi_pairing(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::multi_pairing(a, b) + sp_arkworks::bls12_381::multi_pairing(a, b) } /// Compute a multi Miller loop fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::multi_miller_loop(a, b) + sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { - sp_arkworks::final_exponentiation(f12) + sp_arkworks::bls12_381::final_exponentiation(f12) } /// Compute a bigint_msm on G2 fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::mul_projective_g2(base, scalar) + sp_arkworks::bls12_381::mul_projective_g2(base, scalar) } /// Compute a bigint_msm on G2 fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::mul_affine_g2(base, scalar) + sp_arkworks::bls12_381::mul_affine_g2(base, scalar) } /// Compute a bigint_msm on G2 fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::mul_projective_g1(base, scalar) + sp_arkworks::bls12_381::mul_projective_g1(base, scalar) } /// Compute a bigint_msm on G2 fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::mul_affine_g1(base, scalar) + sp_arkworks::bls12_381::mul_affine_g1(base, scalar) } } From 91f7178400636d3c1c0aeb8c6d8cd4ff9e1efd82 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 10:08:50 +0100 Subject: [PATCH 003/364] add msm host functions --- primitives/arkworks/src/bls12_381.rs | 68 ++++++++++++++++++++++++++++ primitives/io/src/lib.rs | 10 ++++ 2 files changed, 78 insertions(+) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 0a4b4d8d17ed3..98efe16859897 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -195,6 +195,74 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { serialized } +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + #[cfg(test)] mod tests { use super::*; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 4c90a88f91923..0471cde4d6542 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1155,6 +1155,16 @@ pub trait Crypto { fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bls12_381::mul_affine_g1(base, scalar) } + + /// Compute a bigint_msm on G1 + fn bls12_381_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_381::msm_bigint_g1(bases, bigints) + } + + /// Compute a bigint_msm on G2 + fn bls12_381_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_381::msm_bigint_g2(bases, bigints) + } } /// Interface that provides functions for hashing with different algorithms. From 4f0aeeccf4c0e9e4e8d576e6c37a1e547cfa1463 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 12:24:06 +0100 Subject: [PATCH 004/364] add tests for bls12_381 --- primitives/arkworks/tests/tests.rs | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 primitives/arkworks/tests/tests.rs diff --git a/primitives/arkworks/tests/tests.rs b/primitives/arkworks/tests/tests.rs new file mode 100644 index 0000000000000..d016489d7f6e6 --- /dev/null +++ b/primitives/arkworks/tests/tests.rs @@ -0,0 +1,56 @@ +use ark_algebra_test_templates::{msm::test_var_base_msm, test_pairing, test_group}; +use ark_ec::{pairing::Pairing, AffineRepr}; +use ark_sub_bls12_381::{ + Bls12_381 as Bls12_381_Host, Fr as BlsFr, G1Affine as G1Affine_Host, + G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, + G2Projective as G2Projective_Host, HostFunctions, +}; +use sp_arkworks::bls12_381; +use sp_std::vec; + +pub struct Host {} + +impl HostFunctions for Host { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + bls12_381::multi_miller_loop(a, b) + } + fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + bls12_381::final_exponentiation(f12) + } + fn bls12_381_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + bls12_381::msm_bigint_g1(bases, bigints) + } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + bls12_381::mul_projective_g1(base, scalar) + } + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + bls12_381::mul_affine_g1(base, scalar) + } + fn bls12_381_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + bls12_381::msm_bigint_g2(bases, bigints) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + bls12_381::mul_projective_g2(base, scalar) + } + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + bls12_381::mul_affine_g2(base, scalar) + } +} + +type Bls12_381 = Bls12_381_Host; +type G1Affine = G1Affine_Host; +type G2Affine = G2Affine_Host; +type G1Projective = G1Projective_Host; +type G2Projective = G2Projective_Host; + +test_pairing!(pairing; crate::Bls12_381); +// test_group!(g1; crate::G1Projective; sw); + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn bls12_381_msm() { + test_var_base_msm::(); + } +} From 62ce9d47a016b02953c3d4f2d427e96561d9af95 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 12:32:22 +0100 Subject: [PATCH 005/364] add bls12_377 --- Cargo.lock | 73 +++++++- primitives/arkworks/Cargo.toml | 4 + primitives/arkworks/src/bls12_377.rs | 264 +++++++++++++++++++++++++++ primitives/arkworks/src/bls12_381.rs | 7 - primitives/arkworks/src/lib.rs | 3 +- 5 files changed, 342 insertions(+), 9 deletions(-) create mode 100644 primitives/arkworks/src/bls12_377.rs diff --git a/Cargo.lock b/Cargo.lock index ec3984c824e30..b61e72c7ca183 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,6 +123,32 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "698b65a961a9d730fb45b6b0327e20207810c9f61ee421b082b27ba003f49e2b" +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87c8f1fd0f6578c14a7bd37b751f51303a3df867a2565632579f52d8e458fd7f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc213b03e8462cc880b4b80cb4d0636235e86474b47ae172d8c1e1daf792f4ac" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-bls12-381" version = "0.4.0-alpha.1" @@ -135,6 +161,17 @@ dependencies = [ "ark-std", ] +[[package]] +name = "ark-bls12-381" +version = "0.4.0-alpha.1" +source = "git+https://github.com/arkworks-rs/curves/#f8a6a4050e088cbfbb20675c03f15fc61593cfdf" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + [[package]] name = "ark-ec" version = "0.4.0-alpha.4" @@ -240,6 +277,35 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-sub-bls12-381" +version = "0.3.0" +source = "git+https://github.com/achimcc/ark-substrate#aad0d6c1e34d3f791be4297690f7cbdfe3587032" +dependencies = [ + "ark-bls12-381 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves/)", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "ark-sub-models", +] + +[[package]] +name = "ark-sub-models" +version = "0.3.0" +source = "git+https://github.com/achimcc/ark-substrate#aad0d6c1e34d3f791be4297690f7cbdfe3587032" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.3", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "array-bytes" version = "4.1.0" @@ -2572,8 +2638,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.10.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -9071,11 +9139,14 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-bls12-381", + "ark-algebra-test-templates", + "ark-bls12-377", + "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-ec", "ark-ff", "ark-serialize", "ark-std", + "ark-sub-bls12-381", "sp-std", ] diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index dcc0d48941973..b0309f91b7947 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -18,8 +18,12 @@ ark-ff = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-bls12-381 = { version = "0.4.0-alpha" } +ark-bls12-377 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } +[dev-dependencies] +ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } +ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } [features] default = ["std"] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs new file mode 100644 index 0000000000000..d1be3bf5ef6a4 --- /dev/null +++ b/primitives/arkworks/src/bls12_377.rs @@ -0,0 +1,264 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_bls12_377::{Bls12_377, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing}, + Group, +}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +const F12_COMPRESSED_SIZE: usize = 576; + +/// Compute multi pairing through arkworksrk_Bls12_377::G2Projective +pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { + let g1: Vec<_> = vec_a + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Prepared::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let g2: Vec<_> = vec_b + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let res = Bls12_377::multi_pairing(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { + let g1: Vec<_> = a_vec + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G1Prepared::from) + .unwrap() + }) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G2Prepared::from) + .unwrap() + }) + .collect(); + let res = Bls12_377::multi_miller_loop(g1, g2); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute final exponentiation through arkworks +pub fn final_exponentiation(f12: &[u8]) -> Vec { + let cursor = Cursor::new(f12); + let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = Bls12_377::final_exponentiation(MillerLoopOutput(f12)).unwrap(); + // serialize the result + let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bls12::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 98efe16859897..fa7fee77c0a45 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -262,10 +262,3 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); serialized } - -#[cfg(test)] -mod tests { - use super::*; - use ark_ec::AffineRepr; - use sp_std::vec; -} diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 667950dc69077..a6328cce4a6a5 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1 +1,2 @@ -pub mod bls12_381; \ No newline at end of file +pub mod bls12_381; +pub mod bls12_377; \ No newline at end of file From 264f2cd81aeefec8630b77388470208901bc80bb Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 12:39:25 +0100 Subject: [PATCH 006/364] add bls12_377 host functions --- primitives/io/src/lib.rs | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 0471cde4d6542..0a636da4b2382 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1165,6 +1165,53 @@ pub trait Crypto { fn bls12_381_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bls12_381::msm_bigint_g2(bases, bigints) } + + + + /// Compute a multi pairing + fn bls12_377_multi_pairing(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bls12_377::multi_pairing(a, b) + } + + /// Compute a multi Miller loop + fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bls12_377::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation + fn bls12_377_final_exponentiation(f12: &[u8]) -> Vec { + sp_arkworks::bls12_377::final_exponentiation(f12) + } + + /// Compute a bigint_msm on G2 + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_projective_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_affine_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_projective_g1(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_affine_g1(base, scalar) + } + + /// Compute a bigint_msm on G1 + fn bls12_377_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_bigint_g1(bases, bigints) + } + + /// Compute a bigint_msm on G2 + fn bls12_377_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_bigint_g2(bases, bigints) + } } /// Interface that provides functions for hashing with different algorithms. From 40248d3b8b2854631b5fd14171d163a571d4f174 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 14:24:31 +0100 Subject: [PATCH 007/364] remove hardcoded values --- primitives/arkworks/src/bls12_377.rs | 8 +++----- primitives/arkworks/src/bls12_381.rs | 8 +++----- primitives/arkworks/src/lib.rs | 2 +- primitives/arkworks/tests/tests.rs | 4 ++-- primitives/io/src/lib.rs | 2 -- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index d1be3bf5ef6a4..f94dfafe21dab 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -31,8 +31,6 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; -const F12_COMPRESSED_SIZE: usize = 576; - /// Compute multi pairing through arkworksrk_Bls12_377::G2Projective pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { let g1: Vec<_> = vec_a @@ -61,7 +59,7 @@ pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { .collect(); let res = Bls12_377::multi_pairing(g1, g2); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() @@ -97,7 +95,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .collect(); let res = Bls12_377::multi_miller_loop(g1, g2); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() @@ -109,7 +107,7 @@ pub fn final_exponentiation(f12: &[u8]) -> Vec { let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = Bls12_377::final_exponentiation(MillerLoopOutput(f12)).unwrap(); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index fa7fee77c0a45..f32431ced8e8b 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -31,8 +31,6 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; -const F12_COMPRESSED_SIZE: usize = 576; - /// Compute multi pairing through arkworksrk_bls12_381::G2Projective pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { let g1: Vec<_> = vec_a @@ -61,7 +59,7 @@ pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { .collect(); let res = Bls12_381::multi_pairing(g1, g2); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() @@ -97,7 +95,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .collect(); let res = Bls12_381::multi_miller_loop(g1, g2); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() @@ -109,7 +107,7 @@ pub fn final_exponentiation(f12: &[u8]) -> Vec { let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = Bls12_381::final_exponentiation(MillerLoopOutput(f12)).unwrap(); // serialize the result - let mut res_bytes = [0u8; F12_COMPRESSED_SIZE]; + let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); res.0.serialize_compressed(&mut cursor).unwrap(); res_bytes.to_vec() diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index a6328cce4a6a5..bc4c5b23e4c8d 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,2 +1,2 @@ +pub mod bls12_377; pub mod bls12_381; -pub mod bls12_377; \ No newline at end of file diff --git a/primitives/arkworks/tests/tests.rs b/primitives/arkworks/tests/tests.rs index d016489d7f6e6..47dbac8b47eb6 100644 --- a/primitives/arkworks/tests/tests.rs +++ b/primitives/arkworks/tests/tests.rs @@ -1,4 +1,4 @@ -use ark_algebra_test_templates::{msm::test_var_base_msm, test_pairing, test_group}; +use ark_algebra_test_templates::{msm::test_var_base_msm, test_group, test_pairing}; use ark_ec::{pairing::Pairing, AffineRepr}; use ark_sub_bls12_381::{ Bls12_381 as Bls12_381_Host, Fr as BlsFr, G1Affine as G1Affine_Host, @@ -48,7 +48,7 @@ test_pairing!(pairing; crate::Bls12_381); #[cfg(test)] mod tests { - use super::*; + use super::*; #[test] fn bls12_381_msm() { test_var_base_msm::(); diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 0a636da4b2382..fe6fdea457175 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1166,8 +1166,6 @@ pub trait Crypto { sp_arkworks::bls12_381::msm_bigint_g2(bases, bigints) } - - /// Compute a multi pairing fn bls12_377_multi_pairing(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_377::multi_pairing(a, b) From 00684e3cc89f5b7d13d23820d8505ddab47bf8b5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 14:45:38 +0100 Subject: [PATCH 008/364] add bw6_761 --- Cargo.lock | 13 ++ primitives/arkworks/Cargo.toml | 1 + primitives/arkworks/src/bls12_377.rs | 1 + primitives/arkworks/src/bw6_761.rs | 262 +++++++++++++++++++++++++++ primitives/arkworks/src/lib.rs | 1 + 5 files changed, 278 insertions(+) create mode 100644 primitives/arkworks/src/bw6_761.rs diff --git a/Cargo.lock b/Cargo.lock index b61e72c7ca183..79b31935fc5a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,6 +172,18 @@ dependencies = [ "ark-std", ] +[[package]] +name = "ark-bw6-761" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebff1ddcda7ab77367e63b75981e992a4f4fe70b80a0da5733a02c74d939d17e" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-ec" version = "0.4.0-alpha.4" @@ -9142,6 +9154,7 @@ dependencies = [ "ark-algebra-test-templates", "ark-bls12-377", "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-bw6-761", "ark-ec", "ark-ff", "ark-serialize", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index b0309f91b7947..645ea2af505b6 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -19,6 +19,7 @@ ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-bls12-381 = { version = "0.4.0-alpha" } ark-bls12-377 = { version = "0.4.0-alpha" } +ark-bw6-761 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } [dev-dependencies] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index f94dfafe21dab..9b5dbe55c3078 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -31,6 +31,7 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; + /// Compute multi pairing through arkworksrk_Bls12_377::G2Projective pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { let g1: Vec<_> = vec_a diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs new file mode 100644 index 0000000000000..2b496704547fc --- /dev/null +++ b/primitives/arkworks/src/bw6_761.rs @@ -0,0 +1,262 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_bw6_761::{BW6_761, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, + Group, +}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +/// Compute multi pairing through arkworksrk_BW6_761::G2Projective +pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { + let g1: Vec<_> = vec_a + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Prepared::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let g2: Vec<_> = vec_b + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let res = BW6_761::multi_pairing(g1, g2); + // serialize the result + let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { + let g1: Vec<_> = a_vec + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G1Prepared::from) + .unwrap() + }) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|b| { + let cursor = Cursor::new(b); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .map(::G2Prepared::from) + .unwrap() + }) + .collect(); + let res = BW6_761::multi_miller_loop(g1, g2); + // serialize the result + let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute final exponentiation through arkworks +pub fn final_exponentiation(target: &[u8]) -> Vec { + let cursor = Cursor::new(target); + let target = ::TargetField::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap(); + // serialize the result + let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut res_bytes[..]); + res.0.serialize_compressed(&mut cursor).unwrap(); + res_bytes.to_vec() +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bw6::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bw6::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bw6::G1Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let mut res = ark_ec::bw6::G2Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::G2Affine::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let bigints: Vec<_> = bigints + .iter() + .map(|a| { + let cursor = Cursor::new(a); + <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index bc4c5b23e4c8d..fe1ef33c9a673 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,2 +1,3 @@ pub mod bls12_377; pub mod bls12_381; +pub mod bw6_761; From 1d098efa666bdd02313b8fbde47ae93608003791 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 14:51:29 +0100 Subject: [PATCH 009/364] refactor: Fq12 -> Target --- primitives/arkworks/src/bls12_377.rs | 16 ++++++++++------ primitives/arkworks/src/bls12_381.rs | 15 ++++++++++----- primitives/arkworks/src/bw6_761.rs | 9 +++++++-- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 9b5dbe55c3078..e4a3fb31c283a 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bls12_377::{Bls12_377, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, @@ -31,7 +31,6 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; - /// Compute multi pairing through arkworksrk_Bls12_377::G2Projective pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { let g1: Vec<_> = vec_a @@ -103,10 +102,15 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(f12: &[u8]) -> Vec { - let cursor = Cursor::new(f12); - let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = Bls12_377::final_exponentiation(MillerLoopOutput(f12)).unwrap(); +pub fn final_exponentiation(target: &[u8]) -> Vec { + let cursor = Cursor::new(target); + let target = ::TargetField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let res = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap(); // serialize the result let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index f32431ced8e8b..bfee23b48aacb 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bls12_381::{Bls12_381, Fq12, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, @@ -102,10 +102,15 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(f12: &[u8]) -> Vec { - let cursor = Cursor::new(f12); - let f12 = Fq12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = Bls12_381::final_exponentiation(MillerLoopOutput(f12)).unwrap(); +pub fn final_exponentiation(target: &[u8]) -> Vec { + let cursor = Cursor::new(target); + let target = ::TargetField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let res = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap(); // serialize the result let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut res_bytes[..]); diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 2b496704547fc..35fdf0937007d 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bw6_761::{BW6_761, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, Parameters, BW6_761}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing, PairingOutput}, @@ -104,7 +104,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: &[u8]) -> Vec { let cursor = Cursor::new(target); - let target = ::TargetField::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let target = ::TargetField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); let res = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap(); // serialize the result let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; From a23749ed1deae3808577448ccf2a8dae5bb2e1b5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 15:02:24 +0100 Subject: [PATCH 010/364] add bw6_761 host functions --- primitives/io/src/lib.rs | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index fe6fdea457175..baf2a548dc92d 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1210,6 +1210,51 @@ pub trait Crypto { fn bls12_377_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bls12_377::msm_bigint_g2(bases, bigints) } + + /// Compute a multi pairing + fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bw6_761::multi_pairing(a, b) + } + + /// Compute a multi Miller loop + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bw6_761::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation + fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + sp_arkworks::bw6_761::final_exponentiation(f12) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_projective_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_projective_g1(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g1(base, scalar) + } + + /// Compute a bigint_msm on G1 + fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) + } } /// Interface that provides functions for hashing with different algorithms. From 68c16dffb21302a4f3fae0ac3d45d320ff2fd971 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 15 Dec 2022 17:35:18 +0100 Subject: [PATCH 011/364] add ed_on_bls12_381 --- Cargo.lock | 13 ++ primitives/arkworks/Cargo.toml | 1 + primitives/arkworks/src/ed_on_bls12_381.rs | 181 +++++++++++++++++++++ primitives/arkworks/src/lib.rs | 1 + 4 files changed, 196 insertions(+) create mode 100644 primitives/arkworks/src/ed_on_bls12_381.rs diff --git a/Cargo.lock b/Cargo.lock index 79b31935fc5a8..b0519fab9fe27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -201,6 +201,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ed-on-bls12-381" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed409af783dcec14f903dcc2f8751612ab6610dd8c2dee9830a63384ed85a9b" +dependencies = [ + "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-ff" version = "0.4.0-alpha.4" @@ -9156,6 +9168,7 @@ dependencies = [ "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-bw6-761", "ark-ec", + "ark-ed-on-bls12-381", "ark-ff", "ark-serialize", "ark-std", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 645ea2af505b6..508a711f4610e 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -20,6 +20,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-bls12-381 = { version = "0.4.0-alpha" } ark-bls12-377 = { version = "0.4.0-alpha" } ark-bw6-761 = { version = "0.4.0-alpha" } +ark-ed-on-bls12-381 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } [dev-dependencies] diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs new file mode 100644 index 0000000000000..b4823390d1b8b --- /dev/null +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -0,0 +1,181 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubParameters}; +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing}, + Group, VariableBaseMSM, +}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +// /// Compute a scalar multiplication on G2 through arkworks +// pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { +// let cursor = Cursor::new(base); +// let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + +// let cursor = Cursor::new(scalar); +// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); +// let mut res = EdwardsProjective::mul_bigint(&self, other); +// let mut res = ark_ec::bls12::G2Projective::::zero(); +// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { +// res.double_in_place(); +// if b { +// res += base; +// } +// } +// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; +// let mut cursor = Cursor::new(&mut serialized[..]); +// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); +// serialized +// } + +// /// Compute a scalar multiplication on G2 through arkworks +// pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { +// let cursor = Cursor::new(base); +// let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + +// let cursor = Cursor::new(scalar); +// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); +// let mut res = ark_ec::bls12::G1Projective::::zero(); +// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { +// res.double_in_place(); +// if b { +// res += base; +// } +// } +// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; +// let mut cursor = Cursor::new(&mut serialized[..]); +// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); +// serialized +// } + +// /// Compute a scalar multiplication on G2 through arkworks +// pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { +// let cursor = Cursor::new(base); +// let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + +// let cursor = Cursor::new(scalar); +// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); +// let mut res = ark_ec::bls12::G1Projective::::zero(); +// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { +// res.double_in_place(); +// if b { +// res += base; +// } +// } +// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; +// let mut cursor = Cursor::new(&mut serialized[..]); +// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); +// serialized +// } + +// /// Compute a scalar multiplication on G2 through arkworks +// pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { +// let cursor = Cursor::new(base); +// let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + +// let cursor = Cursor::new(scalar); +// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); +// let mut res = ark_ec::bls12::G2Projective::::zero(); +// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { +// res.double_in_place(); +// if b { +// res += base; +// } +// } +// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; +// let mut cursor = Cursor::new(&mut serialized[..]); +// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); +// serialized +// } + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ark_ec::twisted_edwards::Affine::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let scalars: Vec<_> = scalars + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::ScalarField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + + let result = ::msm(&bases, &scalars); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +// /// Compute a multi scalar multiplication on G! through arkworks +// pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { +// let bases: Vec<_> = bases +// .iter() +// .map(|a| { +// let cursor = Cursor::new(a); +// ::G2Affine::deserialize_with_mode( +// cursor, +// Compress::Yes, +// Validate::No, +// ) +// .unwrap() +// }) +// .collect(); +// let bigints: Vec<_> = bigints +// .iter() +// .map(|a| { +// let cursor = Cursor::new(a); +// <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( +// cursor, +// Compress::Yes, +// Validate::No, +// ) +// .unwrap() +// }) +// .collect(); +// let result = +// <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); +// let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; +// let mut cursor = Cursor::new(&mut serialized[..]); +// result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); +// serialized +// } diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index fe1ef33c9a673..85885f8ea9954 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,3 +1,4 @@ pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; +pub mod ed_on_bls12_381; From f4fed7f0cdef5f59428eef809c87baabbe65ada3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 10:58:14 +0100 Subject: [PATCH 012/364] bls12_377 msm_bigint -> msm --- primitives/arkworks/src/bls12_377.rs | 16 ++++++++-------- primitives/io/src/lib.rs | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index e4a3fb31c283a..c1c499e54ccb0 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -199,7 +199,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -212,11 +212,11 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -225,7 +225,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -233,7 +233,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -246,11 +246,11 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -259,7 +259,7 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index baf2a548dc92d..3ed38bf4ec328 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1202,13 +1202,13 @@ pub trait Crypto { } /// Compute a bigint_msm on G1 - fn bls12_377_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_377::msm_bigint_g1(bases, bigints) + fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_g1(bases, bigints) } /// Compute a bigint_msm on G2 - fn bls12_377_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_377::msm_bigint_g2(bases, bigints) + fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_g2(bases, bigints) } /// Compute a multi pairing From ecf8665c2aa95642575a683d8559123ca5910c2d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 11:18:46 +0100 Subject: [PATCH 013/364] bls12_388 msm_bigint -> msm --- primitives/arkworks/src/bls12_381.rs | 16 ++++++++-------- primitives/io/src/lib.rs | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index bfee23b48aacb..1a68de4d43afc 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -199,7 +199,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -212,11 +212,11 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -225,7 +225,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -233,7 +233,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -246,11 +246,11 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -259,7 +259,7 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 3ed38bf4ec328..49b9e75b29e9e 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1156,14 +1156,14 @@ pub trait Crypto { sp_arkworks::bls12_381::mul_affine_g1(base, scalar) } - /// Compute a bigint_msm on G1 - fn bls12_381_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_381::msm_bigint_g1(bases, bigints) + /// Compute a msm on G1 + fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::bls12_381::msm_g1(bases, scalars) } - /// Compute a bigint_msm on G2 - fn bls12_381_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_381::msm_bigint_g2(bases, bigints) + /// Compute a msm on G2 + fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::bls12_381::msm_g2(bases, scalars) } /// Compute a multi pairing @@ -1202,13 +1202,13 @@ pub trait Crypto { } /// Compute a bigint_msm on G1 - fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_377::msm_g1(bases, bigints) + fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_g1(bases, scalars) } /// Compute a bigint_msm on G2 - fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bls12_377::msm_g2(bases, bigints) + fn bls12_377_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::bls12_377::msm_g2(bases, scalars) } /// Compute a multi pairing From 6d850bacb63999a68ec833b99e18c654c758b2d3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 11:24:27 +0100 Subject: [PATCH 014/364] fix tests msm_bigint -> msm --- Cargo.lock | 1850 +++++++++++++++------------- primitives/arkworks/tests/tests.rs | 8 +- 2 files changed, 1011 insertions(+), 847 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0519fab9fe27..efc225d7783e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,16 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli", + "gimli 0.26.2", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.0", ] [[package]] @@ -33,7 +42,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -68,7 +77,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", "once_cell", "version_check", ] @@ -86,13 +95,22 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -110,18 +128,18 @@ checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" [[package]] name = "approx" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] [[package]] name = "arbitrary" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "698b65a961a9d730fb45b6b0327e20207810c9f61ee421b082b27ba003f49e2b" +checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" [[package]] name = "ark-algebra-test-templates" @@ -224,7 +242,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "digest 0.10.3", + "digest 0.10.6", "itertools", "num-bigint", "num-traits", @@ -277,7 +295,7 @@ checksum = "b7aa0aa2e2f75b99b4cd0dc64338d380a2e4cceacd1bd6907bfe8fbe2efe210a" dependencies = [ "ark-serialize-derive", "ark-std", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -304,7 +322,7 @@ dependencies = [ [[package]] name = "ark-sub-bls12-381" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#aad0d6c1e34d3f791be4297690f7cbdfe3587032" +source = "git+https://github.com/achimcc/ark-substrate#257705366e83fd38ac681f4d90d5aab37916d520" dependencies = [ "ark-bls12-381 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves/)", "ark-ec", @@ -317,14 +335,14 @@ dependencies = [ [[package]] name = "ark-sub-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#aad0d6c1e34d3f791be4297690f7cbdfe3587032" +source = "git+https://github.com/achimcc/ark-substrate#257705366e83fd38ac681f4d90d5aab37916d520" dependencies = [ "ark-ec", "ark-ff", "ark-serialize", "ark-std", "derivative", - "getrandom 0.2.3", + "getrandom 0.2.8", "itertools", "num-traits", "zeroize", @@ -332,9 +350,9 @@ dependencies = [ [[package]] name = "array-bytes" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a913633b0c922e6b745072795f50d90ebea78ba31a57e2ac8c2fc7b50950949" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" @@ -356,17 +374,17 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "asn1_der" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6e24d2cce90c53b948c46271bfb053e4bdc2db9b5d3f65e20f8cf28a1b7fc3" +checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba45b8163c49ab5f972e59a8a5a03b6d2972619d486e19ec9fe744f7c2753d3c" +checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3" dependencies = [ - "bstr 1.0.1", + "bstr 1.1.0", "doc-comment", "predicates", "predicates-core", @@ -382,9 +400,9 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-channel" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ "concurrent-queue", "event-listener", @@ -393,76 +411,68 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" dependencies = [ + "async-lock", "async-task", "concurrent-queue", "fastrand", "futures-lite", - "once_cell", - "vec-arena", + "slab", ] [[package]] name = "async-global-executor" -version = "2.0.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ "async-channel", "async-executor", "async-io", - "async-mutex", + "async-lock", "blocking", "futures-lite", - "num_cpus", "once_cell", ] [[package]] name = "async-io" -version = "1.6.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ + "async-lock", + "autocfg", "concurrent-queue", "futures-lite", "libc", "log", - "once_cell", "parking", "polling", "slab", "socket2", "waker-fn", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-mutex" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ "event-listener", + "futures-lite", ] [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" dependencies = [ "async-stream-impl", "futures-core", @@ -470,9 +480,9 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ "proc-macro2", "quote", @@ -481,15 +491,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.0.3" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" dependencies = [ "proc-macro2", "quote", @@ -498,9 +508,9 @@ dependencies = [ [[package]] name = "asynchronous-codec" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0de5164e5edbf51c45fb8c2d9664ae1c095cce1b265ecf7569093c0d66ef690" +checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" dependencies = [ "bytes", "futures-sink", @@ -521,7 +531,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -534,24 +544,24 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ - "addr2line", + "addr2line 0.19.0", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.27.1", + "object 0.30.0", "rustc-demangle", ] [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base16ct" @@ -567,21 +577,21 @@ checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64ct" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdca834647821e0b13d9539a8634eb62d3501b6b6c2cec1722786ee6671b851" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" [[package]] name = "beef" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" dependencies = [ "serde", ] @@ -702,9 +712,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", @@ -714,11 +724,11 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +checksum = "b12e5fd123190ce1c2e559308a94c9bacad77907d4c6005d9e58fe1a0689e55e" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -729,7 +739,7 @@ checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq", + "constant_time_eq 0.1.5", ] [[package]] @@ -740,20 +750,20 @@ checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq", + "constant_time_eq 0.1.5", ] [[package]] name = "blake3" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" dependencies = [ "arrayref", "arrayvec 0.7.2", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.2.4", ] [[package]] @@ -774,16 +784,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] name = "block-buffer" -version = "0.10.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -797,16 +807,16 @@ dependencies = [ [[package]] name = "blocking" -version = "1.0.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9" +checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" dependencies = [ "async-channel", + "async-lock", "async-task", "atomic-waker", "fastrand", "futures-lite", - "once_cell", ] [[package]] @@ -817,9 +827,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ "lazy_static", "memchr", @@ -829,9 +839,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca0852af221f458706eb0725c03e4ed6c46af9ac98e6a689d5e634215d594dd" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" dependencies = [ "memchr", "once_cell", @@ -850,15 +860,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.6.1" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "byte-slice-cast" -version = "1.0.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65c1bf4a04a88c54f589125563643d773f3254b5c38571395e2b591c693bbc81" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "byte-tools" @@ -874,9 +884,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "bzip2-sys" @@ -889,26 +899,20 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cache-padded" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" - [[package]] name = "camino" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4648c6d00a709aa069a236adcaae4f605a6241c72bf5bee79331a4b625921a9" +checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0226944a63d1bf35a3b5f948dd7c59e263db83695c9e8bffc4037de02e30f1d7" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" dependencies = [ "serde", ] @@ -921,25 +925,22 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.4", + "semver 1.0.14", "serde", "serde_json", ] [[package]] name = "cast" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" -dependencies = [ - "rustc_version 0.2.3", -] +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" dependencies = [ "jobserver", ] @@ -1004,7 +1005,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.0.11", + "clap 4.0.29", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1015,14 +1016,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time", + "wasm-bindgen", "winapi", ] @@ -1045,7 +1048,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -1059,9 +1062,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", @@ -1081,14 +1084,14 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.11" +version = "4.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ed45cc2c62a3eff523e718d8576ba762c83a3146151093283ac62ae11933a73" +checksum = "4d63b9e9c07271b9957ad22c173bae2a4d9a81127680962039296abcd2f8251d" dependencies = [ - "atty", "bitflags", "clap_derive", "clap_lex", + "is-terminal", "once_cell", "strsim", "termcolor", @@ -1096,18 +1099,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.0.5" +version = "4.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0fba905b035a30d25c1b585bf1171690712fbb0ad3ac47214963aa4acc36c" +checksum = "b7b3c9eae0de7bf8e3f904a5e40612b21fb2e2e566456d177809a48b892d24da" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", ] [[package]] name = "clap_derive" -version = "4.0.10" +version = "4.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db342ce9fda24fb191e2ed4e102055a4d381c1086a06630174cd8da8d5d917ce" +checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" dependencies = [ "heck", "proc-macro-error", @@ -1137,9 +1140,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "6.0.0" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121d8a5b0346092c18a4b2fd6f620d7a06f0eb7ac0a45860939a0884bc579c56" +checksum = "e621e7e86c46fd8a14c32c6ae3cb95656621b4743a27d0cffedb831d46e7ad21" dependencies = [ "strum", "strum_macros", @@ -1148,18 +1151,18 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b" dependencies = [ - "cache-padded", + "crossbeam-utils", ] [[package]] name = "const-oid" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" +checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" [[package]] name = "constant_time_eq" @@ -1167,6 +1170,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "constant_time_eq" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" + [[package]] name = "core-foundation" version = "0.9.3" @@ -1194,43 +1203,36 @@ dependencies = [ [[package]] name = "cpp_demangle" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44919ecaf6f99e8e737bc239408931c9a01e9a6c74814fee8242dd2506b65390" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" dependencies = [ "cfg-if", - "glob", ] [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" - [[package]] name = "cranelift-bforest" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27bbd3e6c422cf6282b047bcdd51ecd9ca9f3497a3be0132ffa08e509b824b0" +checksum = "52056f6d0584484b57fa6c1a65c1fcb15f3780d8b6a758426d9e3084169b2ddd" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872f5d4557a411b087bd731df6347c142ae1004e6467a144a7e33662e5715a01" +checksum = "18fed94c8770dc25d01154c3ffa64ed0b3ba9d583736f305fed7beebe5d9cf74" dependencies = [ "arrayvec 0.7.2", "bumpalo", @@ -1239,7 +1241,7 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli", + "gimli 0.26.2", "log", "regalloc2", "smallvec", @@ -1248,33 +1250,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b49fdebb29c62c1fc4da1eeebd609e9d530ecde24a9876def546275f73a244" +checksum = "1c451b81faf237d11c7e4f3165eeb6bac61112762c5cfe7b4c0fb7241474358f" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc0c091e2db055d4d7f6b7cec2d2ead286bcfaea3357c6a52c2a2613a8cb5ac" +checksum = "e7c940133198426d26128f08be2b40b0bd117b84771fd36798969c4d712d81fc" [[package]] name = "cranelift-entity" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "354a9597be87996c9b278655e68b8447f65dd907256855ad773864edee8d985c" +checksum = "87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd8dd3fb8b82c772f4172e87ae1677b971676fffa7c4e3398e3047e650a266b" +checksum = "34897538b36b216cc8dd324e73263596d51b8cf610da6498322838b2546baf8a" dependencies = [ "cranelift-codegen", "log", @@ -1284,15 +1286,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82527802b1f7d8da288adc28f1dc97ea52943f5871c041213f7b5035ac698a7" +checksum = "1b2629a569fae540f16a76b70afcc87ad7decb38dc28fa6c648ac73b51e78470" [[package]] name = "cranelift-native" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30ba8b910f1be023af0c39109cb28a8809734942a6b3eecbf2de8993052ea5e" +checksum = "20937dab4e14d3e225c5adfc9c7106bafd4ac669bdb43027b911ff794c6fb318" dependencies = [ "cranelift-codegen", "libc", @@ -1301,9 +1303,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.88.0" +version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "776a8916d201894aca9637a20814f1e11abc62acd5cfbe0b4eb2e63922756971" +checksum = "80fc2288957a94fd342a015811479de1837850924166d1f1856d8406e6f3609b" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1317,18 +1319,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] [[package]] name = "criterion" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" dependencies = [ "atty", "cast", @@ -1354,9 +1356,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" dependencies = [ "cast", "itertools", @@ -1364,9 +1366,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1374,9 +1376,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1385,25 +1387,24 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", - "memoffset", + "memoffset 0.7.1", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", - "lazy_static", ] [[package]] @@ -1414,23 +1415,23 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f2b443d17d49dad5ef0ede301c3179cc923b8822f3393b4d2c28c269dd4a122" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.4", - "rand_core 0.6.2", + "generic-array 0.14.6", + "rand_core 0.6.4", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "typenum", ] @@ -1440,7 +1441,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] @@ -1450,7 +1451,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] @@ -1460,7 +1461,7 @@ version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" dependencies = [ - "bstr 0.2.15", + "bstr 0.2.17", "csv-core", "itoa 0.4.8", "ryu", @@ -1478,9 +1479,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", "syn", @@ -1497,9 +1498,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434e1720189a637d44fe464f4df1e6eb900b4835255b14354497c78af37d9bb8" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" dependencies = [ "byteorder", "digest 0.8.1", @@ -1510,9 +1511,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.0.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f627126b946c25a4638eec0ea634fc52506dea98db118aae985118ce7c3d723f" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", "digest 0.9.0", @@ -1523,22 +1524,23 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-pre.1" +version = "4.0.0-pre.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" +checksum = "67bc65846be335cb20f4e52d49a437b773a2c1fdb42b19fc84e79e6f6771536f" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.2", + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms 3.0.2", "subtle", "zeroize", ] [[package]] name = "cxx" -version = "1.0.80" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" +checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf" dependencies = [ "cc", "cxxbridge-flags", @@ -1548,9 +1550,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.80" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" +checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39" dependencies = [ "cc", "codespan-reporting", @@ -1563,15 +1565,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.80" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" +checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12" [[package]] name = "cxxbridge-macro" -version = "1.0.80" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" +checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6" dependencies = [ "proc-macro2", "quote", @@ -1580,15 +1582,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "data-encoding-macro" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a94feec3d2ba66c0b6621bca8bc6f68415b1e5c69af3586fdd0af9fd9f29b17" +checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1596,9 +1598,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f83e699727abca3c56e187945f303389590305ab2f0185ea445aa66e8d5f2a" +checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", "syn", @@ -1606,9 +1608,9 @@ dependencies = [ [[package]] name = "der" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", "zeroize", @@ -1638,9 +1640,9 @@ dependencies = [ [[package]] name = "diff" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "difflib" @@ -1663,16 +1665,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.0", + "block-buffer 0.10.3", "crypto-common", "subtle", ] @@ -1698,9 +1700,9 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", "redox_users", @@ -1720,9 +1722,9 @@ dependencies = [ [[package]] name = "dissimilar" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4b29f4b9bb94bf267d57269fd0706d343a160937108e9619fe380645428abb" +checksum = "8c97b9233581d84b8e1e689cdd3a47b6f69770084fc246e86a7f78b0d9c1d4a5" [[package]] name = "dns-parser" @@ -1754,9 +1756,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" +checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa" [[package]] name = "dyn-clonable" @@ -1781,15 +1783,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" +checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" [[package]] name = "ecdsa" -version = "0.14.7" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85789ce7dfbd0f0624c07ef653a08bb2ebf43d3e16531361f46d36dd54334fed" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", @@ -1799,9 +1801,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.0.3" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" dependencies = [ "signature", ] @@ -1812,11 +1814,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.2.0", "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] @@ -1826,19 +1828,19 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.2.0", "hashbrown 0.12.3", "hex", - "rand_core 0.6.2", - "sha2 0.9.8", + "rand_core 0.6.4", + "sha2 0.9.9", "zeroize", ] [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "elliptic-curve" @@ -1849,11 +1851,11 @@ dependencies = [ "base16ct", "crypto-bigint", "der", - "digest 0.10.3", + "digest 0.10.6", "ff", - "generic-array 0.14.4", + "generic-array 0.14.6", "group", - "rand_core 0.6.2", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -1873,9 +1875,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b3ab37dc79652c9d85f1f7b6070d77d321d2467f5fe7b00d6b7a86c57b092ae" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" dependencies = [ "enumflags2_derive", ] @@ -1893,9 +1895,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", "humantime", @@ -1906,9 +1908,9 @@ dependencies = [ [[package]] name = "environmental" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "errno" @@ -1923,19 +1925,19 @@ dependencies = [ [[package]] name = "errno-dragonfly" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" dependencies = [ - "gcc", + "cc", "libc", ] [[package]] name = "event-listener" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "exit-future" @@ -1960,9 +1962,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -1978,14 +1980,20 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "rand_core 0.6.2", + "rand_core 0.6.4", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" + [[package]] name = "file-per-thread-logger" version = "0.1.5" @@ -1998,14 +2006,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ "cfg-if", "libc", "redox_syscall", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -2039,19 +2047,17 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.20" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ - "cfg-if", "crc32fast", - "libc", "libz-sys", "miniz_oxide", ] @@ -2080,19 +2086,18 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "fragile" -version = "1.2.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" @@ -2126,7 +2131,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.0.11", + "clap 4.0.29", "comfy-table", "frame-benchmarking", "frame-support", @@ -2208,7 +2213,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2464,9 +2469,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ "futures-channel", "futures-core", @@ -2479,9 +2484,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ "futures-core", "futures-sink", @@ -2489,15 +2494,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" dependencies = [ "futures-core", "futures-task", @@ -2507,15 +2512,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] name = "futures-lite" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ "fastrand", "futures-core", @@ -2528,9 +2533,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ "proc-macro2", "quote", @@ -2539,9 +2544,9 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.22.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01fe9932a224b72b45336d96040aa86386d674a31d0af27d800ea7bc8ca97fe" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", "rustls", @@ -2550,15 +2555,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" [[package]] name = "futures-timer" @@ -2568,9 +2573,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-channel", "futures-core", @@ -2593,12 +2598,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - [[package]] name = "generate-bags" version = "4.0.0-dev" @@ -2624,9 +2623,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -2657,14 +2656,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2680,20 +2679,26 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" + [[package]] name = "git2" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3826a6e0e2215d7a41c2bfc7c9244123969273f3476b939a226aac0ab56e9e3c" +checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c" dependencies = [ "bitflags", "libc", @@ -2710,12 +2715,12 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ "aho-corasick", - "bstr 0.2.15", + "bstr 0.2.17", "fnv", "log", "regex", @@ -2723,20 +2728,20 @@ dependencies = [ [[package]] name = "group" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", - "rand_core 0.6.2", + "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" dependencies = [ "bytes", "fnv", @@ -2753,9 +2758,9 @@ dependencies = [ [[package]] name = "half" -version = "1.7.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" @@ -2786,12 +2791,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - [[package]] name = "hashbrown" version = "0.12.3" @@ -2818,9 +2817,18 @@ checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] @@ -2857,7 +2865,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -2867,7 +2875,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.4", + "generic-array 0.14.6", "hmac 0.8.1", ] @@ -2930,9 +2938,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -2942,9 +2950,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.22" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ "bytes", "futures-channel", @@ -2966,9 +2974,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", @@ -2979,6 +2987,30 @@ dependencies = [ "tokio-rustls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "idna" version = "0.2.3" @@ -2990,6 +3022,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "if-addrs" version = "0.7.0" @@ -3049,12 +3091,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.0" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown 0.11.2", + "hashbrown 0.12.3", "serde", ] @@ -3084,9 +3126,19 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "0.7.2" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" + +[[package]] +name = "io-lifetimes" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c3f4eff5495aee4c0399d7b6a0dc2b6e81be84242ffbfcf253ebacccc1d0cb" +checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +dependencies = [ + "libc", + "windows-sys 0.42.0", +] [[package]] name = "ip_network" @@ -3096,9 +3148,9 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ "socket2", "widestring", @@ -3108,15 +3160,27 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.0" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" + +[[package]] +name = "is-terminal" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" +dependencies = [ + "hermit-abi 0.2.6", + "io-lifetimes 1.0.3", + "rustix 0.36.5", + "windows-sys 0.42.0", +] [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] @@ -3135,18 +3199,18 @@ checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "jobserver" -version = "0.1.21" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.54" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1866b355d9c878e5e607473cbe3f63282c0b7aad2db1dbebf55076c686918254" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -3277,21 +3341,24 @@ dependencies = [ [[package]] name = "k256" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3636d281d46c3b64182eb3a0a42b7b483191a2ecc3f05301fa67403f7c9bc949" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sha2 0.10.2", + "sha2 0.10.6", ] [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +dependencies = [ + "cpufeatures", +] [[package]] name = "keccak-hasher" @@ -3445,21 +3512,21 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "leb128" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" [[package]] name = "libgit2-sys" -version = "0.13.2+1.4.2" +version = "0.13.4+1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a42de9a51a5c12e00fc0e4ca6bc2ea43582fc6418488e8f615e905d886f258b" +checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1" dependencies = [ "cc", "libc", @@ -3469,9 +3536,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", "winapi", @@ -3479,9 +3546,15 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.1" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" @@ -3492,7 +3565,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.3", + "getrandom 0.2.8", "instant", "lazy_static", "libp2p-core", @@ -3542,7 +3615,7 @@ dependencies = [ "prost-build", "rand 0.8.5", "rw-stream-sink", - "sha2 0.10.2", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", @@ -3605,7 +3678,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "smallvec", "thiserror", "uint", @@ -3672,7 +3745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "048155686bd81fe6cb5efdef0c6290f25ad32a0a42e8f4f72625cf6a505a206f" dependencies = [ "bytes", - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.2.0", "futures", "lazy_static", "libp2p-core", @@ -3680,7 +3753,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "snow", "static_assertions", "x25519-dalek", @@ -3803,9 +3876,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.41.0" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f079097a21ad017fc8139460630286f02488c8c13b26affb46623aa20d8845" +checksum = "0d6874d66543c4f7e26e3b8ca9a6bead351563a13ab4fafd43c7927f7c0d6c12" dependencies = [ "futures", "libp2p-core", @@ -3832,9 +3905,9 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", "base64", @@ -3845,7 +3918,7 @@ dependencies = [ "libsecp256k1-gen-genmult", "rand 0.8.5", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "typenum", ] @@ -3880,9 +3953,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.2" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" dependencies = [ "cc", "libc", @@ -3901,9 +3974,9 @@ dependencies = [ [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" @@ -3930,6 +4003,12 @@ version = "0.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + [[package]] name = "lite-json" version = "0.2.0" @@ -3950,10 +4029,11 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ + "autocfg", "scopeguard", ] @@ -4030,48 +4110,57 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "matrixmultiply" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" dependencies = [ "rawpointer", ] [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "480b5a5de855d11ff13195950bdc8b98b5e942ef47afc447f6615cdcc4e15d80" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix", + "rustix 0.36.5", ] [[package]] name = "memmap2" -version = "0.5.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" +checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.4" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -4112,24 +4201,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] @@ -4174,9 +4262,9 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2be9a9090bc1cac2930688fa9478092a64c6a92ddc6ae0692d46b37d9cab709" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if", "downcast", @@ -4189,9 +4277,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d702a0530a0141cf4ed147cf5ec7be6f2c187d4e37fcbefc39cf34116bfe8f" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if", "proc-macro2", @@ -4230,17 +4318,17 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3db354f401db558759dfc1e568d010a5d4146f4d3f637be1275ec4a3cf09689" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", - "digest 0.10.3", + "digest 0.10.6", "multihash-derive", - "sha2 0.10.2", + "sha2 0.10.6", "sha3", "unsigned-varint", ] @@ -4261,15 +4349,15 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc41247ec209813e2fd414d6e16b9d94297dacf3cd613fa6ef09cd4d9755c10" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ "bytes", "futures", @@ -4385,22 +4473,22 @@ dependencies = [ [[package]] name = "nix" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" dependencies = [ "bitflags", "cc", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ "bitflags", "cfg-if", @@ -4412,7 +4500,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.0.11", + "clap 4.0.29", "derive_more", "fs_extra", "futures", @@ -4449,7 +4537,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.0.11", + "clap 4.0.29", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -4459,7 +4547,7 @@ dependencies = [ "jsonrpsee", "kitchensink-runtime", "log", - "nix 0.23.1", + "nix 0.23.2", "node-executor", "node-inspect", "node-primitives", @@ -4471,7 +4559,7 @@ dependencies = [ "pallet-timestamp", "pallet-transaction-payment", "parity-scale-codec", - "platforms", + "platforms 2.0.0", "rand 0.8.5", "regex", "sc-authority-discovery", @@ -4568,7 +4656,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -4627,7 +4715,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "generate-bags", "kitchensink-runtime", ] @@ -4636,7 +4724,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -4754,13 +4842,12 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] @@ -4782,18 +4869,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", ] [[package]] name = "num-format" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.2", "itoa 1.0.4", @@ -4801,9 +4888,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -4823,42 +4910,42 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", + "libm 0.2.6", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", ] [[package]] name = "object" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ + "crc32fast", + "hashbrown 0.12.3", + "indexmap", "memchr", ] [[package]] name = "object" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "239da7f290cfa979f43f85a8efeee9a8a76d0827c356d37f9d3d7254d6b537fb" dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", "memchr", ] @@ -4888,25 +4975,35 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "output_vt100" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" dependencies = [ "winapi", ] +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + [[package]] name = "pallet-alliance" version = "4.0.0-dev" @@ -4921,7 +5018,7 @@ dependencies = [ "pallet-identity", "parity-scale-codec", "scale-info", - "sha2 0.10.2", + "sha2 0.10.6", "sp-core", "sp-io", "sp-runtime", @@ -6350,9 +6447,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.1.3" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04bc9583b5e01cc8c70d89acc9af14ef9b1c29ee3a0074b2a9eea8c0fa396690" +checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -6401,7 +6498,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -6411,14 +6508,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.5", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if", "instant", @@ -6430,22 +6527,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.32.0", + "windows-sys 0.42.0", ] [[package]] name = "paste" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "cf1c2c742266c2f1041c914ba65355a83ae8747b05f208319784083583494b4b" [[package]] name = "pbkdf2" @@ -6473,15 +6570,15 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" +checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0" dependencies = [ "thiserror", "ucd-trie", @@ -6489,9 +6586,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b75706b9642ebcb34dab3bc7750f811609a0eb1dd8b88c2d15bf628c1c65b2" +checksum = "cdc078600d06ff90d4ed238f0119d84ab5d43dbaad278b0e33a8820293b32344" dependencies = [ "pest", "pest_generator", @@ -6499,9 +6596,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f9272122f5979a6511a749af9db9bfc810393f63119970d7085fed1c4ea0db" +checksum = "28a1af60b1c4148bb269006a750cff8e2ea36aff34d2d96cf7be0b14d1bed23c" dependencies = [ "pest", "pest_meta", @@ -6512,9 +6609,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8717927f9b79515e565a64fe46c38b8cd0427e64c40680b14a7365ab09ac8d" +checksum = "fec8605d59fc2ae0c6c1aefc0c7c7a9769732017c0ce07f7a9cfffa7b4404f20" dependencies = [ "once_cell", "pest", @@ -6523,9 +6620,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -6581,9 +6678,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "platforms" @@ -6591,11 +6688,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + [[package]] name = "plotters" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", @@ -6606,31 +6709,31 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] [[package]] name = "polling" -version = "2.4.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ "autocfg", "cfg-if", "libc", "log", "wepoll-ffi", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -6658,15 +6761,15 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "predicates" -version = "2.1.3" +version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6bd09a7f7e68f3f0bf710fb7ab9c4615a488b58b5f653382a687701e458c92" +checksum = "f54fc5dc63ed3bbf19494623db4f3af16842c0d975818e469022d09e53f0aa05" dependencies = [ "difflib", "float-cmp", @@ -6678,37 +6781,47 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" [[package]] name = "predicates-tree" -version = "1.0.2" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f553275e5721409451eb85e15fd9a860a6e5ab4496eb215987502b5f5391f2" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", - "treeline", + "termtree", ] [[package]] name = "pretty_assertions" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563" +checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" dependencies = [ - "ansi_term", "ctor", "diff", "output_vt100", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" +dependencies = [ + "proc-macro2", + "syn", ] [[package]] name = "primitive-types" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfd65aea0c5fa0bfcc7c9e7ca828c921ef778f43d325325ec84bda371bfa75a" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" dependencies = [ "fixed-hash", "impl-codec", @@ -6719,10 +6832,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", "thiserror", "toml", ] @@ -6753,32 +6867,32 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "thiserror", ] [[package]] name = "prometheus-client" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c473049631c233933d6286c88bbb7be30e62ec534cf99a9ae0079211f7fa603" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", "itoa 1.0.4", @@ -6799,9 +6913,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" +checksum = "c0b18e655c21ff5ac2084a5ad0611e827b3f92badf79f4910b5a5c58f4d87ff0" dependencies = [ "bytes", "prost-derive", @@ -6809,9 +6923,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.1" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" +checksum = "276470f7f281b0ed53d2ae42dd52b4a8d08853a3c70e7fe95882acbb98a6ae94" dependencies = [ "bytes", "heck", @@ -6820,9 +6934,11 @@ dependencies = [ "log", "multimap", "petgraph", + "prettyplease", "prost", "prost-types", "regex", + "syn", "tempfile", "which", ] @@ -6842,9 +6958,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" +checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" dependencies = [ "anyhow", "itertools", @@ -6855,9 +6971,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" +checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" dependencies = [ "bytes", "prost", @@ -6865,9 +6981,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.12" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3abf49e5417290756acfd26501536358560c4a5cc4a0934d390939acb3e7083a" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" dependencies = [ "cc", ] @@ -6900,9 +7016,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -6934,8 +7050,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.2", + "rand_chacha 0.3.1", + "rand_core 0.6.4", ] [[package]] @@ -6950,12 +7066,12 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.2", + "rand_core 0.6.4", ] [[package]] @@ -6969,11 +7085,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", ] [[package]] @@ -7010,7 +7126,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" dependencies = [ - "rand_core 0.6.2", + "rand_core 0.6.4", ] [[package]] @@ -7021,62 +7137,60 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", "redox_syscall", + "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.6" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" +checksum = "53b15debb4f9d60d767cd8ca9ef7abb2452922f3214671ff052defc7f3502c44" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.6" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" +checksum = "abfa8511e9e94fd3de6585a3d3cd00e01ed556dc9814829280af0e8dc72a8f36" dependencies = [ "proc-macro2", "quote", @@ -7097,9 +7211,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -7108,19 +7222,18 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "byteorder", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "remove_dir_all" @@ -7143,9 +7256,9 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c86280f057430a52f4861551b092a01b419b8eacefc7c995eacb9dc132fe32" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint", "hmac 0.12.1", @@ -7179,11 +7292,12 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.0.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" dependencies = [ "libc", + "rtoolbox", "winapi", ] @@ -7198,15 +7312,25 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix 0.24.2", + "nix 0.24.3", "thiserror", ] +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -7235,28 +7359,42 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.4", + "semver 1.0.14", ] [[package]] name = "rustix" -version = "0.35.9" +version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c825b8aa8010eb9ee99b75f05e10180b9278d161583034d7574c9d617aeada" +checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ "bitflags", "errno", - "io-lifetimes", + "io-lifetimes 0.7.5", "libc", - "linux-raw-sys", - "windows-sys 0.36.1", + "linux-raw-sys 0.0.46", + "windows-sys 0.42.0", +] + +[[package]] +name = "rustix" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes 1.0.3", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.42.0", ] [[package]] name = "rustls" -version = "0.20.2" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" dependencies = [ "log", "ring", @@ -7266,9 +7404,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -7278,18 +7416,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" dependencies = [ "base64", ] [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "rusty-fork" @@ -7315,9 +7453,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "safe-mix" @@ -7449,7 +7587,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.0.11", + "clap 4.0.29", "fdlimit", "futures", "futures-timer", @@ -7826,7 +7964,7 @@ dependencies = [ "tempfile", "tracing", "tracing-subscriber", - "wasmi 0.13.0", + "wasmi 0.13.2", "wat", ] @@ -7839,7 +7977,7 @@ dependencies = [ "sp-wasm-interface", "thiserror", "wasm-instrument 0.3.0", - "wasmi 0.13.0", + "wasmi 0.13.2", ] [[package]] @@ -7851,7 +7989,7 @@ dependencies = [ "sc-executor-common", "sp-runtime-interface", "sp-wasm-interface", - "wasmi 0.13.0", + "wasmi 0.13.2", ] [[package]] @@ -7864,7 +8002,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix", + "rustix 0.35.13", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -8652,9 +8790,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333af15b02563b8182cd863f925bd31ef8fa86a0e095d30c091956057d436153" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", "cfg-if", @@ -8666,9 +8804,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f56acbd0743d29ffa08f911ab5397def774ad01bab3786804cf6ee057fb5e1" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8678,12 +8816,12 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys 0.36.1", ] [[package]] @@ -8694,7 +8832,7 @@ checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" dependencies = [ "arrayref", "arrayvec 0.5.2", - "curve25519-dalek 2.1.2", + "curve25519-dalek 2.1.3", "getrandom 0.1.16", "merlin", "rand 0.7.3", @@ -8734,7 +8872,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array 0.14.4", + "generic-array 0.14.6", "pkcs8", "subtle", "zeroize", @@ -8742,18 +8880,18 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff" +checksum = "d9512ffd81e3a3503ed401f79c33168b9148c75038956039166cd750eaa037c3" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7058dc8eaf3f2810d7828680320acda0b25a288f6d288e19278e249bbf74226b" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" dependencies = [ "cc", ] @@ -8769,9 +8907,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.3.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b239a3d5db51252f6f48f42172c65317f37202f4a21021bf5f9d40a408f4592c" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -8782,9 +8920,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.3.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -8810,9 +8948,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" dependencies = [ "serde", ] @@ -8825,18 +8963,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.145" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +checksum = "e326c9ec8042f1b5da33252c8a37e9ffbd2c9bef0155215b6e6c80c790e05f91" dependencies = [ "serde_derive", ] [[package]] name = "serde_cbor" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" dependencies = [ "half", "serde", @@ -8844,9 +8982,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.145" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +checksum = "42a3df25b0713732468deadad63ab9da1f1fd75a48a15024b50363f128db627e" dependencies = [ "proc-macro2", "quote", @@ -8855,9 +8993,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ "itoa 1.0.4", "ryu", @@ -8875,26 +9013,26 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.9.4" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfebf75d25bd900fd1e7d11501efab59bc846dbc76196839663e6637bba9f25f" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpuid-bool", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] [[package]] name = "sha1" -version = "0.10.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006769ba83e921b3085caa8334186b00cf92b4cb1a6cf4632fbccc8eff5c7549" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -8911,9 +9049,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", @@ -8924,57 +9062,57 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] name = "sha3" -version = "0.10.0" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f935e31cf406e8c0e96c2815a5516181b7004ae8c5f296293221e9b1e356bd" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", "keccak", ] [[package]] name = "sharded-slab" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook-registry" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.6.3" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb766570a2825fa972bceff0d195727876a9cdf2460ab2e52d455dc2de47fd9" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.3", - "rand_core 0.6.2", + "digest 0.10.6", + "rand_core 0.6.4", ] [[package]] @@ -8991,9 +9129,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "slice-group-by" @@ -9003,15 +9144,15 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "smallvec" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" @@ -9022,19 +9163,19 @@ dependencies = [ "aes-gcm", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-pre.1", - "rand_core 0.6.2", + "curve25519-dalek 4.0.0-pre.5", + "rand_core 0.6.4", "ring", "rustc_version 0.4.0", - "sha2 0.10.2", + "sha2 0.10.6", "subtle", ] [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -9383,7 +9524,7 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "wasmi 0.13.0", + "wasmi 0.13.2", "zeroize", ] @@ -9393,8 +9534,8 @@ version = "5.0.0" dependencies = [ "blake2", "byteorder", - "digest 0.10.3", - "sha2 0.10.2", + "digest 0.10.6", + "sha2 0.10.6", "sha3", "sp-std", "twox-hash", @@ -9568,7 +9709,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -9901,7 +10042,7 @@ dependencies = [ "log", "parity-scale-codec", "sp-std", - "wasmi 0.13.0", + "wasmi 0.13.2", "wasmtime", ] @@ -9944,9 +10085,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.34.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a9821878e1f13aba383aa40a86fb1b33c7265774ec91e32563cb1dd1577496" +checksum = "23d92659e7d18d82b803824a9ba5a6022cff101c3491d027c1c1d8d30e749284" dependencies = [ "Inflector", "num-format", @@ -9979,7 +10120,7 @@ dependencies = [ "cfg_aliases", "libc", "parking_lot 0.11.2", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", "static_init_macro", "winapi", ] @@ -10027,9 +10168,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", @@ -10042,7 +10183,7 @@ dependencies = [ name = "subkey" version = "2.0.2" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "sc-cli", ] @@ -10055,7 +10196,7 @@ dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", "schnorrkel", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] @@ -10063,14 +10204,14 @@ dependencies = [ name = "substrate-build-script-utils" version = "3.0.0" dependencies = [ - "platforms", + "platforms 2.0.0", ] [[package]] name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "frame-support", "frame-system", "sc-cli", @@ -10321,15 +10462,15 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" dependencies = [ "proc-macro2", "quote", @@ -10338,9 +10479,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", @@ -10377,9 +10518,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fa7e55043acb85fca6b3c01485a2eeb6b69c5d21002e273c79e465f43b7ac1" +checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" [[package]] name = "tempfile" @@ -10397,13 +10538,19 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] +[[package]] +name = "termtree" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" + [[package]] name = "textwrap" version = "0.11.0" @@ -10459,9 +10606,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.1+5.3.0-patched" +version = "0.5.2+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931e876f91fed0827f863a2d153897790da0b24d882c721a79cb3beb0b903261" +checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" dependencies = [ "cc", "fs_extra", @@ -10470,9 +10617,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -10491,7 +10638,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.8", + "sha2 0.9.9", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -10519,9 +10666,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.1.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -10534,9 +10681,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" +checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" dependencies = [ "autocfg", "bytes", @@ -10549,14 +10696,14 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", @@ -10565,9 +10712,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", "tokio", @@ -10576,9 +10723,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.7" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" dependencies = [ "futures-core", "pin-project-lite 0.2.9", @@ -10615,9 +10762,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" dependencies = [ "serde", ] @@ -10659,15 +10806,15 @@ checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", @@ -10678,9 +10825,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", @@ -10689,9 +10836,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", @@ -10720,9 +10867,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" dependencies = [ "serde", "tracing-core", @@ -10751,12 +10898,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "treeline" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" - [[package]] name = "trie-bench" version = "0.33.0" @@ -10818,7 +10959,7 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.2.3", "ipnet", "lazy_static", "rand 0.8.5", @@ -10860,7 +11001,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.0.11", + "clap 4.0.29", "frame-remote-externalities", "frame-try-runtime", "log", @@ -10885,9 +11026,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.60" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da18123d1316f5a65fc9b94e30a0fcf58afb1daff1b8e18f41dc30f5bfc38c8" +checksum = "db29f438342820400f2d9acfec0d363e987a38b2950bdb50a7069ed17b2148ee" dependencies = [ "dissimilar", "glob", @@ -10912,28 +11053,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.3", + "digest 0.10.6", "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" -version = "0.9.0" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -10943,39 +11084,36 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-normalization" -version = "0.1.17" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" @@ -10983,7 +11121,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] @@ -11007,13 +11145,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna", - "matches", + "idna 0.3.0", "percent-encoding", ] @@ -11025,15 +11162,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "vcpkg" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - -[[package]] -name = "vec-arena" -version = "1.0.0" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" @@ -11103,9 +11234,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.77" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e68338db6becec24d3c7977b5bf8a48be992c934b5d07177e3931f5dc9b076c" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -11113,13 +11244,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.77" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34c405b4f0658583dba0c1c7c9b694f3cac32655db463b56c254a1c75269523" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -11128,9 +11259,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.20" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if", "js-sys", @@ -11140,9 +11271,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.77" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d5a6580be83b19dc570a8f9c324251687ab2184e57086f71625feb57ec77c8" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -11150,9 +11281,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.77" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3775a030dc6f5a0afd8a84981a21cc92a781eb429acef9ecce476d0c9113e92" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -11163,9 +11294,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.77" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c279e376c7a8e8752a8f1eaa35b7b0bee6bb9fb0cdacfa97cc3f1f289c87e2b4" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "wasm-encoder" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" +dependencies = [ + "leb128", +] [[package]] name = "wasm-instrument" @@ -11243,13 +11383,13 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc13b3c219ca9aafeec59150d80d89851df02e0061bc357b4d66fc55a8d38787" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ "parity-wasm", "wasmi-validation", - "wasmi_core 0.2.0", + "wasmi_core 0.2.1", ] [[package]] @@ -11281,12 +11421,12 @@ checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" [[package]] name = "wasmi_core" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a088e8c4c59c6f2b9eae169bf86328adccc477c00b56d3661e3e9fb397b184" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", - "libm", + "libm 0.2.6", "memory_units", "num-rational", "num-traits", @@ -11299,7 +11439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" dependencies = [ "downcast-rs", - "libm", + "libm 0.2.6", "num-traits", ] @@ -11323,9 +11463,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a10dc9784d8c3a33c970e3939180424955f08af2e7f20368ec02685a0e8f065" +checksum = "4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731" dependencies = [ "anyhow", "bincode", @@ -11351,18 +11491,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4dbdc6daf68528cad1275ac91e3f51848ce9824385facc94c759f529decdf8" +checksum = "45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f507f3fa1ee1b2f9a83644e2514242b1dfe580782c0eb042f1ef70255bc4ffe" +checksum = "bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882" dependencies = [ "anyhow", "base64", @@ -11370,9 +11510,9 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.35.13", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "toml", "windows-sys 0.36.1", "zstd", @@ -11380,9 +11520,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f03cf79d982fc68e94ba0bea6a300a3b94621c4eb9705eece0a4f06b235a3b5" +checksum = "4bd91339b742ff20bfed4532a27b73c86b5bcbfedd6bea2dcdf2d64471e1b5c6" dependencies = [ "anyhow", "cranelift-codegen", @@ -11390,7 +11530,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.26.2", "log", "object 0.29.0", "target-lexicon", @@ -11401,13 +11541,13 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c587c62e91c5499df62012b87b88890d0eb470b2ffecc5964e9da967b70c77c" +checksum = "ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644" dependencies = [ "anyhow", "cranelift-entity", - "gimli", + "gimli 0.26.2", "indexmap", "log", "object 0.29.0", @@ -11420,20 +11560,20 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047839b5dabeae5424a078c19b8cc897e5943a7fadc69e3d888b9c9a897666b3" +checksum = "1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681" dependencies = [ - "addr2line", + "addr2line 0.17.0", "anyhow", "bincode", "cfg-if", "cpp_demangle", - "gimli", + "gimli 0.26.2", "log", "object 0.29.0", "rustc-demangle", - "rustix", + "rustix 0.35.13", "serde", "target-lexicon", "thiserror", @@ -11445,20 +11585,20 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b299569abf6f99b7b8e020afaf84a700e8636c6a42e242069267322cd5818235" +checksum = "f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731" dependencies = [ "object 0.29.0", "once_cell", - "rustix", + "rustix 0.35.13", ] [[package]] name = "wasmtime-runtime" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae79e0515160bd5abee5df50a16c4eb8db9f71b530fc988ae1d9ce34dcb8dd01" +checksum = "ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd" dependencies = [ "anyhow", "cc", @@ -11468,10 +11608,10 @@ dependencies = [ "log", "mach", "memfd", - "memoffset", + "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix", + "rustix 0.35.13", "thiserror", "wasmtime-asm-macros", "wasmtime-environ", @@ -11481,9 +11621,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790cf43ee8e2d5dad1780af30f00d7a972b74725fb1e4f90c28d62733819b185" +checksum = "d23d61cb4c46e837b431196dd06abb11731541021916d03476a178b54dc07aeb" dependencies = [ "cranelift-entity", "serde", @@ -11493,27 +11633,30 @@ dependencies = [ [[package]] name = "wast" -version = "38.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ebc29df4629f497e0893aacd40f13a4a56b85ef6eb4ab6d603f07244f1a7bf2" +checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" dependencies = [ "leb128", + "memchr", + "unicode-width", + "wasm-encoder", ] [[package]] name = "wat" -version = "1.0.40" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcfaeb27e2578d2c6271a45609f4a055e6d7ba3a12eff35b1fd5ba147bdf046" +checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.54" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a84d70d1ec7d2da2d26a5bd78f4bca1b8c3254805363ce743b7a05bc30d195a" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -11531,9 +11674,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ "webpki", ] @@ -11549,12 +11692,13 @@ dependencies = [ [[package]] name = "which" -version = "4.0.2" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ + "either", "libc", - "thiserror", + "once_cell", ] [[package]] @@ -11607,19 +11751,6 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows-sys" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" -dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", -] - [[package]] name = "windows-sys" version = "0.36.1" @@ -11634,10 +11765,25 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" [[package]] name = "windows_aarch64_msvc" @@ -11652,10 +11798,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] -name = "windows_i686_gnu" -version = "0.32.0" +name = "windows_aarch64_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" @@ -11670,10 +11816,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] -name = "windows_i686_msvc" -version = "0.32.0" +name = "windows_i686_gnu" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" [[package]] name = "windows_i686_msvc" @@ -11688,10 +11834,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" +name = "windows_i686_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" [[package]] name = "windows_x86_64_gnu" @@ -11706,10 +11852,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" @@ -11723,20 +11875,26 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi", ] [[package]] name = "wyz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] @@ -11747,7 +11905,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.2.0", "rand_core 0.5.1", "zeroize", ] @@ -11766,6 +11924,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + [[package]] name = "zeroize" version = "1.5.7" @@ -11777,9 +11941,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", @@ -11808,9 +11972,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.4+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" dependencies = [ "cc", "libc", diff --git a/primitives/arkworks/tests/tests.rs b/primitives/arkworks/tests/tests.rs index 47dbac8b47eb6..e542951194517 100644 --- a/primitives/arkworks/tests/tests.rs +++ b/primitives/arkworks/tests/tests.rs @@ -17,8 +17,8 @@ impl HostFunctions for Host { fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { bls12_381::final_exponentiation(f12) } - fn bls12_381_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - bls12_381::msm_bigint_g1(bases, bigints) + fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + bls12_381::msm_g1(bases, scalars) } fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { bls12_381::mul_projective_g1(base, scalar) @@ -26,8 +26,8 @@ impl HostFunctions for Host { fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { bls12_381::mul_affine_g1(base, scalar) } - fn bls12_381_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - bls12_381::msm_bigint_g2(bases, bigints) + fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + bls12_381::msm_g2(bases, scalars) } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { bls12_381::mul_projective_g2(base, scalar) From ff03de3aa006d45799b36157f2f244c1df274eec Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 11:54:28 +0100 Subject: [PATCH 015/364] add ed_on_bls12_381 --- primitives/arkworks/src/bls12_377.rs | 8 +- primitives/arkworks/src/bls12_381.rs | 6 +- primitives/arkworks/src/ed_on_bls12_381.rs | 155 ++++++--------------- 3 files changed, 44 insertions(+), 125 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index c1c499e54ccb0..894f864a784e8 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -224,8 +224,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -246,7 +245,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let scalars: Vec<_> = scalars + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); @@ -258,8 +257,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 1a68de4d43afc..300e3a1a1745d 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -224,8 +224,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -258,8 +257,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index b4823390d1b8b..d37e51116656d 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -20,97 +20,54 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubParameters}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, + twisted_edwards, + twisted_edwards::TECurveConfig, Group, VariableBaseMSM, }; +use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubParameters}; use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; -// /// Compute a scalar multiplication on G2 through arkworks -// pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { -// let cursor = Cursor::new(base); -// let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - -// let cursor = Cursor::new(scalar); -// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); -// let mut res = EdwardsProjective::mul_bigint(&self, other); -// let mut res = ark_ec::bls12::G2Projective::::zero(); -// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { -// res.double_in_place(); -// if b { -// res += base; -// } -// } -// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; -// let mut cursor = Cursor::new(&mut serialized[..]); -// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); -// serialized -// } - -// /// Compute a scalar multiplication on G2 through arkworks -// pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { -// let cursor = Cursor::new(base); -// let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - -// let cursor = Cursor::new(scalar); -// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); -// let mut res = ark_ec::bls12::G1Projective::::zero(); -// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { -// res.double_in_place(); -// if b { -// res += base; -// } -// } -// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; -// let mut cursor = Cursor::new(&mut serialized[..]); -// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); -// serialized -// } - -// /// Compute a scalar multiplication on G2 through arkworks -// pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { -// let cursor = Cursor::new(base); -// let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - -// let cursor = Cursor::new(scalar); -// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); -// let mut res = ark_ec::bls12::G1Projective::::zero(); -// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { -// res.double_in_place(); -// if b { -// res += base; -// } -// } -// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; -// let mut cursor = Cursor::new(&mut serialized[..]); -// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); -// serialized -// } - -// /// Compute a scalar multiplication on G2 through arkworks -// pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { -// let cursor = Cursor::new(base); -// let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = twisted_edwards::Projective::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_projective(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} -// let cursor = Cursor::new(scalar); -// let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); -// let mut res = ark_ec::bls12::G2Projective::::zero(); -// for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { -// res.double_in_place(); -// if b { -// res += base; -// } -// } -// let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; -// let mut cursor = Cursor::new(&mut serialized[..]); -// res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); -// serialized -// } +/// Compute a scalar multiplication through arkworks +pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = twisted_edwards::Affine::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_affine(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { @@ -118,7 +75,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ark_ec::twisted_edwards::Affine::::deserialize_with_mode( + twisted_edwards::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -138,44 +95,10 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - + let result = ::msm(&bases, &scalars); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); serialized } - -// /// Compute a multi scalar multiplication on G! through arkworks -// pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { -// let bases: Vec<_> = bases -// .iter() -// .map(|a| { -// let cursor = Cursor::new(a); -// ::G2Affine::deserialize_with_mode( -// cursor, -// Compress::Yes, -// Validate::No, -// ) -// .unwrap() -// }) -// .collect(); -// let bigints: Vec<_> = bigints -// .iter() -// .map(|a| { -// let cursor = Cursor::new(a); -// <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( -// cursor, -// Compress::Yes, -// Validate::No, -// ) -// .unwrap() -// }) -// .collect(); -// let result = -// <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); -// let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; -// let mut cursor = Cursor::new(&mut serialized[..]); -// result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); -// serialized -// } From bd4d05c617ed962b51a972f1f73b9fd8c8d626ca Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 12:05:50 +0100 Subject: [PATCH 016/364] add ed_on_bls12_381 host function calls --- primitives/io/src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 49b9e75b29e9e..f8a4c32774612 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1255,6 +1255,21 @@ pub trait Crypto { fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) } + + /// Compute affine multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::mul_affine(base, scalar) + } + + /// Compute projective multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::mul_projective(base, scalar) + } + + /// Compute msm on ed_on_bls12_381 + fn ed_on_bls12_381_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::ed_on_bls12_381::msm(bases, scalars) + } } /// Interface that provides functions for hashing with different algorithms. From b38a4c43f285304945e6272ca0cde18af9b7f0a2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 12:26:43 +0100 Subject: [PATCH 017/364] add ed_on_bls12_377 together with host function calls --- Cargo.lock | 13 +++ primitives/arkworks/Cargo.toml | 1 + primitives/arkworks/src/ed_on_bls12_377.rs | 104 +++++++++++++++++++++ primitives/arkworks/src/lib.rs | 1 + primitives/io/src/lib.rs | 15 +++ 5 files changed, 134 insertions(+) create mode 100644 primitives/arkworks/src/ed_on_bls12_377.rs diff --git a/Cargo.lock b/Cargo.lock index efc225d7783e1..bfc96542ededf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -219,6 +219,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a244cfa3960b94c70b9b28f5c9c213bb9dfbbffd5282ef886d0d415c9850b6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-ed-on-bls12-381" version = "0.4.0-alpha.1" @@ -9309,6 +9321,7 @@ dependencies = [ "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-bw6-761", "ark-ec", + "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", "ark-ff", "ark-serialize", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 508a711f4610e..cd94c7fb79715 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -21,6 +21,7 @@ ark-bls12-381 = { version = "0.4.0-alpha" } ark-bls12-377 = { version = "0.4.0-alpha" } ark-bw6-761 = { version = "0.4.0-alpha" } ark-ed-on-bls12-381 = { version = "0.4.0-alpha" } +ark-ed-on-bls12-377 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } [dev-dependencies] diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs new file mode 100644 index 0000000000000..c1111a042401f --- /dev/null +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -0,0 +1,104 @@ +// This file is part of Substrate. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Hashing Functions. + +#![warn(missing_docs)] +#![cfg_attr(not(feature = "std"), no_std)] + +use ark_ec::{ + models::CurveConfig, + pairing::{MillerLoopOutput, Pairing}, + twisted_edwards, + twisted_edwards::TECurveConfig, + Group, VariableBaseMSM, +}; +use ark_ed_on_bls12_377::{EdwardsAffine, EdwardsParameters, EdwardsProjective}; +use ark_ff::PrimeField; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, Zero}; +use sp_std::{vec, vec::Vec}; + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = twisted_edwards::Projective::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_projective(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication through arkworks +pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = twisted_edwards::Affine::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_affine(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + twisted_edwards::Affine::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + let scalars: Vec<_> = scalars + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::ScalarField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + + let result = ::msm(&bases, &scalars); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 85885f8ea9954..0e62268599bf9 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,4 +1,5 @@ pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; +pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index f8a4c32774612..cf8449c8ae1a6 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1270,6 +1270,21 @@ pub trait Crypto { fn ed_on_bls12_381_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::msm(bases, scalars) } + + /// Compute affine multiplication on ed_on_bls12_377 + fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_377::mul_affine(base, scalar) + } + + /// Compute projective multiplication on ed_on_bls12_377 + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) + } + + /// Compute msm on ed_on_bls12_377 + fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::ed_on_bls12_377::msm(bases, scalars) + } } /// Interface that provides functions for hashing with different algorithms. From 0163d2bc70aa4def97e8a19f6252b136201619bc Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 16 Dec 2022 13:06:28 +0100 Subject: [PATCH 018/364] refactor mul_affine, mul_projective --- primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/src/bls12_377.rs | 34 ++++------------------------ primitives/arkworks/src/bls12_381.rs | 17 +++----------- 3 files changed, 9 insertions(+), 44 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index cd94c7fb79715..f533a27ed9e87 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -26,7 +26,7 @@ sp-std = { version = "5.0.0", default-features = false, path = "../std" } [dev-dependencies] ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } -ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", default-features = false } [features] default = ["std"] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 894f864a784e8..6c92ff5ec6d01 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -24,7 +24,7 @@ use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective, P use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - Group, + Group, short_weierstrass::SWCurveConfig, }; use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; @@ -125,13 +125,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -145,13 +139,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -165,13 +153,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -185,13 +167,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 300e3a1a1745d..a882ae03ceb21 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -24,6 +24,7 @@ use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective, P use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, + short_weierstrass::SWCurveConfig, Group, }; use ark_ff::PrimeField; @@ -165,13 +166,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -185,13 +180,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); From b223cd5a9b97568cf4c5aef2c0ffa9efb79dbd3f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 21 Dec 2022 16:21:31 +0100 Subject: [PATCH 019/364] fix bw6_761 --- Cargo.lock | 277 +++++++++++---------- Cargo.toml | 13 + primitives/arkworks/Cargo.toml | 5 +- primitives/arkworks/src/bls12_377.rs | 23 +- primitives/arkworks/src/bls12_381.rs | 20 +- primitives/arkworks/src/bw6_761.rs | 26 +- primitives/arkworks/src/ed_on_bls12_377.rs | 16 +- primitives/arkworks/src/ed_on_bls12_381.rs | 16 +- primitives/arkworks/tests/tests.rs | 4 +- primitives/io/src/lib.rs | 88 +++---- 10 files changed, 257 insertions(+), 231 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfc96542ededf..2e920a201dcd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -122,9 +122,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "7724808837b77f4b4de9d283820f9d98bcf496d5692934b857a2399d31ff22e6" [[package]] name = "approx" @@ -143,14 +143,13 @@ checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" [[package]] name = "ark-algebra-test-templates" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c8f1fd0f6578c14a7bd37b751f51303a3df867a2565632579f52d8e458fd7f" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "ark-ec", "ark-ff", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", "num-bigint", "num-integer", "num-traits", @@ -159,59 +158,44 @@ dependencies = [ [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc213b03e8462cc880b4b80cb4d0636235e86474b47ae172d8c1e1daf792f4ac" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45de41dee7fbd21b6241a2c1254498aa25463bd91ce3cc7c5bccaa6916ef047d" +source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" dependencies = [ "ark-ec", "ark-ff", - "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", ] [[package]] name = "ark-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves/#f8a6a4050e088cbfbb20675c03f15fc61593cfdf" +source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" dependencies = [ "ark-ec", "ark-ff", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", ] [[package]] name = "ark-bw6-761" version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebff1ddcda7ab77367e63b75981e992a4f4fe70b80a0da5733a02c74d939d17e" +source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" dependencies = [ "ark-bls12-377", "ark-ec", "ark-ff", - "ark-std", + "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ec" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f358ed64ac9fc6cc1c47dd484a64248d2edc8708e19c039afd666b9d4caeb423" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "ark-ff", - "ark-poly", + "ark-poly 0.4.0-alpha.5 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", "itertools", @@ -222,37 +206,34 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a244cfa3960b94c70b9b28f5c9c213bb9dfbbffd5282ef886d0d415c9850b6" +source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" dependencies = [ "ark-bls12-377", "ark-ec", "ark-ff", - "ark-std", + "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed409af783dcec14f903dcc2f8751612ab6610dd8c2dee9830a63384ed85a9b" +source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" dependencies = [ - "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-bls12-381", "ark-ec", "ark-ff", - "ark-std", + "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ff" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c7e014e61fb7a579a01f33b900b4dced5718c191d949d2172e0648049c33c4" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "ark-ff-asm", "ark-ff-macros", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", "itertools", @@ -265,9 +246,8 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c6e6fdb3e17774b9e413cd04b5b8e8718d68a3be4e3841177beacd81086e9b" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "quote", "syn", @@ -275,9 +255,8 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ca2540a04f150bb36a97bfb34a17e9eae243bfd691621f21396f04e5bbde2bf" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "num-bigint", "num-traits", @@ -288,39 +267,58 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.0-alpha.4" +version = "0.4.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46be5569ab08dfaaeedeccb06ca89eed87a707e825fa3f9cd22aa4096ff787a" +checksum = "318c5c9c77aaec90eddac48e4472b4d7802f861c0441eceaf814e56b39a41d60" dependencies = [ "ark-ff", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", +] + +[[package]] +name = "ark-poly" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", ] [[package]] name = "ark-serialize" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7aa0aa2e2f75b99b4cd0dc64338d380a2e4cceacd1bd6907bfe8fbe2efe210a" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.4.0-alpha", "digest 0.10.6", ] [[package]] name = "ark-serialize-derive" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab275ff26d56b90a50c8ad8613a9d812efe2f245cdef2a65d22cc403f1a02a7" +version = "0.4.0-alpha.5" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "git+https://github.com/arkworks-rs/std#7019830e89b69aca059ce7848e53bd99a09efbab" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "ark-std" version = "0.4.0-alpha" @@ -333,28 +331,28 @@ dependencies = [ [[package]] name = "ark-sub-bls12-381" -version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#257705366e83fd38ac681f4d90d5aab37916d520" +version = "0.4.0" +source = "git+https://github.com/achimcc/ark-sub-curves?branch=fork-models#bcdca489eed33869e626832d99084aeff95f7db8" dependencies = [ - "ark-bls12-381 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves/)", "ark-ec", "ark-ff", "ark-serialize", - "ark-std", + "ark-std 0.3.0", "ark-sub-models", ] [[package]] name = "ark-sub-models" -version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#257705366e83fd38ac681f4d90d5aab37916d520" +version = "0.4.0-alpha.5" +source = "git+https://github.com/achimcc/ark-sub-curves?branch=fork-models#bcdca489eed33869e626832d99084aeff95f7db8" dependencies = [ "ark-ec", "ark-ff", + "ark-poly 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", "derivative", - "getrandom 0.2.8", + "hashbrown 0.13.1", "itertools", "num-traits", "zeroize", @@ -509,9 +507,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" +checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" dependencies = [ "proc-macro2", "quote", @@ -688,6 +686,12 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "better_any" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1795ebc740ea791ffbe6685e0688ab1effec16c2864e0476db40bfdf0c02cb3d" + [[package]] name = "bincode" version = "1.3.3" @@ -736,9 +740,9 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e5fd123190ce1c2e559308a94c9bacad77907d4c6005d9e58fe1a0689e55e" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ "digest 0.10.6", ] @@ -937,7 +941,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.14", + "semver 1.0.15", "serde", "serde_json", ] @@ -1550,9 +1554,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf" +checksum = "27874566aca772cb515af4c6e997b5fe2119820bca447689145e39bb734d19a0" dependencies = [ "cc", "cxxbridge-flags", @@ -1562,9 +1566,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39" +checksum = "e7bb951f2523a49533003656a72121306b225ec16a49a09dc6b0ba0d6f3ec3c0" dependencies = [ "cc", "codespan-reporting", @@ -1577,15 +1581,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12" +checksum = "be778b6327031c1c7b61dd2e48124eee5361e6aa76b8de93692f011b08870ab4" [[package]] name = "cxxbridge-macro" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6" +checksum = "7b8a2b87662fe5a0a0b38507756ab66aff32638876a0866e5a5fc82ceb07ee49" dependencies = [ "proc-macro2", "quote", @@ -1734,9 +1738,9 @@ dependencies = [ [[package]] name = "dissimilar" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c97b9233581d84b8e1e689cdd3a47b6f69770084fc246e86a7f78b0d9c1d4a5" +checksum = "bd5f0c7e4bd266b8ab2550e6238d2e74977c23c15536ac7be45e9c95e2e3fbbb" [[package]] name = "dns-parser" @@ -1768,9 +1772,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -1795,9 +1799,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" +checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" [[package]] name = "ecdsa" @@ -2673,10 +2677,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -2922,7 +2924,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.4", + "itoa 1.0.5", ] [[package]] @@ -2975,7 +2977,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.4", + "itoa 1.0.5", "pin-project-lite 0.2.9", "socket2", "tokio", @@ -3205,9 +3207,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -3977,9 +3979,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -4895,7 +4897,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.2", - "itoa 1.0.4", + "itoa 1.0.5", ] [[package]] @@ -6552,9 +6554,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1c2c742266c2f1041c914ba65355a83ae8747b05f208319784083583494b4b" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -6821,9 +6823,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" +checksum = "2c8992a85d8e93a28bdf76137db888d3874e3b230dee5ed8bebac4c9f7617773" dependencies = [ "proc-macro2", "syn", @@ -6879,9 +6881,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" dependencies = [ "unicode-ident", ] @@ -6907,7 +6909,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", - "itoa 1.0.4", + "itoa 1.0.5", "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] @@ -7028,9 +7030,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" dependencies = [ "proc-macro2", ] @@ -7191,18 +7193,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b15debb4f9d60d767cd8ca9ef7abb2452922f3214671ff052defc7f3502c44" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfa8511e9e94fd3de6585a3d3cd00e01ed556dc9814829280af0e8dc72a8f36" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", @@ -7371,7 +7373,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.14", + "semver 1.0.15", ] [[package]] @@ -7437,9 +7439,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rusty-fork" @@ -7465,9 +7467,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -8862,9 +8864,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "sct" @@ -8960,9 +8962,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "3bfa246f936730408c0abee392cc1a50b118ece708c7f630516defd64480c7d8" dependencies = [ "serde", ] @@ -8975,9 +8977,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e326c9ec8042f1b5da33252c8a37e9ffbd2c9bef0155215b6e6c80c790e05f91" +checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" dependencies = [ "serde_derive", ] @@ -8994,9 +8996,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a3df25b0713732468deadad63ab9da1f1fd75a48a15024b50363f128db627e" +checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" dependencies = [ "proc-macro2", "quote", @@ -9005,11 +9007,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" +checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" dependencies = [ - "itoa 1.0.4", + "itoa 1.0.5", "ryu", "serde", ] @@ -9318,15 +9320,16 @@ version = "0.0.1" dependencies = [ "ark-algebra-test-templates", "ark-bls12-377", - "ark-bls12-381 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-bls12-381", "ark-bw6-761", "ark-ec", "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", "ark-ff", "ark-serialize", - "ark-std", + "ark-std 0.4.0-alpha", "ark-sub-bls12-381", + "better_any", "sp-std", ] @@ -10481,9 +10484,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" +checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" dependencies = [ "proc-macro2", "quote", @@ -10575,18 +10578,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -11039,9 +11042,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db29f438342820400f2d9acfec0d363e987a38b2950bdb50a7069ed17b2148ee" +checksum = "ed01de3de062db82c0920b5cabe804f88d599a3f217932292597c678c903754d" dependencies = [ "dissimilar", "glob", @@ -11103,9 +11106,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" @@ -11992,3 +11995,7 @@ dependencies = [ "cc", "libc", ] + +[[patch.unused]] +name = "ark-sub-bls12-381" +version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index eb78d5e104486..0a01e583d0961 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -320,3 +320,16 @@ inherits = "release" lto = "fat" # https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units codegen-units = 1 + +[patch.crates-io] +ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-std = { git = "https://github.com/arkworks-rs/std" } +ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-sub-bls12-381 = { path = "../ark-sub-curves/ark_sub_bls12_381" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index f533a27ed9e87..ea7561874002e 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -23,10 +23,11 @@ ark-bw6-761 = { version = "0.4.0-alpha" } ark-ed-on-bls12-381 = { version = "0.4.0-alpha" } ark-ed-on-bls12-377 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } +better_any = { version = "0.2.0" } [dev-dependencies] -ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", default-features = false } +ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-sub-curves", branch = "fork-models" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] default = ["std"] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 6c92ff5ec6d01..073c479d7a195 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,11 +20,12 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_bls12_377::{Bls12_377, Config, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - Group, short_weierstrass::SWCurveConfig, + short_weierstrass::SWCurveConfig, + Group, }; use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; @@ -125,7 +126,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -139,7 +140,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -153,7 +154,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -167,7 +168,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -192,7 +193,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -200,7 +201,8 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -225,7 +227,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -233,7 +235,8 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index a882ae03ceb21..90db58bd5c67c 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective, Parameters}; +use ark_bls12_381::{Bls12_381, Config, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, @@ -126,7 +126,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); + let mut res = ark_ec::bls12::G2Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -146,7 +146,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); + let mut res = ark_ec::bls12::G1Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -166,7 +166,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -180,7 +180,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -205,7 +205,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -213,7 +213,8 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -238,7 +239,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -246,7 +247,8 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars); + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 35fdf0937007d..e730f445637dd 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, Parameters, BW6_761}; +use ark_bw6_761::{Config, G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing, PairingOutput}, @@ -125,7 +125,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G2Projective::::zero(); + let mut res = ark_ec::bw6::G2Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -145,7 +145,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G1Projective::::zero(); + let mut res = ark_ec::bw6::G1Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -165,7 +165,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G1Projective::::zero(); + let mut res = ark_ec::bw6::G1Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -185,7 +185,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G2Projective::::zero(); + let mut res = ark_ec::bw6::G2Projective::::zero(); for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { res.double_in_place(); if b { @@ -199,7 +199,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_bigint_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -212,11 +212,11 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -225,7 +225,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G1 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -233,7 +233,7 @@ pub fn msm_bigint_g1(bases: Vec>, bigints: Vec>) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { +pub fn msm_bigint_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -246,11 +246,11 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { .unwrap() }) .collect(); - let bigints: Vec<_> = bigints + let scalars: Vec<_> = scalars .iter() .map(|a| { let cursor = Cursor::new(a); - <::ScalarField as PrimeField>::BigInt::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -259,7 +259,7 @@ pub fn msm_bigint_g2(bases: Vec>, bigints: Vec>) -> Vec { }) .collect(); let result = - <::G2 as ark_ec::VariableBaseMSM>::msm_bigint(&bases, &bigints); + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index c1111a042401f..84be7a86b7006 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -27,7 +27,7 @@ use ark_ec::{ twisted_edwards::TECurveConfig, Group, VariableBaseMSM, }; -use ark_ed_on_bls12_377::{EdwardsAffine, EdwardsParameters, EdwardsProjective}; +use ark_ed_on_bls12_377::{EdwardsAffine, EdwardsConfig, EdwardsProjective}; use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, Zero}; @@ -36,7 +36,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Projective::::deserialize_with_mode( + let base = twisted_edwards::Projective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -44,7 +44,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -54,7 +54,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Affine::::deserialize_with_mode( + let base = twisted_edwards::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -62,7 +62,7 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -75,7 +75,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - twisted_edwards::Affine::::deserialize_with_mode( + twisted_edwards::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -87,7 +87,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -96,7 +96,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { }) .collect(); - let result = ::msm(&bases, &scalars); + let result = ::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index d37e51116656d..c2ecebf516963 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -27,7 +27,7 @@ use ark_ec::{ twisted_edwards::TECurveConfig, Group, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubParameters}; +use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubConfig}; use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, Zero}; @@ -36,7 +36,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Projective::::deserialize_with_mode( + let base = twisted_edwards::Projective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -44,7 +44,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -54,7 +54,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Affine::::deserialize_with_mode( + let base = twisted_edwards::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -62,7 +62,7 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -75,7 +75,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - twisted_edwards::Affine::::deserialize_with_mode( + twisted_edwards::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -87,7 +87,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -96,7 +96,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { }) .collect(); - let result = ::msm(&bases, &scalars); + let result = ::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/tests/tests.rs b/primitives/arkworks/tests/tests.rs index e542951194517..184cc84ba2354 100644 --- a/primitives/arkworks/tests/tests.rs +++ b/primitives/arkworks/tests/tests.rs @@ -44,13 +44,13 @@ type G1Projective = G1Projective_Host; type G2Projective = G2Projective_Host; test_pairing!(pairing; crate::Bls12_381); -// test_group!(g1; crate::G1Projective; sw); +test_group!(g1; crate::G1Projective; sw); #[cfg(test)] mod tests { use super::*; #[test] fn bls12_381_msm() { - test_var_base_msm::(); + // test_var_base_msm::(); } } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index cf8449c8ae1a6..7cb238a031b10 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1211,50 +1211,50 @@ pub trait Crypto { sp_arkworks::bls12_377::msm_g2(bases, scalars) } - /// Compute a multi pairing - fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::bw6_761::multi_pairing(a, b) - } - - /// Compute a multi Miller loop - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::bw6_761::multi_miller_loop(a, b) - } - - /// Compute a final exponentiation - fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { - sp_arkworks::bw6_761::final_exponentiation(f12) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_projective_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_projective_g1(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g1(base, scalar) - } - - /// Compute a bigint_msm on G1 - fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) - } + // /// Compute a multi pairing + // fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { + // sp_arkworks::bw6_761::multi_pairing(a, b) + // } + + // /// Compute a multi Miller loop + // fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + // sp_arkworks::bw6_761::multi_miller_loop(a, b) + // } + + // /// Compute a final exponentiation + // fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + // sp_arkworks::bw6_761::final_exponentiation(f12) + // } + + // /// Compute a bigint_msm on G2 + // fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + // sp_arkworks::bw6_761::mul_projective_g2(base, scalar) + // } + + // /// Compute a bigint_msm on G2 + // fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + // sp_arkworks::bw6_761::mul_affine_g2(base, scalar) + // } + + // /// Compute a bigint_msm on G2 + // fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + // sp_arkworks::bw6_761::mul_projective_g1(base, scalar) + // } + + // /// Compute a bigint_msm on G2 + // fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + // sp_arkworks::bw6_761::mul_affine_g1(base, scalar) + // } + + // /// Compute a bigint_msm on G1 + // fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + // sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) + // } + + // /// Compute a bigint_msm on G2 + // fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + // sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) + // } /// Compute affine multiplication on ed_on_bls12_381 fn ed_on_bls12_381_mul_affine(base: Vec, scalar: Vec) -> Vec { From ece27a6696d45b11952ee1adfb9706fc100f3be5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 12:30:42 +0100 Subject: [PATCH 020/364] add bls12_381 curve --- Cargo.lock | 40 +--- Cargo.toml | 4 +- .../ark_sub_bls12_381/Cargo.toml | 32 +++ .../ark_sub_bls12_381/LICENSE-APACHE | 1 + .../ark_sub_bls12_381/LICENSE-MIT | 1 + .../ark_sub_bls12_381/src/curves/g1.rs | 211 ++++++++++++++++++ .../ark_sub_bls12_381/src/curves/g2.rs | 78 +++++++ .../ark_sub_bls12_381/src/curves/mod.rs | 91 ++++++++ .../ark_sub_bls12_381/src/curves/tests.rs | 7 + .../ark_sub_bls12_381/src/lib.rs | 27 +++ .../arkworks-curves/ark_sub_models/Cargo.toml | 34 +++ .../ark_sub_models/src/bls12/g1.rs | 57 +++++ .../ark_sub_models/src/bls12/g2.rs | 56 +++++ .../ark_sub_models/src/bls12/mod.rs | 87 ++++++++ .../arkworks-curves/ark_sub_models/src/lib.rs | 2 + primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/src/bls12_381.rs | 2 +- 17 files changed, 691 insertions(+), 41 deletions(-) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml create mode 120000 primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE create mode 120000 primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs create mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs create mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs create mode 100644 primitives/arkworks-curves/ark_sub_models/Cargo.toml create mode 100644 primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs create mode 100644 primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs create mode 100644 primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_models/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 2e920a201dcd9..9387d03f53a22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -193,7 +193,7 @@ version = "0.4.0-alpha.5" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" dependencies = [ "ark-ff", - "ark-poly 0.4.0-alpha.5 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-poly", "ark-serialize", "ark-std 0.4.0-alpha", "derivative", @@ -265,19 +265,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-poly" -version = "0.4.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "318c5c9c77aaec90eddac48e4472b4d7802f861c0441eceaf814e56b39a41d60" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", -] - [[package]] name = "ark-poly" version = "0.4.0-alpha.5" @@ -332,30 +319,13 @@ dependencies = [ [[package]] name = "ark-sub-bls12-381" version = "0.4.0" -source = "git+https://github.com/achimcc/ark-sub-curves?branch=fork-models#bcdca489eed33869e626832d99084aeff95f7db8" +source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ + "ark-bls12-381", "ark-ec", "ark-ff", "ark-serialize", "ark-std 0.3.0", - "ark-sub-models", -] - -[[package]] -name = "ark-sub-models" -version = "0.4.0-alpha.5" -source = "git+https://github.com/achimcc/ark-sub-curves?branch=fork-models#bcdca489eed33869e626832d99084aeff95f7db8" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", - "itertools", - "num-traits", - "zeroize", ] [[package]] @@ -11995,7 +11965,3 @@ dependencies = [ "cc", "libc", ] - -[[patch.unused]] -name = "ark-sub-bls12-381" -version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 0a01e583d0961..d381721591ca2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -325,11 +325,11 @@ codegen-units = 1 ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-std = { git = "https://github.com/arkworks-rs/std" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } -ark-sub-bls12-381 = { path = "../ark-sub-curves/ark_sub_bls12_381" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml new file mode 100644 index 0000000000000..d2a65e6e053c6 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "ark-sub-bls12-381" +version = "0.4.0" +authors = [ "arkworks contributors" ] +description = "The BLS12-381 pairing-friendly elliptic curve" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-bls12-381/" +keywords = ["cryptography", "finite-fields", "elliptic-curves" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-std = { git = "https://github.com/arkworks-rs/std", default-features = false } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-sub-models = { path = "../ark_sub_models" } +sp-io = { path = "../../io" } + +[features] +default = [ "curve" ] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] + +curve = [ "scalar_field", "base_field" ] +scalar_field = [] +base_field = [] +r1cs = [ "base_field", "ark-r1cs-std" ] + diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE b/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE new file mode 120000 index 0000000000000..965b606f331b5 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT b/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT new file mode 120000 index 0000000000000..76219eb72e852 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs new file mode 100644 index 0000000000000..f7f6103957f39 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -0,0 +1,211 @@ +use ark_ec::models::{ + short_weierstrass::{Affine as SWAffine, SWCurveConfig}, + twisted_edwards::{ + Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, + }, + CurveConfig, +}; +use ark_ff::{Field, MontFp, Zero}; +use core::ops::Neg; + +use crate::{Fq, Fr}; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 + const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 5285428838741532253824584287042945485047145357130994810877 + const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = 1 + const COEFF_B: Fq = Fq::ONE; + + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } +} + +pub type G1SWAffine = SWAffine; +pub type G1TEAffine = TEAffine; +pub type G1TEProjective = TEProjective; + +/// Bls12_377::G1 also has a twisted Edwards form. +/// It can be obtained via the following script, implementing +/// 1. SW -> Montgomery -> TE1 transformation: +/// 2. TE1 -> TE2 normalization (enforcing `a = -1`) +/// ``` sage +/// # modulus +/// p = 0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 +/// Fp = Zmod(p) +/// +/// ##################################################### +/// # Weierstrass curve: y² = x³ + A * x + B +/// ##################################################### +/// # curve y^2 = x^3 + 1 +/// WA = Fp(0) +/// WB = Fp(1) +/// +/// ##################################################### +/// # Montgomery curve: By² = x³ + A * x² + x +/// ##################################################### +/// # root for x^3 + 1 = 0 +/// alpha = -1 +/// # s = 1 / (sqrt(3alpha^2 + a)) +/// s = 1/(Fp(3).sqrt()) +/// +/// # MA = 3 * alpha * s +/// MA = Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) +/// # MB = s +/// MB = Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) +/// +/// # ##################################################### +/// # # Twisted Edwards curve 1: a * x² + y² = 1 + d * x² * y² +/// # ##################################################### +/// # We first convert to TE form obtaining a curve with a != -1, and then +/// # apply a transformation to obtain a TE curve with a = -1. +/// # a = (MA+2)/MB +/// TE1a = Fp(61134141799337779744243169579317764548490943457438569789767076791016838392692895365021181670618017873462480451583) +/// # b = (MA-2)/MB +/// TE1d = Fp(197530284213631314266409564115575768987902569297476090750117185875703629955647927409947706468955342250977841006588) +/// +/// # ##################################################### +/// # # Twisted Edwards curve 2: a * x² + y² = 1 + d * x² * y² +/// # ##################################################### +/// # a = -1 +/// TE2a = Fp(-1) +/// # b = -TE1d/TE1a +/// TE2d = Fp(122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179) +/// ``` +impl TECurveConfig for Config { + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); + + /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q + const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); + + /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) + const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); + + type MontCurveConfig = Config; + + /// Multiplication by `a` is multiply by `-1`. + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + elem.neg() + } +} + +// BLS12-377::G1 also has a Montgomery form. +// BLS12-377::G1 also has a twisted Edwards form. +// It can be obtained via the following script, implementing +// SW -> Montgomery transformation: +// ``` sage +// # modulus +// p=0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 +// Fp=Zmod(p) +// +// ##################################################### +// # Weierstrass curve: y² = x³ + A * x + B +// ##################################################### +// # curve y^2 = x^3 + 1 +// WA=Fp(0) +// WB=Fp(1) +// +// ##################################################### +// # Montgomery curve: By² = x³ + A * x² + x +// ##################################################### +// # root for x^3 + 1 = 0 +// alpha = -1 +// # s = 1 / (sqrt(3alpha^2 + a)) +// s = 1/(Fp(3).sqrt()) +// +// # MA = 3 * alpha * s +// MA=Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) +// # MB = s +// MB=Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) +// ``` +impl MontCurveConfig for Config { + /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 + const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); + + /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 + const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); + + type TECurveConfig = Config; +} + +/// G1_GENERATOR_X = +/// 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695 +pub const G1_GENERATOR_X: Fq = MontFp!("81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695"); + +/// G1_GENERATOR_Y = +/// 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030 +pub const G1_GENERATOR_Y: Fq = MontFp!("241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030"); + +// The generator for twisted Edward form is the same SW generator converted into +// the normalized TE form (TE2). +//``` sage +// # following scripts in previous section +// ##################################################### +// # Weierstrass curve generator +// ##################################################### +// Wx = Fp(81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695) +// Wy = Fp(241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030) +// +// assert(Wy^2 - Wx^3 - WA * Wx - WB == 0) +// +// ##################################################### +// # Montgomery curve generator +// ##################################################### +// # x = s * (x - alpha) +// Mx = Fp(251803586774461569862800610331871502335378228972505599912537082323947581271784390797244487924068052270360793200630) +// # y = s * y +// My = Fp(77739247071951651095607889637653357561348174979132042929587539214321586851215673796661346812932566642719051699820) +// +// assert(MB * My^2 == Mx^3+ MA * Mx^2 + Mx) +// +// # ##################################################### +// # # Twisted Edwards curve 1 generator +// # ##################################################### +// # x = Mx/My +// TE1x = Fp(82241236807150726090333472814441006963902378430536027612759193445733851062772474760677400112551677454953925168208) +// # y = (Mx - 1)/(Mx+1) +// TE1y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) +// +// assert( TE1a * TE1x^2 + TE1y^2 == 1 + TE1d * TE1x^2 * TE1y^2 ) +// +// +// # ##################################################### +// # # Twisted Edwards curve 2 generator +// # ##################################################### +// beta = (-TE1a).sqrt() +// # x = TE1x * sqrt(-TE1a) +// TE2x = Fp(71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393) +// # y = TE1y +// TE2y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) +// +// assert( TE2a * TE2x^2 + TE2y^2 == 1 + TE2d * TE2x^2 * TE2y^2 ) +// ``` +/// TE_GENERATOR_X = +/// 71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393 +pub const TE_GENERATOR_X: Fq = MontFp!("71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393"); + +/// TE_GENERATOR_Y = +/// 6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235 +pub const TE_GENERATOR_Y: Fq = MontFp!("6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs new file mode 100644 index 0000000000000..d25265b341046 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -0,0 +1,78 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::Affine, +}; +use ark_ff::{Field, MontFp, Zero}; + +use crate::{g1, Fq, Fq2, Fr}; + +pub type G2Affine = Affine; +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq2; + type ScalarField = Fr; + + /// COFACTOR = + /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 + #[rustfmt::skip] + const COFACTOR: &'static [u64] = &[ + 0x0000000000000001, + 0x452217cc90000000, + 0xa0f3622fba094800, + 0xd693e8c36676bd09, + 0x8c505634fae2e189, + 0xfbb36b00e1dcc40c, + 0xddd88d99a6f6a829, + 0x26ba558ae9562a, + ]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 + const COFACTOR_INV: Fr = + MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + + // As per https://eprint.iacr.org/2012/072.pdf, + // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is + // the irreducible poly used to extend from Fp2 to Fp12. + // In our case, i = u (App A.3, T_6). + /// COEFF_B = [0, + /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] + const COEFF_B: Fq2 = Fq2::new( + Fq::ZERO, + MontFp!("155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906"), + ); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } +} + +pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); +pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); + +/// G2_GENERATOR_X_C0 = +/// 233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294 +pub const G2_GENERATOR_X_C0: Fq = MontFp!("233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294"); + +/// G2_GENERATOR_X_C1 = +/// 140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118 +pub const G2_GENERATOR_X_C1: Fq = MontFp!("140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118"); + +/// G2_GENERATOR_Y_C0 = +/// 63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423 +pub const G2_GENERATOR_Y_C0: Fq = MontFp!("63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423"); + +/// G2_GENERATOR_Y_C1 = +/// 149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491 +pub const G2_GENERATOR_Y_C1: Fq = MontFp!("149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs new file mode 100644 index 0000000000000..c1160da2954b8 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -0,0 +1,91 @@ +use ark_sub_models::{ + bls12, + bls12::{Bls12, Bls12Config, TwistType}, +}; + +use crate::*; + +pub mod g1; +pub mod g2; + +#[cfg(test)] +mod tests; + +pub struct Config; + +impl Bls12Config for Config { + const X: &'static [u64] = &[0x8508c00000000001]; + /// `x` is positive. + const X_IS_NEGATIVE: bool = false; + const TWIST_TYPE: TwistType = TwistType::D; + type Fp = Fq; + type Fp2Config = Fq2Config; + type Fp6Config = Fq6Config; + type Fp12Config = Fq12Config; + type G1Config = g1::Config; + type G2Config = g2::Config; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + let a: Vec> = a + .into_iter() + .map(|elem| { + let elem: as Pairing>::G1Prepared = elem.into(); + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + let b = b + .into_iter() + .map(|elem| { + let elem: as Pairing>::G2Prepared = elem.into(); + let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + + let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); + let cursor = Cursor::new(&res[..]); + let f: as Pairing>::TargetField = + Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) + .unwrap(); + MillerLoopOutput(f) + } + + fn final_exponentiation( + f: MillerLoopOutput>, + ) -> Option>> { + let mut out: [u8; 576] = [0; 576]; + let mut cursor = Cursor::new(&mut out[..]); + f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let res = sp_io::crypto::bls12_381_final_exponentiation(&out); + + let cursor = Cursor::new(&res[..]); + let res = PairingOutput::>::deserialize_with_mode( + cursor, + Compress::Yes, + ark_serialize::Validate::No, + ) + .unwrap(); + + Some(res) + } +} + +pub type Bls12_377 = Bls12; + +pub type G1Affine = bls12::G1Affine; +pub type G1Projective = bls12::G1Projective; +pub type G2Affine = bls12::G2Affine; +pub type G2Projective = bls12::G2Projective; + +pub use g1::{G1TEAffine, G1TEProjective}; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs new file mode 100755 index 0000000000000..661e0c3a89253 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs @@ -0,0 +1,7 @@ +use crate::{Bls12_377, G1Projective, G2Projective}; +use ark_algebra_test_templates::*; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; crate::Bls12_377); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs new file mode 100755 index 0000000000000..f51322776a88c --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -0,0 +1,27 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![deny(future_incompatible, nonstandard_style, rust_2018_idioms)] +#![forbid(unsafe_code)] + +//! This library implements the BLS12_381 curve generated by [Sean Bowe](https://electriccoin.co/blog/new-snark-curve/). +//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree +//! 12, defined over a 381-bit (prime) field. +//! This curve was intended to replace the BN254 curve to provide a higher +//! security level without incurring a large performance overhead. +//! +//! +//! Curve information: +//! * Base field: q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 +//! * Scalar field: r = +//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 +//! * valuation(q - 1, 2) = 1 +//! * valuation(r - 1, 2) = 32 +//! * G1 curve equation: y^2 = x^3 + 4 +//! * G2 curve equation: y^2 = x^3 + Fq2(4, 4) + +#[cfg(feature = "curve")] +mod curves; +pub use ark_bls_381::fields; + +pub use curves::*; +#[cfg(feature = "curve")] +pub use ark_bls_381::fields::*; diff --git a/primitives/arkworks-curves/ark_sub_models/Cargo.toml b/primitives/arkworks-curves/ark_sub_models/Cargo.toml new file mode 100644 index 0000000000000..9f4b9c3d9dc89 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_models/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "ark-sub-models" +version = "0.4.0-alpha.5" +authors = [ "arkworks contributors" ] +description = "A library for elliptic curves and pairings" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/algebra" +documentation = "https://docs.rs/ark-ec/" +keywords = ["cryptography", "elliptic-curves", "pairing"] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" +rust-version = "1.57" + +[dependencies] +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-ec = { version = "0.4.0-alpha", default-features = false } +ark-ff = { version = "0.4.0-alpha", default-features = false } +ark-poly = { version = "0.4.0-alpha", default-features = false } +derivative = { version = "2", features = ["use_core"] } +num-traits = { version = "0.2", default-features = false } +rayon = { version = "1", optional = true } +zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } +hashbrown = "0.13.1" +itertools = { version = "0.10", default-features = false } + +[dev-dependencies] + +[features] +default = [] +std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std" ] +parallel = [ "std", "rayon", "ark-std/parallel" ] diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs b/primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs new file mode 100644 index 0000000000000..cd45f9521fe7c --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs @@ -0,0 +1,57 @@ +use crate::bls12::Bls12Config; +use ark_ec::{ + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, +}; +use ark_serialize::*; +use ark_std::vec::Vec; + +use derivative::Derivative; + +pub type G1Affine

= Affine<

::G1Config>; +pub type G1Projective

= Projective<

::G1Config>; + +#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] +#[derivative( + Clone(bound = "P: Bls12Config"), + Debug(bound = "P: Bls12Config"), + PartialEq(bound = "P: Bls12Config"), + Eq(bound = "P: Bls12Config") +)] +pub struct G1Prepared(pub G1Affine

); + +impl From> for G1Prepared

{ + fn from(other: G1Affine

) -> Self { + G1Prepared(other) + } +} + +impl From> for G1Prepared

{ + fn from(q: G1Projective

) -> Self { + q.into_affine().into() + } +} + +impl<'a, P: Bls12Config> From<&'a G1Affine

> for G1Prepared

{ + fn from(other: &'a G1Affine

) -> Self { + G1Prepared(*other) + } +} + +impl<'a, P: Bls12Config> From<&'a G1Projective

> for G1Prepared

{ + fn from(q: &'a G1Projective

) -> Self { + q.into_affine().into() + } +} + +impl G1Prepared

{ + pub fn is_zero(&self) -> bool { + self.0.is_zero() + } +} + +impl Default for G1Prepared

{ + fn default() -> Self { + G1Prepared(G1Affine::

::generator()) + } +} diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs b/primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs new file mode 100644 index 0000000000000..e32e106df295e --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs @@ -0,0 +1,56 @@ +use crate::bls12::Bls12Config; +use ark_ec::{ + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, +}; +use ark_serialize::*; +use ark_std::vec::Vec; +use derivative::Derivative; + +pub type G2Affine

= Affine<

::G2Config>; +pub type G2Projective

= Projective<

::G2Config>; + +#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] +#[derivative( + Clone(bound = "P: Bls12Config"), + Debug(bound = "P: Bls12Config"), + PartialEq(bound = "P: Bls12Config"), + Eq(bound = "P: Bls12Config") +)] +pub struct G2Prepared(pub G2Affine

); + +impl From> for G2Prepared

{ + fn from(other: G2Affine

) -> Self { + G2Prepared(other) + } +} + +impl From> for G2Prepared

{ + fn from(q: G2Projective

) -> Self { + q.into_affine().into() + } +} + +impl<'a, P: Bls12Config> From<&'a G2Affine

> for G2Prepared

{ + fn from(other: &'a G2Affine

) -> Self { + G2Prepared(*other) + } +} + +impl<'a, P: Bls12Config> From<&'a G2Projective

> for G2Prepared

{ + fn from(q: &'a G2Projective

) -> Self { + q.into_affine().into() + } +} + +impl G2Prepared

{ + pub fn is_zero(&self) -> bool { + self.0.is_zero() + } +} + +impl Default for G2Prepared

{ + fn default() -> Self { + G2Prepared(G2Affine::

::generator()) + } +} diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs b/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs new file mode 100644 index 0000000000000..49731c23d3d3a --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs @@ -0,0 +1,87 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, +}; +use ark_ff::{ + fields::{ + fp12_2over3over2::{Fp12, Fp12Config}, + fp2::Fp2Config, + fp6_3over2::Fp6Config, + Fp2, + }, + PrimeField, +}; +use ark_std::marker::PhantomData; +use derivative::Derivative; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +/// A particular BLS12 group can have G2 being either a multiplicative or a +/// divisive twist. +pub enum TwistType { + M, + D, +} + +pub trait Bls12Config: 'static + Sized { + /// Parameterizes the BLS12 family. + const X: &'static [u64]; + /// Is `Self::X` negative? + const X_IS_NEGATIVE: bool; + /// What kind of twist is this? + const TWIST_TYPE: TwistType; + + type Fp: PrimeField + Into<::BigInt>; + type Fp2Config: Fp2Config; + type Fp6Config: Fp6Config; + type Fp12Config: Fp12Config; + type G1Config: SWCurveConfig; + type G2Config: SWCurveConfig< + BaseField = Fp2, + ScalarField = ::ScalarField, + >; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput>; + + fn final_exponentiation(f: MillerLoopOutput>) + -> Option>>; +} + +pub mod g1; +pub mod g2; + +pub use self::{ + g1::{G1Affine, G1Prepared, G1Projective}, + g2::{G2Affine, G2Prepared, G2Projective}, +}; + +#[derive(Derivative)] +#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] +pub struct Bls12(PhantomData P>); + +impl Pairing for Bls12

{ + type BaseField = ::BaseField; + type ScalarField = ::ScalarField; + type G1 = G1Projective

; + type G1Affine = G1Affine

; + type G1Prepared = G1Prepared

; + type G2 = G2Projective

; + type G2Affine = G2Affine

; + type G2Prepared = G2Prepared

; + type TargetField = Fp12; + + fn multi_miller_loop( + a: impl IntoIterator>, + b: impl IntoIterator>, + ) -> MillerLoopOutput { + P::multi_miller_loop(a, b) + } + + fn final_exponentiation(f: MillerLoopOutput) -> Option> { + P::final_exponentiation(f) + } +} diff --git a/primitives/arkworks-curves/ark_sub_models/src/lib.rs b/primitives/arkworks-curves/ark_sub_models/src/lib.rs new file mode 100644 index 0000000000000..2ead44685780c --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_models/src/lib.rs @@ -0,0 +1,2 @@ +pub mod bls12; +pub use ark_ec::models::short_weierstrass; diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index ea7561874002e..58750c1f47529 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -26,7 +26,7 @@ sp-std = { version = "5.0.0", default-features = false, path = "../std" } better_any = { version = "0.2.0" } [dev-dependencies] -ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-sub-curves", branch = "fork-models" } +ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-sub-curves" } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 90db58bd5c67c..a7f13f47af2ec 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -85,7 +85,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|b| { let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( + ::G2Prepared::deserialize_with_mode( cursor, Compress::Yes, Validate::No, From a95ca4201497e583634eafc69b897e3a9d5ae1e2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 12:38:01 +0100 Subject: [PATCH 021/364] add default impl for msm, mul_affine, mul_projective --- .../ark_sub_bls12_381/src/curves/g1.rs | 39 +++++++++++++++++++ .../ark_sub_bls12_381/src/curves/g2.rs | 39 +++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index f7f6103957f39..1502d08cd80ac 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -39,6 +39,45 @@ impl SWCurveConfig for Config { fn mul_by_a(_: Self::BaseField) -> Self::BaseField { Self::BaseField::zero() } + + /// Default implementation of group multiplication for projective + /// coordinates + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + + res + } + + /// Default implementation of group multiplication for affine + /// coordinates. + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base + } + } + + res + } + + /// Default implementation for multi scalar multiplication + fn msm( + bases: &[Affine], + scalars: &[Self::ScalarField], + ) -> Result, usize> { + (bases.len() == scalars.len()) + .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) + .ok_or(usize::min(bases.len(), scalars.len())) + } + } pub type G1SWAffine = SWAffine; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index d25265b341046..99cad27bee681 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -56,6 +56,45 @@ impl SWCurveConfig for Config { fn mul_by_a(_: Self::BaseField) -> Self::BaseField { Self::BaseField::zero() } + + /// Default implementation of group multiplication for projective + /// coordinates + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + + res + } + + /// Default implementation of group multiplication for affine + /// coordinates. + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base + } + } + + res + } + + /// Default implementation for multi scalar multiplication + fn msm( + bases: &[Affine], + scalars: &[Self::ScalarField], + ) -> Result, usize> { + (bases.len() == scalars.len()) + .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) + .ok_or(usize::min(bases.len(), scalars.len())) + } + } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From 5feab7a8cf00475b1ce82acc64c301026340f41f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 12:42:17 +0100 Subject: [PATCH 022/364] cleanup unused deps --- primitives/arkworks/src/bls12_377.rs | 6 ++---- primitives/arkworks/src/bls12_381.rs | 1 - primitives/arkworks/src/bw6_761.rs | 3 +-- primitives/arkworks/src/ed_on_bls12_377.rs | 11 +++-------- primitives/arkworks/src/ed_on_bls12_381.rs | 11 +++-------- 5 files changed, 9 insertions(+), 23 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 073c479d7a195..d3a0fed19b54e 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,16 +20,14 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -use ark_bls12_377::{Bls12_377, Config, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, - Group, }; -use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; +use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute multi pairing through arkworksrk_Bls12_377::G2Projective diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index a7f13f47af2ec..728e569772526 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -27,7 +27,6 @@ use ark_ec::{ short_weierstrass::SWCurveConfig, Group, }; -use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index e730f445637dd..f91f07a9d3bdb 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -23,10 +23,9 @@ use ark_bw6_761::{Config, G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, + pairing::{MillerLoopOutput, Pairing}, Group, }; -use ark_ff::PrimeField; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, Zero}; use sp_std::{vec, vec::Vec}; diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 84be7a86b7006..ba7fe688bc058 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -21,16 +21,11 @@ #![cfg_attr(not(feature = "std"), no_std)] use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - twisted_edwards, - twisted_edwards::TECurveConfig, - Group, VariableBaseMSM, + models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, }; -use ark_ed_on_bls12_377::{EdwardsAffine, EdwardsConfig, EdwardsProjective}; -use ark_ff::PrimeField; +use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; +use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c2ecebf516963..3dda6989bbc9c 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,16 +21,11 @@ #![cfg_attr(not(feature = "std"), no_std)] use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - twisted_edwards, - twisted_edwards::TECurveConfig, - Group, VariableBaseMSM, + models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsAffine, EdwardsProjective, JubjubConfig}; -use ark_ff::PrimeField; +use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; +use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks From 9f0d0998ba9ae86de99a9206ceecbe492c16a0f1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 12:47:18 +0100 Subject: [PATCH 023/364] use host functions for msm --- .../ark_sub_bls12_381/src/curves/g1.rs | 35 ++++++++++++++++--- .../ark_sub_bls12_381/src/curves/g2.rs | 32 +++++++++++++---- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index 1502d08cd80ac..f80f6e65d61c0 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -68,16 +68,41 @@ impl SWCurveConfig for Config { res } - /// Default implementation for multi scalar multiplication + /// Overwroite the default implementation for multi scalar multiplication with host function calls fn msm( bases: &[Affine], - scalars: &[Self::ScalarField], + scalars: &[::ScalarField], ) -> Result, usize> { - (bases.len() == scalars.len()) - .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) - .ok_or(usize::min(bases.len(), scalars.len())) + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) } +} +fn msm_unchecked(bases: &[Affine], + scalars: &[Self::ScalarField]) { + } pub type G1SWAffine = SWAffine; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index 99cad27bee681..66b73015ddff8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -85,16 +85,36 @@ impl SWCurveConfig for Config { res } - /// Default implementation for multi scalar multiplication + /// Overwroite the default implementation for multi scalar multiplication with host function calls fn msm( bases: &[Affine], - scalars: &[Self::ScalarField], + scalars: &[::ScalarField], ) -> Result, usize> { - (bases.len() == scalars.len()) - .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) - .ok_or(usize::min(bases.len(), scalars.len())) + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) } - } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From 0ee6754dc15bea1189aa08df9612c6e7e146bd85 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 12:53:55 +0100 Subject: [PATCH 024/364] fmt --- .../ark_sub_bls12_381/src/curves/g1.rs | 2 +- .../ark_sub_bls12_381/src/curves/g2.rs | 3 ++- .../ark_sub_bls12_381/src/curves/mod.rs | 13 ++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index f80f6e65d61c0..9a2814a7cf6f0 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -8,7 +8,7 @@ use ark_ec::models::{ use ark_ff::{Field, MontFp, Zero}; use core::ops::Neg; -use crate::{Fq, Fr}; +use ark_bls12_381::{Fq, Fr}; #[derive(Clone, Default, PartialEq, Eq)] pub struct Config; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index 66b73015ddff8..9789f21463e52 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -4,7 +4,8 @@ use ark_ec::{ }; use ark_ff::{Field, MontFp, Zero}; -use crate::{g1, Fq, Fq2, Fr}; +use crate::g1; +use ark_bls12_381::{Fq, Fq2, Fr}; pub type G2Affine = Affine; #[derive(Clone, Default, PartialEq, Eq)] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs index c1160da2954b8..f17f3e6a9e993 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -14,16 +14,15 @@ mod tests; pub struct Config; impl Bls12Config for Config { - const X: &'static [u64] = &[0x8508c00000000001]; - /// `x` is positive. - const X_IS_NEGATIVE: bool = false; - const TWIST_TYPE: TwistType = TwistType::D; + const X: &'static [u64] = &[0xd201000000010000]; + const X_IS_NEGATIVE: bool = true; + const TWIST_TYPE: TwistType = TwistType::M; type Fp = Fq; type Fp2Config = Fq2Config; type Fp6Config = Fq6Config; type Fp12Config = Fq12Config; - type G1Config = g1::Config; - type G2Config = g2::Config; + type G1Config = self::g1::Config; + type G2Config = self::g2::Config; fn multi_miller_loop( a: impl IntoIterator>>, @@ -81,7 +80,7 @@ impl Bls12Config for Config { } } -pub type Bls12_377 = Bls12; +pub type Bls12_381 = Bls12; pub type G1Affine = bls12::G1Affine; pub type G1Projective = bls12::G1Projective; From 3bb64e4c7ca33dd184a1b8b124870bb9266ca8c9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 14:32:16 +0100 Subject: [PATCH 025/364] refactor --- Cargo.lock | 33 +- Cargo.toml | 4 +- .../{ark_sub_bls12_381 => }/LICENSE-APACHE | 0 .../{ark_sub_bls12_381 => }/LICENSE-MIT | 0 .../ark_sub_bls12_381/Cargo.toml | 5 +- .../ark_sub_bls12_381/src/curves/mod.rs | 90 ------ .../ark_sub_bls12_381/src/g1.rs | 195 ++++++++++++ .../src/{curves/g1.rs => g1_old.rs} | 15 +- .../ark_sub_bls12_381/src/g2.rs | 297 ++++++++++++++++++ .../src/{curves/g2.rs => g2_old.rs} | 5 +- .../ark_sub_bls12_381/src/lib.rs | 117 +++++-- .../src/{curves => }/tests.rs | 0 .../ark_sub_bls12_381/src/util.rs | 207 ++++++++++++ .../ark_sub_models/src/bls12/mod.rs | 87 ----- .../arkworks-curves/ark_sub_models/src/lib.rs | 2 - .../Cargo.toml | 2 +- .../src/bls12/g1.rs | 48 +-- .../src/bls12/g2.rs | 48 +-- primitives/arkworks-models/src/bls12/mod.rs | 87 +++++ primitives/arkworks-models/src/lib.rs | 2 + 20 files changed, 974 insertions(+), 270 deletions(-) rename primitives/arkworks-curves/{ark_sub_bls12_381 => }/LICENSE-APACHE (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => }/LICENSE-MIT (100%) delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs rename primitives/arkworks-curves/ark_sub_bls12_381/src/{curves/g1.rs => g1_old.rs} (96%) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs rename primitives/arkworks-curves/ark_sub_bls12_381/src/{curves/g2.rs => g2_old.rs} (97%) mode change 100755 => 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs rename primitives/arkworks-curves/ark_sub_bls12_381/src/{curves => }/tests.rs (100%) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs delete mode 100644 primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs delete mode 100644 primitives/arkworks-curves/ark_sub_models/src/lib.rs rename primitives/{arkworks-curves/ark_sub_models => arkworks-models}/Cargo.toml (98%) rename primitives/{arkworks-curves/ark_sub_models => arkworks-models}/src/bls12/g1.rs (52%) rename primitives/{arkworks-curves/ark_sub_models => arkworks-models}/src/bls12/g2.rs (52%) create mode 100644 primitives/arkworks-models/src/bls12/mod.rs create mode 100644 primitives/arkworks-models/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 9387d03f53a22..0c4e197fd8fc8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -265,6 +265,23 @@ dependencies = [ "syn", ] +[[package]] +name = "ark-models" +version = "0.4.0-alpha.5" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", + "itertools", + "num-traits", + "rayon", + "zeroize", +] + [[package]] name = "ark-poly" version = "0.4.0-alpha.5" @@ -314,6 +331,20 @@ checksum = "cc5b16d734e9b2e43886ff586755219df7fb9639cc04ab00c7e636708a5ba06a" dependencies = [ "num-traits", "rand 0.8.5", + "rayon", +] + +[[package]] +name = "ark-sub-bls12-381" +version = "0.4.0" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std 0.4.0-alpha", + "sp-io", ] [[package]] @@ -9298,7 +9329,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std 0.4.0-alpha", - "ark-sub-bls12-381", + "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", "sp-std", ] diff --git a/Cargo.toml b/Cargo.toml index d381721591ca2..f95af115849ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -173,6 +173,9 @@ members = [ "primitives/application-crypto/test", "primitives/arithmetic", "primitives/arithmetic/fuzzer", + "primitives/arkworks", + "primitives/arkworks-curves/ark_sub_bls12_381", + "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", "primitives/beefy", @@ -327,7 +330,6 @@ ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0. ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-std = { git = "https://github.com/arkworks-rs/std" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE b/primitives/arkworks-curves/LICENSE-APACHE similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-APACHE rename to primitives/arkworks-curves/LICENSE-APACHE diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT b/primitives/arkworks-curves/LICENSE-MIT similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/LICENSE-MIT rename to primitives/arkworks-curves/LICENSE-MIT diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml index d2a65e6e053c6..8e15845944888 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -15,10 +15,10 @@ edition = "2021" [dependencies] ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } -ark-std = { git = "https://github.com/arkworks-rs/std", default-features = false } +ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } -ark-sub-models = { path = "../ark_sub_models" } +ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [features] @@ -28,5 +28,4 @@ std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] base_field = [] -r1cs = [ "base_field", "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs deleted file mode 100644 index f17f3e6a9e993..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs +++ /dev/null @@ -1,90 +0,0 @@ -use ark_sub_models::{ - bls12, - bls12::{Bls12, Bls12Config, TwistType}, -}; - -use crate::*; - -pub mod g1; -pub mod g2; - -#[cfg(test)] -mod tests; - -pub struct Config; - -impl Bls12Config for Config { - const X: &'static [u64] = &[0xd201000000010000]; - const X_IS_NEGATIVE: bool = true; - const TWIST_TYPE: TwistType = TwistType::M; - type Fp = Fq; - type Fp2Config = Fq2Config; - type Fp6Config = Fq6Config; - type Fp12Config = Fq12Config; - type G1Config = self::g1::Config; - type G2Config = self::g2::Config; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - let a: Vec> = a - .into_iter() - .map(|elem| { - let elem: as Pairing>::G1Prepared = elem.into(); - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - let b = b - .into_iter() - .map(|elem| { - let elem: as Pairing>::G2Prepared = elem.into(); - let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - - let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); - let cursor = Cursor::new(&res[..]); - let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) - .unwrap(); - MillerLoopOutput(f) - } - - fn final_exponentiation( - f: MillerLoopOutput>, - ) -> Option>> { - let mut out: [u8; 576] = [0; 576]; - let mut cursor = Cursor::new(&mut out[..]); - f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let res = sp_io::crypto::bls12_381_final_exponentiation(&out); - - let cursor = Cursor::new(&res[..]); - let res = PairingOutput::>::deserialize_with_mode( - cursor, - Compress::Yes, - ark_serialize::Validate::No, - ) - .unwrap(); - - Some(res) - } -} - -pub type Bls12_381 = Bls12; - -pub type G1Affine = bls12::G1Affine; -pub type G1Projective = bls12::G1Projective; -pub type G2Affine = bls12::G2Affine; -pub type G2Projective = bls12::G2Projective; - -pub use g1::{G1TEAffine, G1TEProjective}; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs new file mode 100644 index 0000000000000..88788b9f93bb6 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -0,0 +1,195 @@ +use crate::*; +use ark_bls12_381::{Fq, Fq2, Fr}; +use ark_ff::{Field, MontFp, PrimeField, Zero}; +use ark_models::{ + bls12, + bls12::Bls12Config, + models::CurveConfig, + short_weierstrass::{Affine, SWCurveConfig}, + AffineRepr, Group, +}; +use ark_serialize::{Compress, SerializationError}; +use ark_std::{ops::Neg, One}; + +use crate::util::{ + read_g1_compressed, read_g1_uncompressed, serialize_fq, EncodingFlags, G1_SERIALIZED_SIZE, +}; + +pub type G1Affine = bls12::G1Affine; +pub type G1Projective = bls12::G1Projective; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = (x - 1)^2 / 3 = 76329603384216526031706109802092473003 + const COFACTOR: &'static [u64] = &[0x8c00aaab0000aaab, 0x396c8c005555e156]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 52435875175126190458656871551744051925719901746859129887267498875565241663483 + const COFACTOR_INV: Fr = + MontFp!("52435875175126190458656871551744051925719901746859129887267498875565241663483"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = 4 + const COEFF_B: Fq = MontFp!("4"); + + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } + + #[inline] + fn is_in_correct_subgroup_assuming_on_curve(p: &G1Affine) -> bool { + // Algorithm from Section 6 of https://eprint.iacr.org/2021/1130. + // + // Check that endomorphism_p(P) == -[X^2]P + + // An early-out optimization described in Section 6. + // If uP == P but P != point of infinity, then the point is not in the right + // subgroup. + let x_times_p = p.mul_bigint(crate::Config::X); + if x_times_p.eq(p) && !p.infinity { + return false + } + + let minus_x_squared_times_p = x_times_p.mul_bigint(crate::Config::X).neg(); + let endomorphism_p = endomorphism(p); + minus_x_squared_times_p.eq(&endomorphism_p) + } + + #[inline] + fn clear_cofactor(p: &G1Affine) -> G1Affine { + // Using the effective cofactor, as explained in + // Section 5 of https://eprint.iacr.org/2019/403.pdf. + // + // It is enough to multiply by (1 - x), instead of (x - 1)^2 / 3 + let h_eff = one_minus_x().into_bigint(); + Config::mul_affine(&p, h_eff.as_ref()).into() + } + + fn deserialize_with_mode( + mut reader: R, + compress: ark_serialize::Compress, + validate: ark_serialize::Validate, + ) -> Result, ark_serialize::SerializationError> { + let p = if compress == ark_serialize::Compress::Yes { + read_g1_compressed(&mut reader)? + } else { + read_g1_uncompressed(&mut reader)? + }; + + if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() + { + return Err(SerializationError::InvalidData) + } + Ok(p) + } + + fn serialize_with_mode( + item: &Affine, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + let encoding = EncodingFlags { + is_compressed: compress == ark_serialize::Compress::Yes, + is_infinity: item.is_zero(), + is_lexographically_largest: item.y > -item.y, + }; + let mut p = *item; + if encoding.is_infinity { + p = G1Affine::zero(); + } + // need to access the field struct `x` directly, otherwise we get None from xy() + // method + let x_bytes = serialize_fq(p.x); + if encoding.is_compressed { + let mut bytes: [u8; G1_SERIALIZED_SIZE] = x_bytes; + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + } else { + let mut bytes = [0u8; 2 * G1_SERIALIZED_SIZE]; + bytes[0..G1_SERIALIZED_SIZE].copy_from_slice(&x_bytes[..]); + bytes[G1_SERIALIZED_SIZE..].copy_from_slice(&serialize_fq(p.y)[..]); + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + }; + + Ok(()) + } + + fn serialized_size(compress: Compress) -> usize { + if compress == Compress::Yes { + G1_SERIALIZED_SIZE + } else { + G1_SERIALIZED_SIZE * 2 + } + } +} + +fn one_minus_x() -> Fr { + const X: Fr = Fr::from_sign_and_limbs(!crate::Config::X_IS_NEGATIVE, crate::Config::X); + Fr::one() - X +} + +/// G1_GENERATOR_X = +/// 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507 +pub const G1_GENERATOR_X: Fq = MontFp!("3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507"); + +/// G1_GENERATOR_Y = +/// 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569 +pub const G1_GENERATOR_Y: Fq = MontFp!("1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569"); + +/// BETA is a non-trivial cubic root of unity in Fq. +pub const BETA: Fq = MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"); + +pub fn endomorphism(p: &Affine) -> Affine { + // Endomorphism of the points on the curve. + // endomorphism_p(x,y) = (BETA * x, y) + // where BETA is a non-trivial cubic root of unity in Fq. + let mut res = (*p).clone(); + res.x *= BETA; + res +} + +#[cfg(test)] +mod test { + + use super::*; + use ark_std::{rand::Rng, UniformRand}; + + fn sample_unchecked() -> Affine { + let mut rng = ark_std::test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = Affine::get_point_from_x_unchecked(x, greatest) { + return p + } + } + } + + #[test] + fn test_cofactor_clearing() { + const SAMPLES: usize = 100; + for _ in 0..SAMPLES { + let p: Affine = sample_unchecked(); + let p = p.clear_cofactor(); + assert!(p.is_on_curve()); + assert!(p.is_in_correct_subgroup_assuming_on_curve()); + } + } +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs similarity index 96% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs index 9a2814a7cf6f0..da02b246750aa 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs @@ -1,4 +1,4 @@ -use ark_ec::models::{ +use ark_models::models::{ short_weierstrass::{Affine as SWAffine, SWCurveConfig}, twisted_edwards::{ Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, @@ -7,8 +7,10 @@ use ark_ec::models::{ }; use ark_ff::{Field, MontFp, Zero}; use core::ops::Neg; +use ark_serialize::{Compress, Validate, CanonicalSerialize}; -use ark_bls12_381::{Fq, Fr}; +use ark_std::{io::Cursor, vec::Vec, vec}; +use ark_bls12_381::{Fq, Fr, Projective, Affine}; #[derive(Clone, Default, PartialEq, Eq)] pub struct Config; @@ -94,17 +96,12 @@ impl SWCurveConfig for Config { }) .collect(); let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + // let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(&result[..], Compress::Yes, Validate::No).unwrap(); Ok(result.into()) } } -fn msm_unchecked(bases: &[Affine], - scalars: &[Self::ScalarField]) { - -} - pub type G1SWAffine = SWAffine; pub type G1TEAffine = TEAffine; pub type G1TEProjective = TEProjective; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs new file mode 100644 index 0000000000000..92520c3d2c54e --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs @@ -0,0 +1,297 @@ +use ark_std::ops::Neg; + +use ark_bls12_381::{Fq, Fq2, Fr}; +use ark_ff::{Field, MontFp, Zero}; +use ark_models::{ + bls12, + bls12::Bls12Config, + models::CurveConfig, + short_weierstrass::{Affine, Projective, SWCurveConfig}, + AffineRepr, CurveGroup, Group, +}; +use ark_serialize::{Compress, SerializationError}; + +use super::util::{serialize_fq, EncodingFlags, G2_SERIALIZED_SIZE}; +use crate::{ + util::{read_g2_compressed, read_g2_uncompressed}, + *, +}; + +pub type G2Affine = bls12::G2Affine; +pub type G2Projective = bls12::G2Projective; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq2; + type ScalarField = Fr; + + /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // + /// 9 + /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 + #[rustfmt::skip] + const COFACTOR: &'static [u64] = &[ + 0xcf1c38e31c7238e5, + 0x1616ec6e786f0c70, + 0x21537e293a6691ae, + 0xa628f1cb4d9e82ef, + 0xa68a205b2e5a7ddf, + 0xcd91de4547085aba, + 0x91d50792876a202, + 0x5d543a95414e7f1, + ]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 + const COFACTOR_INV: Fr = + MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + + /// COEFF_B = [4, 4] + const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } + + fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { + // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. + // + // Checks that [p]P = [X]P + + let mut x_times_point = point.mul_bigint(crate::Config::X); + if crate::Config::X_IS_NEGATIVE { + x_times_point = -x_times_point; + } + + let p_times_point = p_power_endomorphism(point); + + x_times_point.eq(&p_times_point) + } + + #[inline] + fn clear_cofactor(p: &G2Affine) -> G2Affine { + // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf + // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) + + // x = -15132376222941642752 + // When multiplying, use -c1 instead, and then negate the result. That's much + // more efficient, since the scalar -c1 has less limbs and a much lower Hamming + // weight. + let x: &'static [u64] = crate::Config::X; + let p_projective = p.into_group(); + + // [x]P + let x_p = Config::mul_affine(p, &x).neg(); + // ψ(P) + let psi_p = p_power_endomorphism(&p); + // (ψ^2)(2P) + let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); + + // tmp = [x]P + ψ(P) + let mut tmp = x_p.clone(); + tmp += &psi_p; + + // tmp2 = [x^2]P + [x]ψ(P) + let mut tmp2: Projective = tmp; + tmp2 = tmp2.mul_bigint(x).neg(); + + // add up all the terms + psi2_p2 += tmp2; + psi2_p2 -= x_p; + psi2_p2 += &-psi_p; + (psi2_p2 - p_projective).into_affine() + } + + fn deserialize_with_mode( + mut reader: R, + compress: ark_serialize::Compress, + validate: ark_serialize::Validate, + ) -> Result, ark_serialize::SerializationError> { + let p = if compress == ark_serialize::Compress::Yes { + read_g2_compressed(&mut reader)? + } else { + read_g2_uncompressed(&mut reader)? + }; + + if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() + { + return Err(SerializationError::InvalidData) + } + Ok(p) + } + + fn serialize_with_mode( + item: &Affine, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + let encoding = EncodingFlags { + is_compressed: compress == ark_serialize::Compress::Yes, + is_infinity: item.is_zero(), + is_lexographically_largest: item.y > -item.y, + }; + let mut p = *item; + if encoding.is_infinity { + p = G2Affine::zero(); + } + + let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.x.c1); + let c0_bytes = serialize_fq(p.x.c0); + x_bytes[0..48].copy_from_slice(&c1_bytes[..]); + x_bytes[48..96].copy_from_slice(&c0_bytes[..]); + if encoding.is_compressed { + let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + } else { + let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; + + let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.y.c1); + let c0_bytes = serialize_fq(p.y.c0); + y_bytes[0..48].copy_from_slice(&c1_bytes[..]); + y_bytes[48..96].copy_from_slice(&c0_bytes[..]); + bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); + bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + }; + + Ok(()) + } + + fn serialized_size(compress: ark_serialize::Compress) -> usize { + if compress == Compress::Yes { + G2_SERIALIZED_SIZE + } else { + 2 * G2_SERIALIZED_SIZE + } + } +} + +pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); +pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); + +/// G2_GENERATOR_X_C0 = +/// 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160 +pub const G2_GENERATOR_X_C0: Fq = MontFp!("352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160"); + +/// G2_GENERATOR_X_C1 = +/// 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758 +pub const G2_GENERATOR_X_C1: Fq = MontFp!("3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758"); + +/// G2_GENERATOR_Y_C0 = +/// 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905 +pub const G2_GENERATOR_Y_C0: Fq = MontFp!("1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905"); + +/// G2_GENERATOR_Y_C1 = +/// 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582 +pub const G2_GENERATOR_Y_C1: Fq = MontFp!("927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582"); + +// psi(x,y) = (x**p * PSI_X, y**p * PSI_Y) is the Frobenius composed +// with the quadratic twist and its inverse + +// PSI_X = 1/(u+1)^((p-1)/3) +pub const P_POWER_ENDOMORPHISM_COEFF_0 : Fq2 = Fq2::new( + Fq::ZERO, + MontFp!( + "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437" + ) +); + +// PSI_Y = 1/(u+1)^((p-1)/2) +pub const P_POWER_ENDOMORPHISM_COEFF_1: Fq2 = Fq2::new( + MontFp!( + "2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"), + MontFp!( + "1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257") +); + +pub const DOUBLE_P_POWER_ENDOMORPHISM: Fq2 = Fq2::new( + MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"), + Fq::ZERO +); + +pub fn p_power_endomorphism(p: &Affine) -> Affine { + // The p-power endomorphism for G2 is defined as follows: + // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). + // To map a point (x, y) in E' to (s, t) in E, + // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), + // because E: y^2 = x^3 + 4. + // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), + // another point on curve E, where s' = s^p, t' = t^p. + // 3. Map the point from E back to E'; that is, + // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). + // + // To sum up, it maps + // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) + // as implemented in the code as follows. + + let mut res = *p; + res.x.frobenius_map(1); + res.y.frobenius_map(1); + + let tmp_x = res.x.clone(); + res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; + res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; + res.y *= P_POWER_ENDOMORPHISM_COEFF_1; + + res +} + +/// For a p-power endomorphism psi(P), compute psi(psi(P)) +pub fn double_p_power_endomorphism(p: &Projective) -> Projective { + let mut res = *p; + + res.x *= DOUBLE_P_POWER_ENDOMORPHISM; + res.y = res.y.neg(); + + res +} + +#[cfg(test)] +mod test { + + use super::*; + use ark_std::UniformRand; + + #[test] + fn test_cofactor_clearing() { + // multiplying by h_eff and clearing the cofactor by the efficient + // endomorphism-based method should yield the same result. + let h_eff: &'static [u64] = &[ + 0xe8020005aaa95551, + 0x59894c0adebbf6b4, + 0xe954cbc06689f6a3, + 0x2ec0ec69d7477c1a, + 0x6d82bf015d1212b0, + 0x329c2f178731db95, + 0x9986ff031508ffe1, + 0x88e2a8e9145ad768, + 0x584c6a0ea91b3528, + 0xbc69f08f2ee75b3, + ]; + + let mut rng = ark_std::test_rng(); + const SAMPLES: usize = 10; + for _ in 0..SAMPLES { + let p = Affine::::rand(&mut rng); + let optimised = p.clear_cofactor().into_group(); + let naive = g2::Config::mul_affine(&p, h_eff); + assert_eq!(optimised, naive); + } + } +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs similarity index 97% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs index 9789f21463e52..3eb86bd9066ff 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs @@ -1,10 +1,13 @@ -use ark_ec::{ +use ark_models::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::Affine, }; use ark_ff::{Field, MontFp, Zero}; +use ark_serialize::{Compress, Validate, CanonicalSerialize}; use crate::g1; + +use ark_std::{io::Cursor, vec::Vec, vec}; use ark_bls12_381::{Fq, Fq2, Fr}; pub type G2Affine = Affine; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs old mode 100755 new mode 100644 index f51322776a88c..c2d558f587eac --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -1,27 +1,90 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements the BLS12_381 curve generated by [Sean Bowe](https://electriccoin.co/blog/new-snark-curve/). -//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree -//! 12, defined over a 381-bit (prime) field. -//! This curve was intended to replace the BN254 curve to provide a higher -//! security level without incurring a large performance overhead. -//! -//! -//! Curve information: -//! * Base field: q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 -//! * Scalar field: r = -//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 -//! * valuation(q - 1, 2) = 1 -//! * valuation(r - 1, 2) = 32 -//! * G1 curve equation: y^2 = x^3 + 4 -//! * G2 curve equation: y^2 = x^3 + Fq2(4, 4) - -#[cfg(feature = "curve")] -mod curves; -pub use ark_bls_381::fields; - -pub use curves::*; -#[cfg(feature = "curve")] -pub use ark_bls_381::fields::*; +use ark_bls12_381::{Fq, Fq12Config, Fq2Config, Fq6Config}; +use ark_ec::pairing::{MillerLoopOutput, Pairing, PairingOutput}; +use ark_ff::Fp12; +use ark_models::{ + bls12, + bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, +}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; + +pub mod g1; +pub mod g2; +pub(crate) mod util; + +#[cfg(test)] +mod tests; + +pub struct Config; + +impl Bls12Config for Config { + const X: &'static [u64] = &[0xd201000000010000]; + const X_IS_NEGATIVE: bool = true; + const TWIST_TYPE: TwistType = TwistType::M; + type Fp = Fq; + type Fp2Config = Fq2Config; + type Fp6Config = Fq6Config; + type Fp12Config = Fq12Config; + type G1Config = self::g1::Config; + type G2Config = self::g2::Config; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + let a: Vec> = a + .into_iter() + .map(|elem| { + let elem: as Pairing>::G1Prepared = elem.into(); + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let b = b + .into_iter() + .map(|elem| { + let elem: as Pairing>::G2Prepared = elem.into(); + let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + + let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); + let cursor = Cursor::new(&res[..]); + let f: as Pairing>::TargetField = + Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) + .unwrap(); + MillerLoopOutput(f) + } + + fn final_exponentiation( + f: MillerLoopOutput>, + ) -> Option>> { + let mut out: [u8; 576] = [0; 576]; + let mut cursor = Cursor::new(&mut out[..]); + f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let res = sp_io::crypto::bls12_381_final_exponentiation(&out); + + let cursor = Cursor::new(&res[..]); + let res = PairingOutput::>::deserialize_with_mode( + cursor, + Compress::Yes, + ark_serialize::Validate::No, + ) + .unwrap(); + + Some(res) + } +} + +pub type Bls12_381 = Bls12; + +pub type G1Affine = bls12::G1Affine; +pub type G1Projective = bls12::G1Projective; +pub type G2Affine = bls12::G2Affine; +pub type G2Projective = bls12::G2Projective; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs new file mode 100644 index 0000000000000..ed44908853039 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs @@ -0,0 +1,207 @@ +use ark_ec::{short_weierstrass::Affine, AffineRepr}; +use ark_ff::{BigInteger384, PrimeField}; +use ark_serialize::SerializationError; + +use crate::{g1::Config as G1Config, g2::Config as G2Config, G1Affine, G2Affine}; +use ark_bls12_381::{Fq, Fq2}; + +pub const G1_SERIALIZED_SIZE: usize = 48; +pub const G2_SERIALIZED_SIZE: usize = 96; + +pub struct EncodingFlags { + pub is_compressed: bool, + pub is_infinity: bool, + pub is_lexographically_largest: bool, +} + +impl EncodingFlags { + pub fn get_flags(bytes: &[u8]) -> Self { + let compression_flag_set = (bytes[0] >> 7) & 1; + let infinity_flag_set = (bytes[0] >> 6) & 1; + let sort_flag_set = (bytes[0] >> 5) & 1; + + Self { + is_compressed: compression_flag_set == 1, + is_infinity: infinity_flag_set == 1, + is_lexographically_largest: sort_flag_set == 1, + } + } + pub fn encode_flags(&self, bytes: &mut [u8]) { + if self.is_compressed { + bytes[0] |= 1 << 7; + } + + if self.is_infinity { + bytes[0] |= 1 << 6; + } + + if self.is_compressed && !self.is_infinity && self.is_lexographically_largest { + bytes[0] |= 1 << 5; + } + } +} + +pub(crate) fn deserialize_fq(bytes: [u8; 48]) -> Option { + let mut tmp = BigInteger384::new([0, 0, 0, 0, 0, 0]); + + // Note: The following unwraps are if the compiler cannot convert + // the byte slice into [u8;8], we know this is infallible since we + // are providing the indices at compile time and bytes has a fixed size + tmp.0[5] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[0..8]).unwrap()); + tmp.0[4] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[8..16]).unwrap()); + tmp.0[3] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[16..24]).unwrap()); + tmp.0[2] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[24..32]).unwrap()); + tmp.0[1] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[32..40]).unwrap()); + tmp.0[0] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[40..48]).unwrap()); + + Fq::from_bigint(tmp) +} + +pub(crate) fn serialize_fq(field: Fq) -> [u8; 48] { + let mut result = [0u8; 48]; + + let rep = field.into_bigint(); + + result[0..8].copy_from_slice(&rep.0[5].to_be_bytes()); + result[8..16].copy_from_slice(&rep.0[4].to_be_bytes()); + result[16..24].copy_from_slice(&rep.0[3].to_be_bytes()); + result[24..32].copy_from_slice(&rep.0[2].to_be_bytes()); + result[32..40].copy_from_slice(&rep.0[1].to_be_bytes()); + result[40..48].copy_from_slice(&rep.0[0].to_be_bytes()); + + result +} + +pub(crate) fn read_fq_with_offset( + bytes: &[u8], + offset: usize, + mask: bool, +) -> Result { + let mut tmp = [0; G1_SERIALIZED_SIZE]; + // read `G1_SERIALIZED_SIZE` bytes + tmp.copy_from_slice(&bytes[offset * G1_SERIALIZED_SIZE..G1_SERIALIZED_SIZE * (offset + 1)]); + + if mask { + // Mask away the flag bits + tmp[0] &= 0b0001_1111; + } + deserialize_fq(tmp).ok_or(SerializationError::InvalidData) +} + +pub(crate) fn read_g1_compressed( + mut reader: R, +) -> Result, ark_serialize::SerializationError> { + let mut bytes = [0u8; G1_SERIALIZED_SIZE]; + reader.read_exact(&mut bytes).ok().ok_or(SerializationError::InvalidData)?; + + // Obtain the three flags from the start of the byte sequence + let flags = EncodingFlags::get_flags(&bytes[..]); + + // we expect to be deserializing a compressed point + if !flags.is_compressed { + return Err(SerializationError::UnexpectedFlags) + } + + if flags.is_infinity { + return Ok(G1Affine::zero()) + } + + // Attempt to obtain the x-coordinate + let x = read_fq_with_offset(&bytes, 0, true)?; + + let p = G1Affine::get_point_from_x_unchecked(x, flags.is_lexographically_largest) + .ok_or(SerializationError::InvalidData)?; + + Ok(p) +} + +pub(crate) fn read_g1_uncompressed( + mut reader: R, +) -> Result, ark_serialize::SerializationError> { + let mut bytes = [0u8; 2 * G1_SERIALIZED_SIZE]; + reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; + + // Obtain the three flags from the start of the byte sequence + let flags = EncodingFlags::get_flags(&bytes[..]); + + // we expect to be deserializing an uncompressed point + if flags.is_compressed { + return Err(SerializationError::UnexpectedFlags) + } + + if flags.is_infinity { + return Ok(G1Affine::zero()) + } + + // Attempt to obtain the x-coordinate + let x = read_fq_with_offset(&bytes, 0, true)?; + // Attempt to obtain the y-coordinate + let y = read_fq_with_offset(&bytes, 1, false)?; + + let p = G1Affine::new_unchecked(x, y); + + Ok(p) +} + +pub(crate) fn read_g2_compressed( + mut reader: R, +) -> Result, ark_serialize::SerializationError> { + let mut bytes = [0u8; G2_SERIALIZED_SIZE]; + reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; + + // Obtain the three flags from the start of the byte sequence + let flags = EncodingFlags::get_flags(&bytes); + + // we expect to be deserializing a compressed point + if !flags.is_compressed { + return Err(SerializationError::UnexpectedFlags) + } + + if flags.is_infinity { + return Ok(G2Affine::zero()) + } + + // Attempt to obtain the x-coordinate + let xc1 = read_fq_with_offset(&bytes, 0, true)?; + let xc0 = read_fq_with_offset(&bytes, 1, false)?; + + let x = Fq2::new(xc0, xc1); + + let p = G2Affine::get_point_from_x_unchecked(x, flags.is_lexographically_largest) + .ok_or(SerializationError::InvalidData)?; + + Ok(p) +} + +pub(crate) fn read_g2_uncompressed( + mut reader: R, +) -> Result, ark_serialize::SerializationError> { + let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; + reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; + + // Obtain the three flags from the start of the byte sequence + let flags = EncodingFlags::get_flags(&bytes); + + // we expect to be deserializing an uncompressed point + if flags.is_compressed { + return Err(SerializationError::UnexpectedFlags) + } + + if flags.is_infinity { + return Ok(G2Affine::zero()) + } + + // Attempt to obtain the x-coordinate + let xc1 = read_fq_with_offset(&bytes, 0, true)?; + let xc0 = read_fq_with_offset(&bytes, 1, false)?; + let x = Fq2::new(xc0, xc1); + + // Attempt to obtain the y-coordinate + let yc1 = read_fq_with_offset(&bytes, 2, false)?; + let yc0 = read_fq_with_offset(&bytes, 3, false)?; + let y = Fq2::new(yc0, yc1); + + let p = G2Affine::new_unchecked(x, y); + + Ok(p) +} diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs b/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs deleted file mode 100644 index 49731c23d3d3a..0000000000000 --- a/primitives/arkworks-curves/ark_sub_models/src/bls12/mod.rs +++ /dev/null @@ -1,87 +0,0 @@ -use ark_ec::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_ff::{ - fields::{ - fp12_2over3over2::{Fp12, Fp12Config}, - fp2::Fp2Config, - fp6_3over2::Fp6Config, - Fp2, - }, - PrimeField, -}; -use ark_std::marker::PhantomData; -use derivative::Derivative; - -#[cfg(feature = "parallel")] -use rayon::prelude::*; - -/// A particular BLS12 group can have G2 being either a multiplicative or a -/// divisive twist. -pub enum TwistType { - M, - D, -} - -pub trait Bls12Config: 'static + Sized { - /// Parameterizes the BLS12 family. - const X: &'static [u64]; - /// Is `Self::X` negative? - const X_IS_NEGATIVE: bool; - /// What kind of twist is this? - const TWIST_TYPE: TwistType; - - type Fp: PrimeField + Into<::BigInt>; - type Fp2Config: Fp2Config; - type Fp6Config: Fp6Config; - type Fp12Config: Fp12Config; - type G1Config: SWCurveConfig; - type G2Config: SWCurveConfig< - BaseField = Fp2, - ScalarField = ::ScalarField, - >; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput>; - - fn final_exponentiation(f: MillerLoopOutput>) - -> Option>>; -} - -pub mod g1; -pub mod g2; - -pub use self::{ - g1::{G1Affine, G1Prepared, G1Projective}, - g2::{G2Affine, G2Prepared, G2Projective}, -}; - -#[derive(Derivative)] -#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] -pub struct Bls12(PhantomData P>); - -impl Pairing for Bls12

{ - type BaseField = ::BaseField; - type ScalarField = ::ScalarField; - type G1 = G1Projective

; - type G1Affine = G1Affine

; - type G1Prepared = G1Prepared

; - type G2 = G2Projective

; - type G2Affine = G2Affine

; - type G2Prepared = G2Prepared

; - type TargetField = Fp12; - - fn multi_miller_loop( - a: impl IntoIterator>, - b: impl IntoIterator>, - ) -> MillerLoopOutput { - P::multi_miller_loop(a, b) - } - - fn final_exponentiation(f: MillerLoopOutput) -> Option> { - P::final_exponentiation(f) - } -} diff --git a/primitives/arkworks-curves/ark_sub_models/src/lib.rs b/primitives/arkworks-curves/ark_sub_models/src/lib.rs deleted file mode 100644 index 2ead44685780c..0000000000000 --- a/primitives/arkworks-curves/ark_sub_models/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod bls12; -pub use ark_ec::models::short_weierstrass; diff --git a/primitives/arkworks-curves/ark_sub_models/Cargo.toml b/primitives/arkworks-models/Cargo.toml similarity index 98% rename from primitives/arkworks-curves/ark_sub_models/Cargo.toml rename to primitives/arkworks-models/Cargo.toml index 9f4b9c3d9dc89..0a23cbed7e0a2 100644 --- a/primitives/arkworks-curves/ark_sub_models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-models" +name = "ark-models" version = "0.4.0-alpha.5" authors = [ "arkworks contributors" ] description = "A library for elliptic curves and pairings" diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs b/primitives/arkworks-models/src/bls12/g1.rs similarity index 52% rename from primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs rename to primitives/arkworks-models/src/bls12/g1.rs index cd45f9521fe7c..db66818d75885 100644 --- a/primitives/arkworks-curves/ark_sub_models/src/bls12/g1.rs +++ b/primitives/arkworks-models/src/bls12/g1.rs @@ -1,7 +1,7 @@ use crate::bls12::Bls12Config; use ark_ec::{ - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, }; use ark_serialize::*; use ark_std::vec::Vec; @@ -13,45 +13,45 @@ pub type G1Projective

= Projective<

::G1Config>; #[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] #[derivative( - Clone(bound = "P: Bls12Config"), - Debug(bound = "P: Bls12Config"), - PartialEq(bound = "P: Bls12Config"), - Eq(bound = "P: Bls12Config") + Clone(bound = "P: Bls12Config"), + Debug(bound = "P: Bls12Config"), + PartialEq(bound = "P: Bls12Config"), + Eq(bound = "P: Bls12Config") )] pub struct G1Prepared(pub G1Affine

); impl From> for G1Prepared

{ - fn from(other: G1Affine

) -> Self { - G1Prepared(other) - } + fn from(other: G1Affine

) -> Self { + G1Prepared(other) + } } impl From> for G1Prepared

{ - fn from(q: G1Projective

) -> Self { - q.into_affine().into() - } + fn from(q: G1Projective

) -> Self { + q.into_affine().into() + } } impl<'a, P: Bls12Config> From<&'a G1Affine

> for G1Prepared

{ - fn from(other: &'a G1Affine

) -> Self { - G1Prepared(*other) - } + fn from(other: &'a G1Affine

) -> Self { + G1Prepared(*other) + } } impl<'a, P: Bls12Config> From<&'a G1Projective

> for G1Prepared

{ - fn from(q: &'a G1Projective

) -> Self { - q.into_affine().into() - } + fn from(q: &'a G1Projective

) -> Self { + q.into_affine().into() + } } impl G1Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.is_zero() - } + pub fn is_zero(&self) -> bool { + self.0.is_zero() + } } impl Default for G1Prepared

{ - fn default() -> Self { - G1Prepared(G1Affine::

::generator()) - } + fn default() -> Self { + G1Prepared(G1Affine::

::generator()) + } } diff --git a/primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs b/primitives/arkworks-models/src/bls12/g2.rs similarity index 52% rename from primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs rename to primitives/arkworks-models/src/bls12/g2.rs index e32e106df295e..b5b55a607a9ff 100644 --- a/primitives/arkworks-curves/ark_sub_models/src/bls12/g2.rs +++ b/primitives/arkworks-models/src/bls12/g2.rs @@ -1,7 +1,7 @@ use crate::bls12::Bls12Config; use ark_ec::{ - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, }; use ark_serialize::*; use ark_std::vec::Vec; @@ -12,45 +12,45 @@ pub type G2Projective

= Projective<

::G2Config>; #[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] #[derivative( - Clone(bound = "P: Bls12Config"), - Debug(bound = "P: Bls12Config"), - PartialEq(bound = "P: Bls12Config"), - Eq(bound = "P: Bls12Config") + Clone(bound = "P: Bls12Config"), + Debug(bound = "P: Bls12Config"), + PartialEq(bound = "P: Bls12Config"), + Eq(bound = "P: Bls12Config") )] pub struct G2Prepared(pub G2Affine

); impl From> for G2Prepared

{ - fn from(other: G2Affine

) -> Self { - G2Prepared(other) - } + fn from(other: G2Affine

) -> Self { + G2Prepared(other) + } } impl From> for G2Prepared

{ - fn from(q: G2Projective

) -> Self { - q.into_affine().into() - } + fn from(q: G2Projective

) -> Self { + q.into_affine().into() + } } impl<'a, P: Bls12Config> From<&'a G2Affine

> for G2Prepared

{ - fn from(other: &'a G2Affine

) -> Self { - G2Prepared(*other) - } + fn from(other: &'a G2Affine

) -> Self { + G2Prepared(*other) + } } impl<'a, P: Bls12Config> From<&'a G2Projective

> for G2Prepared

{ - fn from(q: &'a G2Projective

) -> Self { - q.into_affine().into() - } + fn from(q: &'a G2Projective

) -> Self { + q.into_affine().into() + } } impl G2Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.is_zero() - } + pub fn is_zero(&self) -> bool { + self.0.is_zero() + } } impl Default for G2Prepared

{ - fn default() -> Self { - G2Prepared(G2Affine::

::generator()) - } + fn default() -> Self { + G2Prepared(G2Affine::

::generator()) + } } diff --git a/primitives/arkworks-models/src/bls12/mod.rs b/primitives/arkworks-models/src/bls12/mod.rs new file mode 100644 index 0000000000000..1b6d5ccbb5e4e --- /dev/null +++ b/primitives/arkworks-models/src/bls12/mod.rs @@ -0,0 +1,87 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, +}; +use ark_ff::{ + fields::{ + fp12_2over3over2::{Fp12, Fp12Config}, + fp2::Fp2Config, + fp6_3over2::Fp6Config, + Fp2, + }, + PrimeField, +}; +use ark_std::marker::PhantomData; +use derivative::Derivative; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +/// A particular BLS12 group can have G2 being either a multiplicative or a +/// divisive twist. +pub enum TwistType { + M, + D, +} + +pub trait Bls12Config: 'static + Sized { + /// Parameterizes the BLS12 family. + const X: &'static [u64]; + /// Is `Self::X` negative? + const X_IS_NEGATIVE: bool; + /// What kind of twist is this? + const TWIST_TYPE: TwistType; + + type Fp: PrimeField + Into<::BigInt>; + type Fp2Config: Fp2Config; + type Fp6Config: Fp6Config; + type Fp12Config: Fp12Config; + type G1Config: SWCurveConfig; + type G2Config: SWCurveConfig< + BaseField = Fp2, + ScalarField = ::ScalarField, + >; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput>; + + fn final_exponentiation(f: MillerLoopOutput>) + -> Option>>; +} + +pub mod g1; +pub mod g2; + +pub use self::{ + g1::{G1Affine, G1Prepared, G1Projective}, + g2::{G2Affine, G2Prepared, G2Projective}, +}; + +#[derive(Derivative)] +#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] +pub struct Bls12(PhantomData P>); + +impl Pairing for Bls12

{ + type BaseField = ::BaseField; + type ScalarField = ::ScalarField; + type G1 = G1Projective

; + type G1Affine = G1Affine

; + type G1Prepared = G1Prepared

; + type G2 = G2Projective

; + type G2Affine = G2Affine

; + type G2Prepared = G2Prepared

; + type TargetField = Fp12; + + fn multi_miller_loop( + a: impl IntoIterator>, + b: impl IntoIterator>, + ) -> MillerLoopOutput { + P::multi_miller_loop(a, b) + } + + fn final_exponentiation(f: MillerLoopOutput) -> Option> { + P::final_exponentiation(f) + } +} diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs new file mode 100644 index 0000000000000..54657817d013c --- /dev/null +++ b/primitives/arkworks-models/src/lib.rs @@ -0,0 +1,2 @@ +pub mod bls12; +pub use ark_ec::{models, models::short_weierstrass, AffineRepr, CurveGroup, Group}; From 7324360820371d45043bd78e000c13cdc3e8eb27 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 15:19:41 +0100 Subject: [PATCH 026/364] impl host function msm --- .../ark_sub_bls12_381/src/g1.rs | 28 +++++++++++++++++++ .../ark_sub_bls12_381/src/g2.rs | 28 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs index 88788b9f93bb6..81d7db48f51bd 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -137,6 +137,34 @@ impl SWCurveConfig for Config { G1_SERIALIZED_SIZE * 2 } } + + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } } fn one_minus_x() -> Fr { diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs index 92520c3d2c54e..6a515ffba194e 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs @@ -180,6 +180,34 @@ impl SWCurveConfig for Config { 2 * G2_SERIALIZED_SIZE } } + + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From b458597ed42abc1685f2b23cc6748e4ff59df465 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 15:24:57 +0100 Subject: [PATCH 027/364] fix msm --- primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs index 81d7db48f51bd..ea2b9fce70862 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -5,7 +5,7 @@ use ark_models::{ bls12, bls12::Bls12Config, models::CurveConfig, - short_weierstrass::{Affine, SWCurveConfig}, + short_weierstrass::{Affine, Projective, SWCurveConfig}, AffineRepr, Group, }; use ark_serialize::{Compress, SerializationError}; From f52e15104835d72f79ce7bda6d93fd67cb5fda32 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 15:28:12 +0100 Subject: [PATCH 028/364] impl mul_projective host functions --- .../ark_sub_bls12_381/src/g1.rs | 20 +++++++++++++++++++ .../ark_sub_bls12_381/src/g2.rs | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs index ea2b9fce70862..e0b9bbcee2020 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -165,6 +165,26 @@ impl SWCurveConfig for Config { let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); Ok(result.into()) } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar + .serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + + let result = sp_io::crypto::bls12_381_mul_projective_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } fn one_minus_x() -> Fr { diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs index 6a515ffba194e..f652c5bb10772 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs @@ -208,6 +208,26 @@ impl SWCurveConfig for Config { let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); Ok(result.into()) } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar + .serialize_with_mode(&mut cursor, Compress::Yes) + .unwrap(); + + let result = sp_io::crypto::bls12_381_mul_projective_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From 20b32885a4822123e38ac972f085dbc31fa8fba3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 15:32:24 +0100 Subject: [PATCH 029/364] impl mul_affine host functions --- .../ark_sub_bls12_381/src/g1.rs | 45 ++- .../ark_sub_bls12_381/src/g1_old.rs | 272 ------------------ .../ark_sub_bls12_381/src/g2.rs | 44 ++- .../ark_sub_bls12_381/src/g2_old.rs | 141 --------- .../ark_sub_bls12_381/src/lib.rs | 4 +- .../ark_sub_bls12_381/src/tests.rs | 7 - 6 files changed, 61 insertions(+), 452 deletions(-) delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs delete mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs index e0b9bbcee2020..91fe6f8b15edd 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -166,25 +166,40 @@ impl SWCurveConfig for Config { Ok(result.into()) } - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar - .serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = sp_io::crypto::bls12_381_mul_projective_g1(serialized_base, serialized_scalar); + let result = sp_io::crypto::bls12_381_mul_projective_g1(serialized_base, serialized_scalar); - let cursor = Cursor::new(&result[..]); + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let serialized_result = + sp_io::crypto::bls12_381_mul_affine_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&serialized_result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } fn one_minus_x() -> Fr { diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs deleted file mode 100644 index da02b246750aa..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1_old.rs +++ /dev/null @@ -1,272 +0,0 @@ -use ark_models::models::{ - short_weierstrass::{Affine as SWAffine, SWCurveConfig}, - twisted_edwards::{ - Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, - }, - CurveConfig, -}; -use ark_ff::{Field, MontFp, Zero}; -use core::ops::Neg; -use ark_serialize::{Compress, Validate, CanonicalSerialize}; - -use ark_std::{io::Cursor, vec::Vec, vec}; -use ark_bls12_381::{Fq, Fr, Projective, Affine}; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 - const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 5285428838741532253824584287042945485047145357130994810877 - const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = 1 - const COEFF_B: Fq = Fq::ONE; - - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - /// Default implementation of group multiplication for projective - /// coordinates - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - - res - } - - /// Default implementation of group multiplication for affine - /// coordinates. - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base - } - } - - res - } - - /// Overwroite the default implementation for multi scalar multiplication with host function calls - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); - // let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(&result[..], Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } -} - -pub type G1SWAffine = SWAffine; -pub type G1TEAffine = TEAffine; -pub type G1TEProjective = TEProjective; - -/// Bls12_377::G1 also has a twisted Edwards form. -/// It can be obtained via the following script, implementing -/// 1. SW -> Montgomery -> TE1 transformation: -/// 2. TE1 -> TE2 normalization (enforcing `a = -1`) -/// ``` sage -/// # modulus -/// p = 0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 -/// Fp = Zmod(p) -/// -/// ##################################################### -/// # Weierstrass curve: y² = x³ + A * x + B -/// ##################################################### -/// # curve y^2 = x^3 + 1 -/// WA = Fp(0) -/// WB = Fp(1) -/// -/// ##################################################### -/// # Montgomery curve: By² = x³ + A * x² + x -/// ##################################################### -/// # root for x^3 + 1 = 0 -/// alpha = -1 -/// # s = 1 / (sqrt(3alpha^2 + a)) -/// s = 1/(Fp(3).sqrt()) -/// -/// # MA = 3 * alpha * s -/// MA = Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) -/// # MB = s -/// MB = Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) -/// -/// # ##################################################### -/// # # Twisted Edwards curve 1: a * x² + y² = 1 + d * x² * y² -/// # ##################################################### -/// # We first convert to TE form obtaining a curve with a != -1, and then -/// # apply a transformation to obtain a TE curve with a = -1. -/// # a = (MA+2)/MB -/// TE1a = Fp(61134141799337779744243169579317764548490943457438569789767076791016838392692895365021181670618017873462480451583) -/// # b = (MA-2)/MB -/// TE1d = Fp(197530284213631314266409564115575768987902569297476090750117185875703629955647927409947706468955342250977841006588) -/// -/// # ##################################################### -/// # # Twisted Edwards curve 2: a * x² + y² = 1 + d * x² * y² -/// # ##################################################### -/// # a = -1 -/// TE2a = Fp(-1) -/// # b = -TE1d/TE1a -/// TE2d = Fp(122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179) -/// ``` -impl TECurveConfig for Config { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); - - /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q - const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); - - /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) - const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); - - type MontCurveConfig = Config; - - /// Multiplication by `a` is multiply by `-1`. - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - elem.neg() - } -} - -// BLS12-377::G1 also has a Montgomery form. -// BLS12-377::G1 also has a twisted Edwards form. -// It can be obtained via the following script, implementing -// SW -> Montgomery transformation: -// ``` sage -// # modulus -// p=0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 -// Fp=Zmod(p) -// -// ##################################################### -// # Weierstrass curve: y² = x³ + A * x + B -// ##################################################### -// # curve y^2 = x^3 + 1 -// WA=Fp(0) -// WB=Fp(1) -// -// ##################################################### -// # Montgomery curve: By² = x³ + A * x² + x -// ##################################################### -// # root for x^3 + 1 = 0 -// alpha = -1 -// # s = 1 / (sqrt(3alpha^2 + a)) -// s = 1/(Fp(3).sqrt()) -// -// # MA = 3 * alpha * s -// MA=Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) -// # MB = s -// MB=Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) -// ``` -impl MontCurveConfig for Config { - /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 - const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); - - /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 - const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); - - type TECurveConfig = Config; -} - -/// G1_GENERATOR_X = -/// 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695 -pub const G1_GENERATOR_X: Fq = MontFp!("81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695"); - -/// G1_GENERATOR_Y = -/// 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030 -pub const G1_GENERATOR_Y: Fq = MontFp!("241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030"); - -// The generator for twisted Edward form is the same SW generator converted into -// the normalized TE form (TE2). -//``` sage -// # following scripts in previous section -// ##################################################### -// # Weierstrass curve generator -// ##################################################### -// Wx = Fp(81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695) -// Wy = Fp(241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030) -// -// assert(Wy^2 - Wx^3 - WA * Wx - WB == 0) -// -// ##################################################### -// # Montgomery curve generator -// ##################################################### -// # x = s * (x - alpha) -// Mx = Fp(251803586774461569862800610331871502335378228972505599912537082323947581271784390797244487924068052270360793200630) -// # y = s * y -// My = Fp(77739247071951651095607889637653357561348174979132042929587539214321586851215673796661346812932566642719051699820) -// -// assert(MB * My^2 == Mx^3+ MA * Mx^2 + Mx) -// -// # ##################################################### -// # # Twisted Edwards curve 1 generator -// # ##################################################### -// # x = Mx/My -// TE1x = Fp(82241236807150726090333472814441006963902378430536027612759193445733851062772474760677400112551677454953925168208) -// # y = (Mx - 1)/(Mx+1) -// TE1y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) -// -// assert( TE1a * TE1x^2 + TE1y^2 == 1 + TE1d * TE1x^2 * TE1y^2 ) -// -// -// # ##################################################### -// # # Twisted Edwards curve 2 generator -// # ##################################################### -// beta = (-TE1a).sqrt() -// # x = TE1x * sqrt(-TE1a) -// TE2x = Fp(71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393) -// # y = TE1y -// TE2y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) -// -// assert( TE2a * TE2x^2 + TE2y^2 == 1 + TE2d * TE2x^2 * TE2y^2 ) -// ``` -/// TE_GENERATOR_X = -/// 71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393 -pub const TE_GENERATOR_X: Fq = MontFp!("71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393"); - -/// TE_GENERATOR_Y = -/// 6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235 -pub const TE_GENERATOR_Y: Fq = MontFp!("6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs index f652c5bb10772..2aca6a5224d05 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs @@ -209,25 +209,39 @@ impl SWCurveConfig for Config { Ok(result.into()) } - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar - .serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = sp_io::crypto::bls12_381_mul_projective_g2(serialized_base, serialized_scalar); + let result = sp_io::crypto::bls12_381_mul_projective_g2(serialized_base, serialized_scalar); - let cursor = Cursor::new(&result[..]); + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } + let result = sp_io::crypto::bls12_381_mul_affine_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs deleted file mode 100644 index 3eb86bd9066ff..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2_old.rs +++ /dev/null @@ -1,141 +0,0 @@ -use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::Affine, -}; -use ark_ff::{Field, MontFp, Zero}; -use ark_serialize::{Compress, Validate, CanonicalSerialize}; - -use crate::g1; - -use ark_std::{io::Cursor, vec::Vec, vec}; -use ark_bls12_381::{Fq, Fq2, Fr}; - -pub type G2Affine = Affine; -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; - - /// COFACTOR = - /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 - #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ - 0x0000000000000001, - 0x452217cc90000000, - 0xa0f3622fba094800, - 0xd693e8c36676bd09, - 0x8c505634fae2e189, - 0xfbb36b00e1dcc40c, - 0xddd88d99a6f6a829, - 0x26ba558ae9562a, - ]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 - const COFACTOR_INV: Fr = - MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - - // As per https://eprint.iacr.org/2012/072.pdf, - // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is - // the irreducible poly used to extend from Fp2 to Fp12. - // In our case, i = u (App A.3, T_6). - /// COEFF_B = [0, - /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] - const COEFF_B: Fq2 = Fq2::new( - Fq::ZERO, - MontFp!("155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906"), - ); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - /// Default implementation of group multiplication for projective - /// coordinates - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - - res - } - - /// Default implementation of group multiplication for affine - /// coordinates. - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base - } - } - - res - } - - /// Overwroite the default implementation for multi scalar multiplication with host function calls - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes) - .unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } -} - -pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); -pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); - -/// G2_GENERATOR_X_C0 = -/// 233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294 -pub const G2_GENERATOR_X_C0: Fq = MontFp!("233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294"); - -/// G2_GENERATOR_X_C1 = -/// 140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118 -pub const G2_GENERATOR_X_C1: Fq = MontFp!("140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118"); - -/// G2_GENERATOR_Y_C0 = -/// 63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423 -pub const G2_GENERATOR_Y_C0: Fq = MontFp!("63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423"); - -/// G2_GENERATOR_Y_C1 = -/// 149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491 -pub const G2_GENERATOR_Y_C1: Fq = MontFp!("149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs index c2d558f587eac..8fde72bc7ac9e 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -12,8 +12,8 @@ pub mod g1; pub mod g2; pub(crate) mod util; -#[cfg(test)] -mod tests; +// #[cfg(test)] +// mod tests; pub struct Config; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs deleted file mode 100755 index 661e0c3a89253..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::{Bls12_377, G1Projective, G2Projective}; -use ark_algebra_test_templates::*; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; crate::Bls12_377); From ba11fb528096b8187ba7c5cfe7e327a312b4ef50 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 27 Dec 2022 15:34:25 +0100 Subject: [PATCH 030/364] cleanup --- primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs index 91fe6f8b15edd..4873a02a28418 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs @@ -1,5 +1,5 @@ use crate::*; -use ark_bls12_381::{Fq, Fq2, Fr}; +use ark_bls12_381::{Fq, Fr}; use ark_ff::{Field, MontFp, PrimeField, Zero}; use ark_models::{ bls12, From 3f1a175873d639e5f60e5fa1b7817aeda7855f9c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 08:46:03 +0100 Subject: [PATCH 031/364] add tests for bls12_381 --- .../ark_sub_bls12_381/src/lib.rs | 4 +- .../g1_compressed_valid_test_vectors.dat | Bin 0 -> 48000 bytes .../g1_uncompressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_compressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_uncompressed_valid_test_vectors.dat | Bin 0 -> 192000 bytes .../ark_sub_bls12_381/src/tests/mod.rs | 119 ++++++++++++++++++ 6 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_compressed_valid_test_vectors.dat create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_uncompressed_valid_test_vectors.dat create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_compressed_valid_test_vectors.dat create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_uncompressed_valid_test_vectors.dat create mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs index 8fde72bc7ac9e..c2d558f587eac 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -12,8 +12,8 @@ pub mod g1; pub mod g2; pub(crate) mod util; -// #[cfg(test)] -// mod tests; +#[cfg(test)] +mod tests; pub struct Config; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_compressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea8cd67652d133010e79df8488452450b6f5cb17 GIT binary patch literal 48000 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 Rm?nepfGSPSF*XppvfIk?3d#Tg literal 0 HcmV?d00001 diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_uncompressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..86abfba945c7b701750d637bffe6701330e10e88 GIT binary patch literal 96000 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%0A9l>2- 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 literal 0 HcmV?d00001 diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_compressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..a40bbe251d90e576060adb7eaa2456197878804c GIT binary patch literal 96000 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 literal 0 HcmV?d00001 diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_uncompressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..92e4bc528e8937a311b502e4940e5e363a1f7c57 GIT binary patch literal 192000 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�uc*gWwz@d=S2~bA~LrFNXzUL(>hGG#V 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%0DJH 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�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 msm); +test_pairing!(pairing; crate::Bls12_381); + +#[test] +fn test_g1_endomorphism_beta() { + assert!(crate::g1::BETA.pow(&[3u64]).is_one()); +} + +#[test] +fn test_g1_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G1Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g1_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !p.mul_bigint(Fr::characteristic()).is_zero() { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return; + } + } + } +} + +#[test] +fn test_g2_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G2Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g2_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq2::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !p.mul_bigint(Fr::characteristic()).is_zero() { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return; + } + } + } +} + +// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs +macro_rules! test_vectors { + ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { + let mut e = $projective::zero(); + + let mut v = vec![]; + { + let mut expected = $expected; + for _ in 0..1000 { + let e_affine = $affine::from(e); + let mut serialized = vec![0u8; e.serialized_size($compress)]; + e_affine + .serialize_with_mode(serialized.as_mut_slice(), $compress) + .unwrap(); + v.extend_from_slice(&serialized[..]); + + let mut decoded = serialized; + let len_of_encoding = decoded.len(); + (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); + expected = &expected[len_of_encoding..]; + let decoded = + $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); + assert_eq!(e_affine, decoded); + + e += &$projective::generator(); + } + } + + assert_eq!(&v[..], $expected); + }; +} + +#[test] +fn g1_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); +} + +#[test] +fn g1_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); +} + +#[test] +fn g2_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); +} + +#[test] +fn g2_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); +} From 29253bb66c416c14a8adf0af494869509df331b8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 10:11:10 +0100 Subject: [PATCH 032/364] fix tests for bls12_381 --- Cargo.lock | 143 ++++++++++++++++-- .../ark_sub_bls12_381/Cargo.toml | 5 + .../ark_sub_bls12_381/src/{ => curves}/g1.rs | 5 +- .../ark_sub_bls12_381/src/{ => curves}/g2.rs | 4 +- .../ark_sub_bls12_381/src/curves/mod.rs | 90 +++++++++++ .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin .../ark_sub_bls12_381/src/curves/tests/mod.rs | 117 ++++++++++++++ .../src/{ => curves}/util.rs | 0 .../ark_sub_bls12_381/src/lib.rs | 122 ++++----------- .../ark_sub_bls12_381/src/tests/mod.rs | 119 --------------- 13 files changed, 376 insertions(+), 229 deletions(-) rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/g1.rs (98%) rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/g2.rs (98%) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/tests/g1_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/tests/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/tests/g2_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/tests/g2_uncompressed_valid_test_vectors.dat (100%) create mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs rename primitives/arkworks-curves/ark_sub_bls12_381/src/{ => curves}/util.rs (100%) mode change 100644 => 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs delete mode 100755 primitives/arkworks-curves/ark_sub_bls12_381/src/tests/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 0c4e197fd8fc8..b95d39e7e99da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,6 +111,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "ansi_term" version = "0.12.1" @@ -141,6 +147,20 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" +[[package]] +name = "ark-algebra-bench-templates" +version = "0.4.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b1fb3020e8aa4bf438866401997506eab659c7effd3d3b49e2e5ed6f00a3bd" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std 0.4.0-alpha", + "criterion 0.4.0", + "paste", +] + [[package]] name = "ark-algebra-test-templates" version = "0.4.0-alpha.5" @@ -338,12 +358,15 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ + "ark-algebra-bench-templates", + "ark-algebra-test-templates", "ark-bls12-381", "ark-ec", "ark-ff", "ark-models", "ark-serialize", "ark-std 0.4.0-alpha", + "hex", "sp-io", ] @@ -1046,6 +1069,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cid" version = "0.8.6" @@ -1095,10 +1145,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "bitflags", - "textwrap", + "textwrap 0.11.0", "unicode-width", ] +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "bitflags", + "clap_lex 0.2.4", + "indexmap", + "textwrap 0.16.0", +] + [[package]] name = "clap" version = "4.0.29" @@ -1107,7 +1169,7 @@ checksum = "4d63b9e9c07271b9957ad22c173bae2a4d9a81127680962039296abcd2f8251d" dependencies = [ "bitflags", "clap_derive", - "clap_lex", + "clap_lex 0.3.0", "is-terminal", "once_cell", "strsim", @@ -1136,6 +1198,15 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "clap_lex" version = "0.3.0" @@ -1352,7 +1423,7 @@ dependencies = [ "atty", "cast", "clap 2.34.0", - "criterion-plot", + "criterion-plot 0.4.5", "csv", "futures", "itertools", @@ -1371,6 +1442,32 @@ dependencies = [ "walkdir", ] +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap 3.2.23", + "criterion-plot 0.5.0", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + [[package]] name = "criterion-plot" version = "0.4.5" @@ -1381,6 +1478,16 @@ dependencies = [ "itertools", ] +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -2412,7 +2519,7 @@ dependencies = [ name = "frame-system" version = "4.0.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "frame-support", "log", "parity-scale-codec", @@ -4554,7 +4661,7 @@ dependencies = [ "assert_cmd", "clap 4.0.29", "clap_complete", - "criterion", + "criterion 0.3.6", "frame-benchmarking-cli", "frame-system", "frame-system-rpc-runtime-api", @@ -4635,7 +4742,7 @@ dependencies = [ name = "node-executor" version = "3.0.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "frame-benchmarking", "frame-support", "frame-system", @@ -7671,7 +7778,7 @@ dependencies = [ name = "sc-client-db" version = "0.10.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "hash-db", "kitchensink-runtime", "kvdb", @@ -7950,7 +8057,7 @@ name = "sc-executor" version = "0.10.0-dev" dependencies = [ "array-bytes", - "criterion", + "criterion 0.3.6", "env_logger", "lru", "num_cpus", @@ -8709,7 +8816,7 @@ dependencies = [ "ansi_term", "atty", "chrono", - "criterion", + "criterion 0.3.6", "lazy_static", "libc", "log", @@ -8750,7 +8857,7 @@ dependencies = [ "array-bytes", "assert_matches", "async-trait", - "criterion", + "criterion 0.3.6", "futures", "futures-timer", "linked-hash-map", @@ -9246,7 +9353,7 @@ dependencies = [ name = "sp-api-test" version = "2.0.1" dependencies = [ - "criterion", + "criterion 0.3.6", "futures", "log", "parity-scale-codec", @@ -9291,7 +9398,7 @@ dependencies = [ name = "sp-arithmetic" version = "6.0.0" dependencies = [ - "criterion", + "criterion 0.3.6", "integer-sqrt", "num-traits", "parity-scale-codec", @@ -9506,7 +9613,7 @@ dependencies = [ "bitflags", "blake2", "byteorder", - "criterion", + "criterion 0.3.6", "dyn-clonable", "ed25519-zebra", "futures", @@ -10003,7 +10110,7 @@ version = "7.0.0" dependencies = [ "ahash 0.7.6", "array-bytes", - "criterion", + "criterion 0.3.6", "hash-db", "hashbrown 0.12.3", "lazy_static", @@ -10577,6 +10684,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" version = "1.0.38" @@ -10921,7 +11034,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5b26bd2cdd7641c5beb476b314c0cb1f629832bf21a6235f545e2d47bc9d05a" dependencies = [ - "criterion", + "criterion 0.3.6", "hash-db", "keccak-hasher", "memory-db", diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml index 8e15845944888..f74845e902dc2 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -21,6 +21,11 @@ ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } +[dev-dependencies] +ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } +hex = "^0.4.0" + [features] default = [ "curve" ] std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs similarity index 98% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index 4873a02a28418..87a2b3333b3cc 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -1,4 +1,3 @@ -use crate::*; use ark_bls12_381::{Fq, Fr}; use ark_ff::{Field, MontFp, PrimeField, Zero}; use ark_models::{ @@ -8,8 +7,8 @@ use ark_models::{ short_weierstrass::{Affine, Projective, SWCurveConfig}, AffineRepr, Group, }; -use ark_serialize::{Compress, SerializationError}; -use ark_std::{ops::Neg, One}; +use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; +use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec, One}; use crate::util::{ read_g1_compressed, read_g1_uncompressed, serialize_fq, EncodingFlags, G1_SERIALIZED_SIZE, diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs similarity index 98% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index 2aca6a5224d05..2e09e9cc071f8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -1,4 +1,4 @@ -use ark_std::ops::Neg; +use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec}; use ark_bls12_381::{Fq, Fq2, Fr}; use ark_ff::{Field, MontFp, Zero}; @@ -9,7 +9,7 @@ use ark_models::{ short_weierstrass::{Affine, Projective, SWCurveConfig}, AffineRepr, CurveGroup, Group, }; -use ark_serialize::{Compress, SerializationError}; +use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; use super::util::{serialize_fq, EncodingFlags, G2_SERIALIZED_SIZE}; use crate::{ diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs new file mode 100644 index 0000000000000..c2d558f587eac --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -0,0 +1,90 @@ +use ark_bls12_381::{Fq, Fq12Config, Fq2Config, Fq6Config}; +use ark_ec::pairing::{MillerLoopOutput, Pairing, PairingOutput}; +use ark_ff::Fp12; +use ark_models::{ + bls12, + bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, +}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; + +pub mod g1; +pub mod g2; +pub(crate) mod util; + +#[cfg(test)] +mod tests; + +pub struct Config; + +impl Bls12Config for Config { + const X: &'static [u64] = &[0xd201000000010000]; + const X_IS_NEGATIVE: bool = true; + const TWIST_TYPE: TwistType = TwistType::M; + type Fp = Fq; + type Fp2Config = Fq2Config; + type Fp6Config = Fq6Config; + type Fp12Config = Fq12Config; + type G1Config = self::g1::Config; + type G2Config = self::g2::Config; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + let a: Vec> = a + .into_iter() + .map(|elem| { + let elem: as Pairing>::G1Prepared = elem.into(); + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let b = b + .into_iter() + .map(|elem| { + let elem: as Pairing>::G2Prepared = elem.into(); + let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + + let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); + let cursor = Cursor::new(&res[..]); + let f: as Pairing>::TargetField = + Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) + .unwrap(); + MillerLoopOutput(f) + } + + fn final_exponentiation( + f: MillerLoopOutput>, + ) -> Option>> { + let mut out: [u8; 576] = [0; 576]; + let mut cursor = Cursor::new(&mut out[..]); + f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let res = sp_io::crypto::bls12_381_final_exponentiation(&out); + + let cursor = Cursor::new(&res[..]); + let res = PairingOutput::>::deserialize_with_mode( + cursor, + Compress::Yes, + ark_serialize::Validate::No, + ) + .unwrap(); + + Some(res) + } +} + +pub type Bls12_381 = Bls12; + +pub type G1Affine = bls12::G1Affine; +pub type G1Projective = bls12::G1Projective; +pub type G2Affine = bls12::G2Affine; +pub type G2Projective = bls12::G2Projective; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_compressed_valid_test_vectors.dat rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g1_uncompressed_valid_test_vectors.dat rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_compressed_valid_test_vectors.dat rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/tests/g2_uncompressed_valid_test_vectors.dat rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs new file mode 100755 index 0000000000000..c5fbe6f2cda56 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs @@ -0,0 +1,117 @@ +use ark_algebra_test_templates::*; +use ark_ec::{AffineRepr, CurveGroup, Group}; +use ark_ff::{fields::Field, One, UniformRand, Zero}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{rand::Rng, test_rng, vec}; + +use crate::{Bls12_381, Fq, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective}; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; crate::Bls12_381); + +#[test] +fn test_g1_endomorphism_beta() { + assert!(crate::g1::BETA.pow(&[3u64]).is_one()); +} + +#[test] +fn test_g1_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G1Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g1_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !p.mul_bigint(Fr::characteristic()).is_zero() { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } + } + } +} + +#[test] +fn test_g2_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G2Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g2_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq2::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !p.mul_bigint(Fr::characteristic()).is_zero() { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } + } + } +} + +// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs +macro_rules! test_vectors { + ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { + let mut e = $projective::zero(); + + let mut v = vec![]; + { + let mut expected = $expected; + for _ in 0..1000 { + let e_affine = $affine::from(e); + let mut serialized = vec![0u8; e.serialized_size($compress)]; + e_affine.serialize_with_mode(serialized.as_mut_slice(), $compress).unwrap(); + v.extend_from_slice(&serialized[..]); + + let mut decoded = serialized; + let len_of_encoding = decoded.len(); + (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); + expected = &expected[len_of_encoding..]; + let decoded = + $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); + assert_eq!(e_affine, decoded); + + e += &$projective::generator(); + } + } + + assert_eq!(&v[..], $expected); + }; +} + +#[test] +fn g1_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); +} + +#[test] +fn g1_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); +} + +#[test] +fn g2_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); +} + +#[test] +fn g2_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/util.rs rename to primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs old mode 100644 new mode 100755 index c2d558f587eac..e3a1b6027eabc --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -1,90 +1,32 @@ -use ark_bls12_381::{Fq, Fq12Config, Fq2Config, Fq6Config}; -use ark_ec::pairing::{MillerLoopOutput, Pairing, PairingOutput}; -use ark_ff::Fp12; -use ark_models::{ - bls12, - bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -pub mod g1; -pub mod g2; -pub(crate) mod util; - -#[cfg(test)] -mod tests; - -pub struct Config; - -impl Bls12Config for Config { - const X: &'static [u64] = &[0xd201000000010000]; - const X_IS_NEGATIVE: bool = true; - const TWIST_TYPE: TwistType = TwistType::M; - type Fp = Fq; - type Fp2Config = Fq2Config; - type Fp6Config = Fq6Config; - type Fp12Config = Fq12Config; - type G1Config = self::g1::Config; - type G2Config = self::g2::Config; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - let a: Vec> = a - .into_iter() - .map(|elem| { - let elem: as Pairing>::G1Prepared = elem.into(); - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let b = b - .into_iter() - .map(|elem| { - let elem: as Pairing>::G2Prepared = elem.into(); - let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - - let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); - let cursor = Cursor::new(&res[..]); - let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) - .unwrap(); - MillerLoopOutput(f) - } - - fn final_exponentiation( - f: MillerLoopOutput>, - ) -> Option>> { - let mut out: [u8; 576] = [0; 576]; - let mut cursor = Cursor::new(&mut out[..]); - f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let res = sp_io::crypto::bls12_381_final_exponentiation(&out); - - let cursor = Cursor::new(&res[..]); - let res = PairingOutput::>::deserialize_with_mode( - cursor, - Compress::Yes, - ark_serialize::Validate::No, - ) - .unwrap(); - - Some(res) - } -} - -pub type Bls12_381 = Bls12; - -pub type G1Affine = bls12::G1Affine; -pub type G1Projective = bls12::G1Projective; -pub type G2Affine = bls12::G2Affine; -pub type G2Projective = bls12::G2Projective; +#![cfg_attr(not(feature = "std"), no_std)] +#![deny( + // warnings, + // unused, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +#![forbid(unsafe_code)] + +//! This library implements the BLS12_381 curve generated by [Sean Bowe](https://electriccoin.co/blog/new-snark-curve/). +//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree +//! 12, defined over a 381-bit (prime) field. +//! This curve was intended to replace the BN254 curve to provide a higher +//! security level without incurring a large performance overhead. +//! +//! +//! Curve information: +//! * Base field: q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 +//! * Scalar field: r = +//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 +//! * valuation(q - 1, 2) = 1 +//! * valuation(r - 1, 2) = 32 +//! * G1 curve equation: y^2 = x^3 + 4 +//! * G2 curve equation: y^2 = x^3 + Fq2(4, 4) + +#[cfg(feature = "curve")] +mod curves; + +pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr}; +#[cfg(feature = "curve")] +pub use curves::*; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/mod.rs deleted file mode 100755 index 81f17ff6a184e..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/tests/mod.rs +++ /dev/null @@ -1,119 +0,0 @@ -use ark_algebra_test_templates::*; -use ark_ec::{AffineRepr, CurveGroup, Group}; -use ark_ff::{fields::Field, One, UniformRand, Zero}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec}; - -use crate::{Bls12_381, Fq, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective}; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; crate::Bls12_381); - -#[test] -fn test_g1_endomorphism_beta() { - assert!(crate::g1::BETA.pow(&[3u64]).is_one()); -} - -#[test] -fn test_g1_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G1Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g1_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !p.mul_bigint(Fr::characteristic()).is_zero() { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return; - } - } - } -} - -#[test] -fn test_g2_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G2Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g2_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq2::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !p.mul_bigint(Fr::characteristic()).is_zero() { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return; - } - } - } -} - -// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs -macro_rules! test_vectors { - ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { - let mut e = $projective::zero(); - - let mut v = vec![]; - { - let mut expected = $expected; - for _ in 0..1000 { - let e_affine = $affine::from(e); - let mut serialized = vec![0u8; e.serialized_size($compress)]; - e_affine - .serialize_with_mode(serialized.as_mut_slice(), $compress) - .unwrap(); - v.extend_from_slice(&serialized[..]); - - let mut decoded = serialized; - let len_of_encoding = decoded.len(); - (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); - expected = &expected[len_of_encoding..]; - let decoded = - $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); - assert_eq!(e_affine, decoded); - - e += &$projective::generator(); - } - } - - assert_eq!(&v[..], $expected); - }; -} - -#[test] -fn g1_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); -} - -#[test] -fn g1_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::No, bytes); -} - -#[test] -fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); -} - -#[test] -fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); -} From 5dfa0401b3a095a044e368288ec4f91e65b9bac3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 10:16:05 +0100 Subject: [PATCH 033/364] further fix tests for bls12_381 --- primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs | 1 + .../arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs | 4 ++-- primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index 87a2b3333b3cc..ab9fe07a6b0a5 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -1,3 +1,4 @@ +use crate::*; use ark_bls12_381::{Fq, Fr}; use ark_ff::{Field, MontFp, PrimeField, Zero}; use ark_models::{ diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs index c2d558f587eac..cce41858cadb1 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -56,7 +56,7 @@ impl Bls12Config for Config { let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); let cursor = Cursor::new(&res[..]); let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, ark_serialize::Validate::No) + Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No) .unwrap(); MillerLoopOutput(f) } @@ -74,7 +74,7 @@ impl Bls12Config for Config { let res = PairingOutput::>::deserialize_with_mode( cursor, Compress::Yes, - ark_serialize::Validate::No, + Validate::No, ) .unwrap(); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs index e3a1b6027eabc..2b500b0714164 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -27,6 +27,6 @@ #[cfg(feature = "curve")] mod curves; -pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr}; +pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr, Fq, Fq2, Fr}; #[cfg(feature = "curve")] pub use curves::*; From c0c0f437b5bb8f3b10e1adef51ca3aefbd2afe6b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 10:30:49 +0100 Subject: [PATCH 034/364] fix host function deserialize, cleanup --- primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs | 3 +-- primitives/arkworks/src/bls12_377.rs | 1 - primitives/arkworks/src/bls12_381.rs | 3 +-- primitives/arkworks/src/bw6_761.rs | 1 - primitives/arkworks/src/ed_on_bls12_377.rs | 1 - primitives/arkworks/src/ed_on_bls12_381.rs | 1 - primitives/arkworks/src/lib.rs | 2 ++ 7 files changed, 4 insertions(+), 8 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs index ab9fe07a6b0a5..cde4fd8f41fa1 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs @@ -1,4 +1,3 @@ -use crate::*; use ark_bls12_381::{Fq, Fr}; use ark_ff::{Field, MontFp, PrimeField, Zero}; use ark_models::{ @@ -229,8 +228,8 @@ pub fn endomorphism(p: &Affine) -> Affine { #[cfg(test)] mod test { - use super::*; + use crate::*; use ark_std::{rand::Rng, UniformRand}; fn sample_unchecked() -> Affine { diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index d3a0fed19b54e..7454bbb166a90 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -18,7 +18,6 @@ //! Hashing Functions. #![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 728e569772526..0b0fc16896011 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -18,7 +18,6 @@ //! Hashing Functions. #![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] use ark_bls12_381::{Bls12_381, Config, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ @@ -84,7 +83,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|b| { let cursor = Cursor::new(b); - ::G2Prepared::deserialize_with_mode( + ::G2Affine::deserialize_with_mode( cursor, Compress::Yes, Validate::No, diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index f91f07a9d3bdb..c83b9bb71d393 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -18,7 +18,6 @@ //! Hashing Functions. #![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] use ark_bw6_761::{Config, G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index ba7fe688bc058..8fb419b17f193 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -18,7 +18,6 @@ //! Hashing Functions. #![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] use ark_ec::{ models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 3dda6989bbc9c..eca88ee8b0d31 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -18,7 +18,6 @@ //! Hashing Functions. #![warn(missing_docs)] -#![cfg_attr(not(feature = "std"), no_std)] use ark_ec::{ models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 0e62268599bf9..2164e84b375cd 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(feature = "std"), no_std)] + pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; From ac3109e5b60118529626923c3fc6f6f7dbc00d17 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 11:00:14 +0100 Subject: [PATCH 035/364] add bls12_377 --- Cargo.lock | 52 +- Cargo.toml | 2 + .../ark_sub_bls12_377/Cargo.toml | 33 + .../ark_sub_bls12_377/LICENSE-APACHE | 1 + .../ark_sub_bls12_377/LICENSE-MIT | 1 + .../ark_sub_bls12_377/benches/bls12_377.rs | 16 + .../ark_sub_bls12_377/scripts/base_field.sage | 28 + .../scripts/scalar_field.sage | 28 + .../src/constraints/curves.rs | 39 ++ .../src/constraints/fields.rs | 32 + .../ark_sub_bls12_377/src/constraints/mod.rs | 163 +++++ .../src/constraints/pairing.rs | 13 + .../ark_sub_bls12_377/src/curves/g1.rs | 211 ++++++ .../ark_sub_bls12_377/src/curves/g2.rs | 78 +++ .../ark_sub_bls12_377/src/curves/mod.rs | 36 + .../ark_sub_bls12_377/src/curves/tests.rs | 7 + .../ark_sub_bls12_377/src/fields/fq.rs | 7 + .../ark_sub_bls12_377/src/fields/fq12.rs | 74 ++ .../ark_sub_bls12_377/src/fields/fq2.rs | 51 ++ .../ark_sub_bls12_377/src/fields/fq6.rs | 79 +++ .../ark_sub_bls12_377/src/fields/fr.rs | 27 + .../ark_sub_bls12_377/src/fields/mod.rs | 27 + .../ark_sub_bls12_377/src/fields/tests.rs | 216 ++++++ .../ark_sub_bls12_377/src/lib.rs | 40 ++ .../curve-constraint-tests/Cargo.toml | 25 + .../curve-constraint-tests/LICENSE-APACHE | 1 + .../curve-constraint-tests/LICENSE-MIT | 1 + .../curve-constraint-tests/src/lib.rs | 651 ++++++++++++++++++ 28 files changed, 1932 insertions(+), 7 deletions(-) create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml create mode 120000 primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE create mode 120000 primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs create mode 100755 primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs create mode 100755 primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs create mode 100644 primitives/arkworks-curves/curve-constraint-tests/Cargo.toml create mode 120000 primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE create mode 120000 primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT create mode 100644 primitives/arkworks-curves/curve-constraint-tests/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index b95d39e7e99da..140388445ff10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -210,7 +210,7 @@ dependencies = [ [[package]] name = "ark-ec" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "ark-ff", "ark-poly", @@ -248,7 +248,7 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -267,7 +267,7 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "quote", "syn", @@ -276,7 +276,7 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "num-bigint", "num-traits", @@ -305,7 +305,7 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "ark-ff", "ark-serialize", @@ -314,20 +314,48 @@ dependencies = [ "hashbrown 0.13.1", ] +[[package]] +name = "ark-r1cs-std" +version = "0.4.0-alpha.1" +source = "git+https://github.com/arkworks-rs/r1cs-std/?branch=release-0.4#bdffd136f955ccb437183862964612d235148615" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-std 0.4.0-alpha", + "derivative", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" +dependencies = [ + "ark-ff", + "ark-std 0.4.0-alpha", + "tracing", +] + [[package]] name = "ark-serialize" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "ark-serialize-derive", "ark-std 0.4.0-alpha", "digest 0.10.6", + "num-bigint", ] [[package]] name = "ark-serialize-derive" version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" dependencies = [ "proc-macro2", "quote", @@ -354,6 +382,16 @@ dependencies = [ "rayon", ] +[[package]] +name = "ark-sub-bls12-377" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-r1cs-std", + "ark-std 0.4.0-alpha", +] + [[package]] name = "ark-sub-bls12-381" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index f95af115849ea..5627e51354291 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -175,6 +175,7 @@ members = [ "primitives/arithmetic/fuzzer", "primitives/arkworks", "primitives/arkworks-curves/ark_sub_bls12_381", + "primitives/arkworks-curves/ark_sub_bls12_377", "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", @@ -330,6 +331,7 @@ ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0. ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } +ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/", branch = "release-0.4" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml new file mode 100644 index 0000000000000..58e39eca88889 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "ark-sub-bls12-377" +version = "0.4.0-alpha.1" +authors = [ "arkworks contributors" ] +description = "The BLS12-377 pairing-friendly elliptic curve" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-bls12-377/" +keywords = ["cryptography", "finite-fields", "elliptic-curves" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-ff = { version="0.4.0-alpha", default-features = false } +ark-ec = { version="0.4.0-alpha", default-features = false } +ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } +ark-std = { version = "0.4.0-alpha", default-features = false } + +[features] +default = [ "curve" ] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] + +curve = [ "scalar_field", "base_field" ] +scalar_field = [] +base_field = [] +r1cs = [ "base_field", "ark-r1cs-std" ] + +[[bench]] +name = "bls12_377" +path = "benches/bls12_377.rs" +harness = false diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE b/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE new file mode 120000 index 0000000000000..965b606f331b5 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT b/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT new file mode 120000 index 0000000000000..76219eb72e852 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs b/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs new file mode 100644 index 0000000000000..7bb18ab0c6d03 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs @@ -0,0 +1,16 @@ +use ark_algebra_bench_templates::*; + +use ark_bls12_377::{ + fq::Fq, fq2::Fq2, fr::Fr, Bls12_377, Fq12, G1Projective as G1, G2Projective as G2, +}; + +bench!( + Name = "Bls12_377", + Pairing = Bls12_377, + G1 = G1, + G2 = G2, + ScalarField = Fr, + G1BaseField = Fq, + G2BaseField = Fq2, + TargetField = Fq12, +); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage b/primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage new file mode 100644 index 0000000000000..6d9f4a7e71948 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage @@ -0,0 +1,28 @@ +modulus = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 20): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage b/primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage new file mode 100644 index 0000000000000..a4d06f0891f59 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage @@ -0,0 +1,28 @@ +modulus = 8444461749428370424248824938781546531375899335154063827935233455917409239041 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 30): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs new file mode 100644 index 0000000000000..07b4b9342b67b --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs @@ -0,0 +1,39 @@ +use ark_ec::{bls12::Bls12Config, CurveConfig}; +use ark_r1cs_std::{ + fields::fp::FpVar, + groups::{bls12, curves::twisted_edwards::AffineVar as TEAffineVar}, +}; + +use crate::Config; + +/// An element of G1 in the BLS12-377 bilinear group. +pub type G1Var = bls12::G1Var; +/// An element of G2 in the BLS12-377 bilinear group. +pub type G2Var = bls12::G2Var; + +/// An element of G1 (in TE Affine form) in the BLS12-377 bilinear group. +pub type G1TEAffineVar = TEAffineVar< + ::G1Config, + FpVar<<::G1Config as CurveConfig>::BaseField>, +>; + +/// Represents the cached precomputation that can be performed on a G1 element +/// which enables speeding up pairing computation. +pub type G1PreparedVar = bls12::G1PreparedVar; +/// Represents the cached precomputation that can be performed on a G2 element +/// which enables speeding up pairing computation. +pub type G2PreparedVar = bls12::G2PreparedVar; + +#[test] +fn test() { + use ark_ec::models::bls12::Bls12Config; + ark_curve_constraint_tests::curves::sw_test::<::G1Config, G1Var>() + .unwrap(); + ark_curve_constraint_tests::curves::te_test::< + ::G1Config, + G1TEAffineVar, + >() + .unwrap(); + ark_curve_constraint_tests::curves::sw_test::<::G2Config, G2Var>() + .unwrap(); +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs new file mode 100644 index 0000000000000..b3d883ce893c1 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs @@ -0,0 +1,32 @@ +use ark_r1cs_std::fields::{fp::FpVar, fp12::Fp12Var, fp2::Fp2Var, fp6_3over2::Fp6Var}; + +use crate::{Fq, Fq12Config, Fq2Config, Fq6Config}; + +/// A variable that is the R1CS equivalent of `crate::Fq`. +pub type FqVar = FpVar; + +/// A variable that is the R1CS equivalent of `crate::Fq2`. +pub type Fq2Var = Fp2Var; +/// A variable that is the R1CS equivalent of `crate::Fq6`. +pub type Fq6Var = Fp6Var; +/// A variable that is the R1CS equivalent of `crate::Fq12`. +pub type Fq12Var = Fp12Var; + +#[test] +fn bls12_377_field_test() { + use super::*; + use crate::{Fq, Fq12, Fq2, Fq6}; + use ark_curve_constraint_tests::fields::*; + + field_test::<_, _, FqVar>().unwrap(); + frobenius_tests::(13).unwrap(); + + field_test::<_, _, Fq2Var>().unwrap(); + frobenius_tests::(13).unwrap(); + + field_test::<_, _, Fq6Var>().unwrap(); + frobenius_tests::(13).unwrap(); + + field_test::<_, _, Fq12Var>().unwrap(); + frobenius_tests::(13).unwrap(); +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs new file mode 100644 index 0000000000000..db99c86c8ac50 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs @@ -0,0 +1,163 @@ +//! This module implements the R1CS equivalent of `crate`. +//! +//! It implements field variables for `crate::{Fq, Fq2, Fq6, Fq12}`, +//! group variables for `crate::{G1, G2}`, and implements constraint +//! generation for computing `Bls12_377::pairing`. +//! +//! The field underlying these constraints is `crate::Fq`. +//! +//! # Examples +//! +//! One can perform standard algebraic operations on `FqVar`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! use ark_std::UniformRand; +//! use ark_relations::r1cs::*; +//! use ark_r1cs_std::prelude::*; +//! use ark_bls12_377::{*, constraints::*}; +//! +//! let cs = ConstraintSystem::::new_ref(); +//! // This rng is just for test purposes; do not use it +//! // in real applications. +//! let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `Fq` elements. +//! let a_native = Fq::rand(&mut rng); +//! let b_native = Fq::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; +//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! let one = FqVar::one(); +//! let zero = FqVar::zero(); +//! +//! // Sanity check one + one = two +//! let two = &one + &one + &zero; +//! two.enforce_equal(&one.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that the value of &a * &b is correct. +//! assert_eq!((&a * &b).value()?, a_native * &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` +//! +//! One can also perform standard algebraic operations on `G1Var` and `G2Var`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! # use ark_std::UniformRand; +//! # use ark_relations::r1cs::*; +//! # use ark_r1cs_std::prelude::*; +//! # use ark_bls12_377::{*, constraints::*}; +//! +//! # let cs = ConstraintSystem::::new_ref(); +//! # let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `G1` elements. +//! let a_native = G1Projective::rand(&mut rng); +//! let b_native = G1Projective::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = G1Var::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; +//! let b = G1Var::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = G1Var::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = G1Var::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! // This returns the identity of `G1`. +//! let zero = G1Var::zero(); +//! +//! // Sanity check one + one = two +//! let two_a = &a + &a + &zero; +//! two_a.enforce_equal(&a.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` +//! +//! Finally, one can check pairing computations as well: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! # use ark_std::UniformRand; +//! # use ark_ec::pairing::Pairing; +//! # use ark_relations::r1cs::*; +//! # use ark_r1cs_std::prelude::*; +//! # use ark_bls12_377::{*, constraints::*}; +//! +//! # let cs = ConstraintSystem::::new_ref(); +//! # let mut rng = ark_std::test_rng(); +//! +//! // Generate random `G1` and `G2` elements. +//! let a_native = G1Projective::rand(&mut rng); +//! let b_native = G2Projective::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = G1Var::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; +//! let b = G2Var::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = G1Var::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = G2Var::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! let pairing_result_native = Bls12_377::pairing(a_native, b_native); +//! +//! // Prepare `a` and `b` for pairing. +//! let a_prep = constraints::PairingVar::prepare_g1(&a)?; +//! let b_prep = constraints::PairingVar::prepare_g2(&b)?; +//! let pairing_result = constraints::PairingVar::pairing(a_prep, b_prep)?; +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!(pairing_result.value()?, pairing_result_native.0); +//! +//! // Check that operations on variables and constants are equivalent. +//! let a_prep_const = constraints::PairingVar::prepare_g1(&a_const)?; +//! let b_prep_const = constraints::PairingVar::prepare_g2(&b_const)?; +//! let pairing_result_const = constraints::PairingVar::pairing(a_prep_const, b_prep_const)?; +//! println!("Done here 3"); +//! +//! pairing_result.enforce_equal(&pairing_result_const)?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` + +mod fields; +pub use fields::*; + +#[cfg(feature = "curve")] +mod curves; +#[cfg(feature = "curve")] +mod pairing; + +#[cfg(feature = "curve")] +pub use curves::*; +#[cfg(feature = "curve")] +pub use pairing::*; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs new file mode 100644 index 0000000000000..95dcc905d4026 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs @@ -0,0 +1,13 @@ +use crate::Config; + +/// Specifies the constraints for computing a pairing in the BLS12-377 bilinear +/// group. +pub type PairingVar = ark_r1cs_std::pairing::bls12::PairingVar; + +#[test] +fn test() { + use crate::Bls12_377; + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs new file mode 100644 index 0000000000000..f7f6103957f39 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -0,0 +1,211 @@ +use ark_ec::models::{ + short_weierstrass::{Affine as SWAffine, SWCurveConfig}, + twisted_edwards::{ + Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, + }, + CurveConfig, +}; +use ark_ff::{Field, MontFp, Zero}; +use core::ops::Neg; + +use crate::{Fq, Fr}; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 + const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 5285428838741532253824584287042945485047145357130994810877 + const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = 1 + const COEFF_B: Fq = Fq::ONE; + + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } +} + +pub type G1SWAffine = SWAffine; +pub type G1TEAffine = TEAffine; +pub type G1TEProjective = TEProjective; + +/// Bls12_377::G1 also has a twisted Edwards form. +/// It can be obtained via the following script, implementing +/// 1. SW -> Montgomery -> TE1 transformation: +/// 2. TE1 -> TE2 normalization (enforcing `a = -1`) +/// ``` sage +/// # modulus +/// p = 0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 +/// Fp = Zmod(p) +/// +/// ##################################################### +/// # Weierstrass curve: y² = x³ + A * x + B +/// ##################################################### +/// # curve y^2 = x^3 + 1 +/// WA = Fp(0) +/// WB = Fp(1) +/// +/// ##################################################### +/// # Montgomery curve: By² = x³ + A * x² + x +/// ##################################################### +/// # root for x^3 + 1 = 0 +/// alpha = -1 +/// # s = 1 / (sqrt(3alpha^2 + a)) +/// s = 1/(Fp(3).sqrt()) +/// +/// # MA = 3 * alpha * s +/// MA = Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) +/// # MB = s +/// MB = Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) +/// +/// # ##################################################### +/// # # Twisted Edwards curve 1: a * x² + y² = 1 + d * x² * y² +/// # ##################################################### +/// # We first convert to TE form obtaining a curve with a != -1, and then +/// # apply a transformation to obtain a TE curve with a = -1. +/// # a = (MA+2)/MB +/// TE1a = Fp(61134141799337779744243169579317764548490943457438569789767076791016838392692895365021181670618017873462480451583) +/// # b = (MA-2)/MB +/// TE1d = Fp(197530284213631314266409564115575768987902569297476090750117185875703629955647927409947706468955342250977841006588) +/// +/// # ##################################################### +/// # # Twisted Edwards curve 2: a * x² + y² = 1 + d * x² * y² +/// # ##################################################### +/// # a = -1 +/// TE2a = Fp(-1) +/// # b = -TE1d/TE1a +/// TE2d = Fp(122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179) +/// ``` +impl TECurveConfig for Config { + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); + + /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q + const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); + + /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) + const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); + + type MontCurveConfig = Config; + + /// Multiplication by `a` is multiply by `-1`. + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + elem.neg() + } +} + +// BLS12-377::G1 also has a Montgomery form. +// BLS12-377::G1 also has a twisted Edwards form. +// It can be obtained via the following script, implementing +// SW -> Montgomery transformation: +// ``` sage +// # modulus +// p=0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 +// Fp=Zmod(p) +// +// ##################################################### +// # Weierstrass curve: y² = x³ + A * x + B +// ##################################################### +// # curve y^2 = x^3 + 1 +// WA=Fp(0) +// WB=Fp(1) +// +// ##################################################### +// # Montgomery curve: By² = x³ + A * x² + x +// ##################################################### +// # root for x^3 + 1 = 0 +// alpha = -1 +// # s = 1 / (sqrt(3alpha^2 + a)) +// s = 1/(Fp(3).sqrt()) +// +// # MA = 3 * alpha * s +// MA=Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) +// # MB = s +// MB=Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) +// ``` +impl MontCurveConfig for Config { + /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 + const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); + + /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 + const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); + + type TECurveConfig = Config; +} + +/// G1_GENERATOR_X = +/// 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695 +pub const G1_GENERATOR_X: Fq = MontFp!("81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695"); + +/// G1_GENERATOR_Y = +/// 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030 +pub const G1_GENERATOR_Y: Fq = MontFp!("241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030"); + +// The generator for twisted Edward form is the same SW generator converted into +// the normalized TE form (TE2). +//``` sage +// # following scripts in previous section +// ##################################################### +// # Weierstrass curve generator +// ##################################################### +// Wx = Fp(81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695) +// Wy = Fp(241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030) +// +// assert(Wy^2 - Wx^3 - WA * Wx - WB == 0) +// +// ##################################################### +// # Montgomery curve generator +// ##################################################### +// # x = s * (x - alpha) +// Mx = Fp(251803586774461569862800610331871502335378228972505599912537082323947581271784390797244487924068052270360793200630) +// # y = s * y +// My = Fp(77739247071951651095607889637653357561348174979132042929587539214321586851215673796661346812932566642719051699820) +// +// assert(MB * My^2 == Mx^3+ MA * Mx^2 + Mx) +// +// # ##################################################### +// # # Twisted Edwards curve 1 generator +// # ##################################################### +// # x = Mx/My +// TE1x = Fp(82241236807150726090333472814441006963902378430536027612759193445733851062772474760677400112551677454953925168208) +// # y = (Mx - 1)/(Mx+1) +// TE1y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) +// +// assert( TE1a * TE1x^2 + TE1y^2 == 1 + TE1d * TE1x^2 * TE1y^2 ) +// +// +// # ##################################################### +// # # Twisted Edwards curve 2 generator +// # ##################################################### +// beta = (-TE1a).sqrt() +// # x = TE1x * sqrt(-TE1a) +// TE2x = Fp(71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393) +// # y = TE1y +// TE2y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) +// +// assert( TE2a * TE2x^2 + TE2y^2 == 1 + TE2d * TE2x^2 * TE2y^2 ) +// ``` +/// TE_GENERATOR_X = +/// 71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393 +pub const TE_GENERATOR_X: Fq = MontFp!("71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393"); + +/// TE_GENERATOR_Y = +/// 6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235 +pub const TE_GENERATOR_Y: Fq = MontFp!("6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs new file mode 100644 index 0000000000000..d25265b341046 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -0,0 +1,78 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::Affine, +}; +use ark_ff::{Field, MontFp, Zero}; + +use crate::{g1, Fq, Fq2, Fr}; + +pub type G2Affine = Affine; +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq2; + type ScalarField = Fr; + + /// COFACTOR = + /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 + #[rustfmt::skip] + const COFACTOR: &'static [u64] = &[ + 0x0000000000000001, + 0x452217cc90000000, + 0xa0f3622fba094800, + 0xd693e8c36676bd09, + 0x8c505634fae2e189, + 0xfbb36b00e1dcc40c, + 0xddd88d99a6f6a829, + 0x26ba558ae9562a, + ]; + + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 + const COFACTOR_INV: Fr = + MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + + // As per https://eprint.iacr.org/2012/072.pdf, + // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is + // the irreducible poly used to extend from Fp2 to Fp12. + // In our case, i = u (App A.3, T_6). + /// COEFF_B = [0, + /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] + const COEFF_B: Fq2 = Fq2::new( + Fq::ZERO, + MontFp!("155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906"), + ); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } +} + +pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); +pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); + +/// G2_GENERATOR_X_C0 = +/// 233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294 +pub const G2_GENERATOR_X_C0: Fq = MontFp!("233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294"); + +/// G2_GENERATOR_X_C1 = +/// 140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118 +pub const G2_GENERATOR_X_C1: Fq = MontFp!("140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118"); + +/// G2_GENERATOR_Y_C0 = +/// 63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423 +pub const G2_GENERATOR_Y_C0: Fq = MontFp!("63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423"); + +/// G2_GENERATOR_Y_C1 = +/// 149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491 +pub const G2_GENERATOR_Y_C1: Fq = MontFp!("149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491"); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs new file mode 100644 index 0000000000000..d7c6695cf5663 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs @@ -0,0 +1,36 @@ +use ark_ec::{ + bls12, + bls12::{Bls12, Bls12Config, TwistType}, +}; + +use crate::*; + +pub mod g1; +pub mod g2; + +#[cfg(test)] +mod tests; + +pub struct Config; + +impl Bls12Config for Config { + const X: &'static [u64] = &[0x8508c00000000001]; + /// `x` is positive. + const X_IS_NEGATIVE: bool = false; + const TWIST_TYPE: TwistType = TwistType::D; + type Fp = Fq; + type Fp2Config = Fq2Config; + type Fp6Config = Fq6Config; + type Fp12Config = Fq12Config; + type G1Config = g1::Config; + type G2Config = g2::Config; +} + +pub type Bls12_377 = Bls12; + +pub type G1Affine = bls12::G1Affine; +pub type G1Projective = bls12::G1Projective; +pub type G2Affine = bls12::G2Affine; +pub type G2Projective = bls12::G2Projective; + +pub use g1::{G1TEAffine, G1TEProjective}; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs new file mode 100755 index 0000000000000..661e0c3a89253 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs @@ -0,0 +1,7 @@ +use crate::{Bls12_377, G1Projective, G2Projective}; +use ark_algebra_test_templates::*; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; crate::Bls12_377); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs new file mode 100644 index 0000000000000..30744c63499cd --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs @@ -0,0 +1,7 @@ +use ark_ff::fields::{Fp384, MontBackend, MontConfig}; + +#[derive(MontConfig)] +#[modulus = "258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177"] +#[generator = "15"] +pub struct FqConfig; +pub type Fq = Fp384>; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs new file mode 100644 index 0000000000000..e1390724062be --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs @@ -0,0 +1,74 @@ +use ark_ff::{fields::*, MontFp}; + +use crate::*; + +pub type Fq12 = Fp12; + +#[derive(Clone, Copy)] +pub struct Fq12Config; + +impl Fp12Config for Fq12Config { + type Fp6Config = Fq6Config; + + const NONRESIDUE: Fq6 = Fq6::new(Fq2::ZERO, Fq2::ONE, Fq2::ZERO); + + const FROBENIUS_COEFF_FP12_C1: &'static [Fq2] = &[ + // Fp2::NONRESIDUE^(((q^0) - 1) / 6) + Fq2::new(Fq::ONE, Fq::ZERO), + // Fp2::NONRESIDUE^(((q^1) - 1) / 6) + Fq2::new( + MontFp!("92949345220277864758624960506473182677953048909283248980960104381795901929519566951595905490535835115111760994353"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^2) - 1) / 6) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410946"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^3) - 1) / 6) + Fq2::new( + MontFp!("216465761340224619389371505802605247630151569547285782856803747159100223055385581585702401816380679166954762214499"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^4) - 1) / 6) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^5) - 1) / 6) + Fq2::new( + MontFp!("123516416119946754630746545296132064952198520638002533875843642777304321125866014634106496325844844051843001220146"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^6) - 1) / 6) + Fq2::new( + MontFp!("-1"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^7) - 1) / 6) + Fq2::new( + MontFp!("165715080792691229252027773188420350858440463845631411558924158284924566418821255823372982649037525009328560463824"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^8) - 1) / 6) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^9) - 1) / 6) + Fq2::new( + MontFp!("42198664672744474621281227892288285906241943207628877683080515507620245292955241189266486323192680957485559243678"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^10) - 1) / 6) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047232"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^11) - 1) / 6) + Fq2::new( + MontFp!("135148009893022339379906188398761468584194992116912126664040619889416147222474808140862391813728516072597320238031"), + Fq::ZERO, + ), + ]; +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs new file mode 100644 index 0000000000000..60d38884d60d2 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs @@ -0,0 +1,51 @@ +use ark_ff::{fields::*, MontFp}; + +use crate::*; + +pub type Fq2 = Fp2; + +pub struct Fq2Config; + +impl Fp2Config for Fq2Config { + type Fp = Fq; + + /// NONRESIDUE = -5 + const NONRESIDUE: Fq = MontFp!("-5"); + + /// Coefficients for the Frobenius automorphism. + const FROBENIUS_COEFF_FP2_C1: &'static [Fq] = &[ + // NONRESIDUE**(((q^0) - 1) / 2) + Fq::ONE, + // NONRESIDUE**(((q^1) - 1) / 2) + MontFp!("-1"), + ]; + + #[inline(always)] + fn mul_fp_by_nonresidue_in_place(fe: &mut Self::Fp) -> &mut Self::Fp { + fe.neg_in_place(); + *fe = *fe + fe.double_in_place().double_in_place(); + fe + } + + #[inline(always)] + fn sub_and_mul_fp_by_nonresidue(y: &mut Self::Fp, x: &Self::Fp) { + let mut original = *y; + original += x; + y.double_in_place().double_in_place(); + *y += original; + } + + #[inline(always)] + fn mul_fp_by_nonresidue_plus_one_and_add(y: &mut Self::Fp, x: &Self::Fp) { + y.double_in_place().double_in_place().neg_in_place(); + *y += x; + } + + fn mul_fp_by_nonresidue_and_add(y: &mut Self::Fp, x: &Self::Fp) { + let mut original = *y; + original.double_in_place().double_in_place(); + original += &*y; + *y = *x; + *y -= original; + } +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs new file mode 100644 index 0000000000000..bafab308741c7 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs @@ -0,0 +1,79 @@ +use ark_ff::{fields::*, MontFp}; + +use crate::*; + +pub type Fq6 = Fp6; + +#[derive(Clone, Copy)] +pub struct Fq6Config; + +impl Fp6Config for Fq6Config { + type Fp2Config = Fq2Config; + + /// NONRESIDUE = U + const NONRESIDUE: Fq2 = Fq2::new(Fq::ZERO, Fq::ONE); + + const FROBENIUS_COEFF_FP6_C1: &'static [Fq2] = &[ + // Fp2::NONRESIDUE^(((q^0) - 1) / 3) + Fq2::new(Fq::ONE, Fq::ZERO), + // Fp2::NONRESIDUE^(((q^1) - 1) / 3) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410946"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^2) - 1) / 3) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^3) - 1) / 3) + Fq2::new(MontFp!("-1"), Fq::ZERO), + // Fp2::NONRESIDUE^(((q^4) - 1) / 3) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^(((q^5) - 1) / 3) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047232"), + Fq::ZERO, + ), + ]; + + const FROBENIUS_COEFF_FP6_C2: &'static [Fq2] = &[ + // Fp2::NONRESIDUE^((2*(q^0) - 2) / 3) + Fq2::new(Fq::ONE, Fq::ZERO), + // Fp2::NONRESIDUE^((2*(q^1) - 2) / 3) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), + Fq::ZERO + ), + // Fp2::NONRESIDUE^((2*(q^2) - 2) / 3) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^((2*(q^3) - 2) / 3) + Fq2::new(Fq::ONE, Fq::ZERO), + // Fp2::NONRESIDUE^((2*(q^4) - 2) / 3) + Fq2::new( + MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), + Fq::ZERO, + ), + // Fp2::NONRESIDUE^((2*(q^5) - 2) / 3) + Fq2::new( + MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), + Fq::ZERO, + ), + ]; + + #[inline(always)] + fn mul_fp2_by_nonresidue_in_place(fe: &mut Fq2) -> &mut Fq2 { + // Karatsuba multiplication with constant other = u. + let old_c0 = fe.c0; + fe.c0 = fe.c1; + Fq2Config::mul_fp_by_nonresidue_in_place(&mut fe.c0); + fe.c1 = old_c0; + fe + } +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs new file mode 100644 index 0000000000000..7fb498c4cfad1 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs @@ -0,0 +1,27 @@ +//! Bls12-377 scalar field. +/// Roots of unity computed from modulus and R using this sage code: +/// +/// ```ignore +/// q = 8444461749428370424248824938781546531375899335154063827935233455917409239041 +/// R = 6014086494747379908336260804527802945383293308637734276299549080986809532403 # Montgomery R +/// s = 47 +/// o = q - 1 +/// F = GF(q) +/// g = F.multiplicative_generator() +/// g = F.multiplicative_generator() +/// assert g.multiplicative_order() == o +/// g2 = g ** (o/2**s) +/// assert g2.multiplicative_order() == 2**s +/// def into_chunks(val, width, n): +/// return [int(int(val) // (2 ** (width * i)) % 2 ** width) for i in range(n)] +/// print("Gen: ", g * R % q) +/// print("Gen: ", into_chunks(g * R % q, 64, 4)) +/// print("2-adic gen: ", into_chunks(g2 * R % q, 64, 4)) +/// ``` +use ark_ff::fields::{Fp256, MontBackend, MontConfig}; + +#[derive(MontConfig)] +#[modulus = "8444461749428370424248824938781546531375899335154063827935233455917409239041"] +#[generator = "22"] +pub struct FrConfig; +pub type Fr = Fp256>; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs new file mode 100644 index 0000000000000..401c07b570c93 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs @@ -0,0 +1,27 @@ +#[cfg(feature = "scalar_field")] +pub mod fr; +#[cfg(feature = "scalar_field")] +pub use self::fr::*; + +#[cfg(feature = "base_field")] +pub mod fq; +#[cfg(feature = "base_field")] +pub use self::fq::*; + +#[cfg(feature = "curve")] +pub mod fq2; +#[cfg(feature = "curve")] +pub use self::fq2::*; + +#[cfg(feature = "curve")] +pub mod fq6; +#[cfg(feature = "curve")] +pub use self::fq6::*; + +#[cfg(feature = "curve")] +pub mod fq12; +#[cfg(feature = "curve")] +pub use self::fq12::*; + +#[cfg(all(feature = "curve", test))] +mod tests; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs new file mode 100644 index 0000000000000..44c22ece276a4 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs @@ -0,0 +1,216 @@ +use ark_algebra_test_templates::*; +use ark_ff::{ + biginteger::{BigInt, BigInteger, BigInteger384}, + fields::{FftField, Field, Fp6Config, PrimeField}, + Fp384, One, UniformRand, Zero, +}; +use ark_std::{ + cmp::Ordering, + ops::{AddAssign, MulAssign}, + test_rng, +}; + +use crate::{Fq, Fq12, Fq2, Fq6, Fq6Config, Fr}; + +test_field!(fr; Fr; mont_prime_field); +test_field!(fq; Fq; mont_prime_field); +test_field!(fq2; Fq2); +test_field!(fq6; Fq6); +test_field!(fq12; Fq12); + +#[test] +fn test_fq_repr_from() { + assert_eq!(BigInt::from(100u64), BigInt::new([100, 0, 0, 0, 0, 0])); +} + +#[test] +fn test_fq_repr_is_odd() { + assert!(!BigInteger384::from(0u64).is_odd()); + assert!(BigInteger384::from(0u64).is_even()); + assert!(BigInteger384::from(1u64).is_odd()); + assert!(!BigInteger384::from(1u64).is_even()); + assert!(!BigInteger384::from(324834872u64).is_odd()); + assert!(BigInteger384::from(324834872u64).is_even()); + assert!(BigInteger384::from(324834873u64).is_odd()); + assert!(!BigInteger384::from(324834873u64).is_even()); +} + +#[test] +fn test_fq_repr_is_zero() { + assert!(BigInteger384::from(0u64).is_zero()); + assert!(!BigInteger384::from(1u64).is_zero()); + assert!(!BigInt::new([0, 0, 0, 0, 1, 0]).is_zero()); +} + +#[test] +fn test_fq_repr_num_bits() { + let mut a = BigInteger384::from(0u64); + assert_eq!(0, a.num_bits()); + a = BigInteger384::from(1u64); + for i in 1..385 { + assert_eq!(i, a.num_bits()); + a.mul2(); + } + assert_eq!(0, a.num_bits()); +} + +#[test] +fn test_fq_num_bits() { + assert_eq!(Fq::MODULUS_BIT_SIZE, 377); +} + +#[test] +fn test_fq_root_of_unity() { + assert_eq!(Fq::TWO_ADICITY, 46); + assert_eq!( + Fq::GENERATOR.pow([ + 0x7510c00000021423, + 0x88bee82520005c2d, + 0x67cc03d44e3c7bcd, + 0x1701b28524ec688b, + 0xe9185f1443ab18ec, + 0x6b8 + ]), + Fq::TWO_ADIC_ROOT_OF_UNITY + ); + assert_eq!( + Fq::TWO_ADIC_ROOT_OF_UNITY.pow([1 << Fq::TWO_ADICITY]), + Fq::one() + ); + assert!(Fq::GENERATOR.sqrt().is_none()); +} + +#[test] +fn test_fq_ordering() { + // BigInteger384's ordering is well-tested, but we still need to make sure the + // Fq elements aren't being compared in Montgomery form. + for i in 0..100u64 { + assert!(Fq::from(Fp384::from(i + 1)) > Fq::from(Fp384::from(i))); + } +} + +#[test] +fn test_fq_legendre() { + use ark_ff::fields::LegendreSymbol::*; + + assert_eq!(QuadraticResidue, Fq::one().legendre()); + assert_eq!(Zero, Fq::zero().legendre()); + assert_eq!(QuadraticResidue, Fq::from(Fp384::from(4u64)).legendre()); + assert_eq!(QuadraticNonResidue, Fq::from(Fp384::from(5u64)).legendre()); +} + +#[test] +fn test_fq2_ordering() { + let mut a = Fq2::new(Fq::zero(), Fq::zero()); + let mut b = a.clone(); + + assert!(a.cmp(&b) == Ordering::Equal); + b.c0.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Less); + a.c0.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Equal); + b.c1.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Less); + a.c0.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Less); + a.c1.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Greater); + b.c0.add_assign(&Fq::one()); + assert!(a.cmp(&b) == Ordering::Equal); +} + +#[test] +fn test_fq2_basics() { + assert_eq!(Fq2::new(Fq::zero(), Fq::zero(),), Fq2::zero()); + assert_eq!(Fq2::new(Fq::one(), Fq::zero(),), Fq2::one()); + assert!(Fq2::zero().is_zero()); + assert!(!Fq2::one().is_zero()); + assert!(!Fq2::new(Fq::zero(), Fq::one(),).is_zero()); +} + +#[test] +fn test_fq2_legendre() { + use ark_ff::fields::LegendreSymbol::*; + + assert_eq!(Zero, Fq2::zero().legendre()); + // i^2 = -1 + let mut m1 = -Fq2::one(); + assert_eq!(QuadraticResidue, m1.legendre()); + Fq6Config::mul_fp2_by_nonresidue_in_place(&mut m1); + assert_eq!(QuadraticNonResidue, m1.legendre()); +} + +#[test] +fn test_fq6_mul_by_1() { + let mut rng = test_rng(); + + for _ in 0..1000 { + let c1 = Fq2::rand(&mut rng); + let mut a = Fq6::rand(&mut rng); + let mut b = a; + + a.mul_by_1(&c1); + b.mul_assign(&Fq6::new(Fq2::zero(), c1, Fq2::zero())); + + assert_eq!(a, b); + } +} + +#[test] +fn test_fq6_mul_by_01() { + let mut rng = test_rng(); + + for _ in 0..1000 { + let c0 = Fq2::rand(&mut rng); + let c1 = Fq2::rand(&mut rng); + let mut a = Fq6::rand(&mut rng); + let mut b = a; + + a.mul_by_01(&c0, &c1); + b.mul_assign(&Fq6::new(c0, c1, Fq2::zero())); + + assert_eq!(a, b); + } +} + +#[test] +fn test_fq12_mul_by_014() { + let mut rng = test_rng(); + + for _ in 0..1000 { + let c0 = Fq2::rand(&mut rng); + let c1 = Fq2::rand(&mut rng); + let c5 = Fq2::rand(&mut rng); + let mut a = Fq12::rand(&mut rng); + let mut b = a; + + a.mul_by_014(&c0, &c1, &c5); + b.mul_assign(&Fq12::new( + Fq6::new(c0, c1, Fq2::zero()), + Fq6::new(Fq2::zero(), c5, Fq2::zero()), + )); + + assert_eq!(a, b); + } +} + +#[test] +fn test_fq12_mul_by_034() { + let mut rng = test_rng(); + + for _ in 0..1000 { + let c0 = Fq2::rand(&mut rng); + let c3 = Fq2::rand(&mut rng); + let c4 = Fq2::rand(&mut rng); + let mut a = Fq12::rand(&mut rng); + let mut b = a; + + a.mul_by_034(&c0, &c3, &c4); + b.mul_assign(&Fq12::new( + Fq6::new(c0, Fq2::zero(), Fq2::zero()), + Fq6::new(c3, c4, Fq2::zero()), + )); + + assert_eq!(a, b); + } +} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs new file mode 100755 index 0000000000000..207e08d9fd8be --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs @@ -0,0 +1,40 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![deny( + warnings, + unused, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +#![forbid(unsafe_code)] + +//! This library implements the BLS12_377 curve generated in [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). +//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree +//! 12, defined over a 377-bit (prime) field. The main feature of this curve is +//! that both the scalar field and the base field are highly 2-adic. +//! (This is in contrast to the BLS12_381 curve for which only the scalar field +//! is highly 2-adic.) +//! +//! +//! Curve information: +//! * Base field: q = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 +//! * Scalar field: r = +//! 8444461749428370424248824938781546531375899335154063827935233455917409239041 +//! * valuation(q - 1, 2) = 46 +//! * valuation(r - 1, 2) = 47 +//! * G1 curve equation: y^2 = x^3 + 1 +//! * G2 curve equation: y^2 = x^3 + B, where +//! * B = Fq2(0, 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906) + +#[cfg(feature = "curve")] +mod curves; + +mod fields; + +#[cfg(feature = "r1cs")] +pub mod constraints; + +#[cfg(feature = "curve")] +pub use curves::*; + +pub use fields::*; diff --git a/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml b/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml new file mode 100644 index 0000000000000..c411d170cf0e3 --- /dev/null +++ b/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "ark-curve-constraint-tests" +version = "0.4.0-alpha.1" +authors = [ "arkworks contributors" ] +description = "A library for testing constraints for finite fields, elliptic curves, and pairings" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-curve-constraint-tests/" +keywords = ["cryptography", "finite-fields", "elliptic-curves", "r1cs" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-ff = { version = "0.4.0-alpha", default-features = false } +ark-relations = { version = "0.4.0-alpha", default-features = false } +ark-r1cs-std = { version = "0.4.0-alpha", default-features = false } +ark-ec = { version = "0.4.0-alpha", default-features = false } + +[features] +default = [] +std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-relations/std", "ark-r1cs-std/std" ] diff --git a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE new file mode 120000 index 0000000000000..965b606f331b5 --- /dev/null +++ b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT new file mode 120000 index 0000000000000..76219eb72e852 --- /dev/null +++ b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs new file mode 100644 index 0000000000000..71af55562d5cb --- /dev/null +++ b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs @@ -0,0 +1,651 @@ +#![macro_use] +extern crate ark_relations; + +pub mod fields { + use ark_ff::{BitIteratorLE, Field, PrimeField, UniformRand}; + use ark_r1cs_std::prelude::*; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec}; + + pub fn field_test() -> Result<(), SynthesisError> + where + F: Field, + ConstraintF: PrimeField, + AF: FieldVar, + AF: TwoBitLookupGadget, + for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, + { + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + + let mut rng = test_rng(); + let a_native = F::rand(&mut rng); + let b_native = F::rand(&mut rng); + let a = AF::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode)?; + let b = AF::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode)?; + let b_const = AF::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; + + let zero = AF::zero(); + let zero_native = zero.value()?; + zero.enforce_equal(&zero)?; + + let one = AF::one(); + let one_native = one.value()?; + one.enforce_equal(&one)?; + + one.enforce_not_equal(&zero)?; + + let one_dup = &zero + &one; + one_dup.enforce_equal(&one)?; + + let two = &one + &one; + two.enforce_equal(&two)?; + two.enforce_equal(&one.double()?)?; + two.enforce_not_equal(&one)?; + two.enforce_not_equal(&zero)?; + + // a + 0 = a + let a_plus_zero = &a + &zero; + assert_eq!(a_plus_zero.value()?, a_native); + a_plus_zero.enforce_equal(&a)?; + a_plus_zero.enforce_not_equal(&a.double()?)?; + + // a - 0 = a + let a_minus_zero = &a - &zero; + assert_eq!(a_minus_zero.value()?, a_native); + a_minus_zero.enforce_equal(&a)?; + + // a - a = 0 + let a_minus_a = &a - &a; + assert_eq!(a_minus_a.value()?, zero_native); + a_minus_a.enforce_equal(&zero)?; + + // a + b = b + a + let a_b = &a + &b; + let b_a = &b + &a; + assert_eq!(a_b.value()?, a_native + &b_native); + a_b.enforce_equal(&b_a)?; + + // (a + b) + a = a + (b + a) + let ab_a = &a_b + &a; + let a_ba = &a + &b_a; + assert_eq!(ab_a.value()?, a_native + &b_native + &a_native); + ab_a.enforce_equal(&a_ba)?; + + let b_times_a_plus_b = &a_b * &b; + let b_times_b_plus_a = &b_a * &b; + assert_eq!( + b_times_a_plus_b.value()?, + b_native * &(b_native + &a_native) + ); + assert_eq!( + b_times_a_plus_b.value()?, + (b_native + &a_native) * &b_native + ); + assert_eq!( + b_times_a_plus_b.value()?, + (a_native + &b_native) * &b_native + ); + b_times_b_plus_a.enforce_equal(&b_times_a_plus_b)?; + + // a * 1 = a + assert_eq!((&a * &one).value()?, a_native * &one_native); + + // a * b = b * a + let ab = &a * &b; + let ba = &b * &a; + assert_eq!(ab.value()?, ba.value()?); + assert_eq!(ab.value()?, a_native * &b_native); + + let ab_const = &a * &b_const; + let b_const_a = &b_const * &a; + assert_eq!(ab_const.value()?, b_const_a.value()?); + assert_eq!(ab_const.value()?, ab.value()?); + assert_eq!(ab_const.value()?, a_native * &b_native); + + // (a * b) * a = a * (b * a) + let ab_a = &ab * &a; + let a_ba = &a * &ba; + assert_eq!(ab_a.value()?, a_ba.value()?); + assert_eq!(ab_a.value()?, a_native * &b_native * &a_native); + + let aa = &a * &a; + let a_squared = a.square()?; + a_squared.enforce_equal(&aa)?; + assert_eq!(aa.value()?, a_squared.value()?); + assert_eq!(aa.value()?, a_native.square()); + + let aa = &a * a_native; + a_squared.enforce_equal(&aa)?; + assert_eq!(aa.value()?, a_squared.value()?); + assert_eq!(aa.value()?, a_native.square()); + + let a_b2 = &a + b_native; + a_b.enforce_equal(&a_b2)?; + assert_eq!(a_b.value()?, a_b2.value()?); + + let a_inv = a.inverse()?; + a_inv.mul_equals(&a, &one)?; + assert_eq!(a_inv.value()?, a.value()?.inverse().unwrap()); + assert_eq!(a_inv.value()?, a_native.inverse().unwrap()); + + let a_b_inv = a.mul_by_inverse(&b)?; + a_b_inv.mul_equals(&b, &a)?; + assert_eq!(a_b_inv.value()?, a_native * b_native.inverse().unwrap()); + + // a * a * a = a^3 + let bits = BitIteratorLE::without_trailing_zeros([3u64]) + .map(Boolean::constant) + .collect::>(); + assert_eq!(a_native.pow([0x3]), a.pow_le(&bits)?.value()?); + + // a * a * a = a^3 + assert_eq!(a_native.pow([0x3]), a.pow_by_constant(&[0x3])?.value()?); + assert!(cs.is_satisfied().unwrap()); + + let mut constants = [F::zero(); 4]; + for c in &mut constants { + *c = UniformRand::rand(&mut test_rng()); + } + let bits = [ + Boolean::::constant(false), + Boolean::constant(true), + ]; + let lookup_result = AF::two_bit_lookup(&bits, constants.as_ref())?; + assert_eq!(lookup_result.value()?, constants[2]); + assert!(cs.is_satisfied().unwrap()); + + let f = F::from(1u128 << 64); + let f_bits = ark_ff::BitIteratorLE::new(&[0u64, 1u64]).collect::>(); + let fv = AF::new_variable(ark_relations::ns!(cs, "alloc u128"), || Ok(f), mode)?; + assert_eq!(fv.to_bits_le()?.value().unwrap()[..128], f_bits[..128]); + assert!(cs.is_satisfied().unwrap()); + + let r_native: F = UniformRand::rand(&mut test_rng()); + + let r = AF::new_variable(ark_relations::ns!(cs, "r_native"), || Ok(r_native), mode) + .unwrap(); + let _ = r.to_non_unique_bits_le()?; + assert!(cs.is_satisfied().unwrap()); + let _ = r.to_bits_le()?; + assert!(cs.is_satisfied().unwrap()); + + let ab_false = &a + (AF::from(Boolean::Constant(false)) * b_native); + let ab_true = &a + (AF::from(Boolean::Constant(true)) * b_native); + assert_eq!(ab_false.value()?, a_native); + assert_eq!(ab_true.value()?, a_native + &b_native); + + if !cs.is_satisfied().unwrap() { + panic!( + "Unsatisfied in mode {:?}.\n{:?}", + mode, + cs.which_is_unsatisfied().unwrap() + ); + } + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn frobenius_tests(maxpower: usize) -> Result<(), SynthesisError> + where + F: Field, + ConstraintF: Field, + AF: FieldVar, + for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, + { + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + let mut rng = test_rng(); + for i in 0..=maxpower { + let mut a = F::rand(&mut rng); + let mut a_gadget = AF::new_variable(ark_relations::ns!(cs, "a"), || Ok(a), mode)?; + a_gadget.frobenius_map_in_place(i)?; + a.frobenius_map(i); + + assert_eq!(a_gadget.value()?, a); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } +} + +pub mod curves { + use ark_ec::{ + short_weierstrass::Projective as SWProjective, twisted_edwards::Projective as TEProjective, + CurveGroup, Group, + }; + use ark_ff::{BitIteratorLE, Field, One, PrimeField}; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec, UniformRand}; + + use ark_r1cs_std::prelude::*; + + pub fn group_test() -> Result<(), SynthesisError> + where + C: CurveGroup, + ConstraintF: Field, + GG: CurveVar, + for<'a> &'a GG: GroupOpsBounds<'a, C, GG>, + { + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + + let mut rng = test_rng(); + let a_native = C::rand(&mut rng); + let b_native = C::rand(&mut rng); + let a = GG::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode) + .unwrap(); + let b = GG::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode) + .unwrap(); + + let zero = GG::zero(); + assert_eq!(zero.value()?, zero.value()?); + + // a == a + assert_eq!(a.value()?, a.value()?); + // a + 0 = a + assert_eq!((&a + &zero).value()?, a.value()?); + // a - 0 = a + assert_eq!((&a - &zero).value()?, a.value()?); + // a - a = 0 + assert_eq!((&a - &a).value()?, zero.value()?); + // a + b = b + a + let a_b = &a + &b; + let b_a = &b + &a; + assert_eq!(a_b.value()?, b_a.value()?); + a_b.enforce_equal(&b_a)?; + assert!(cs.is_satisfied().unwrap()); + + // (a + b) + a = a + (b + a) + let ab_a = &a_b + &a; + let a_ba = &a + &b_a; + assert_eq!(ab_a.value()?, a_ba.value()?); + ab_a.enforce_equal(&a_ba)?; + assert!(cs.is_satisfied().unwrap()); + + // a.double() = a + a + let a_a = &a + &a; + let mut a2 = a.clone(); + a2.double_in_place()?; + a2.enforce_equal(&a_a)?; + assert_eq!(a2.value()?, a_native.double()); + assert_eq!(a_a.value()?, a_native.double()); + assert_eq!(a2.value()?, a_a.value()?); + assert!(cs.is_satisfied().unwrap()); + + // b.double() = b + b + let mut b2 = b.clone(); + b2.double_in_place()?; + let b_b = &b + &b; + b2.enforce_equal(&b_b)?; + assert!(cs.is_satisfied().unwrap()); + assert_eq!(b2.value()?, b_b.value()?); + + let _ = a.to_bytes()?; + assert!(cs.is_satisfied().unwrap()); + let _ = a.to_non_unique_bytes()?; + assert!(cs.is_satisfied().unwrap()); + + let _ = b.to_bytes()?; + let _ = b.to_non_unique_bytes()?; + if !cs.is_satisfied().unwrap() { + panic!( + "Unsatisfied in mode {:?}.\n{:?}", + mode, + cs.which_is_unsatisfied().unwrap() + ); + } + assert!(cs.is_satisfied().unwrap()); + + let modulus = ::MODULUS.as_ref().to_vec(); + let mut max = modulus.clone(); + for limb in &mut max { + *limb = u64::MAX; + } + + let modulus_num_bits_mod_64 = ::MODULUS_BIT_SIZE % 64; + if modulus_num_bits_mod_64 != 0 { + *max.last_mut().unwrap() >>= 64 - modulus_num_bits_mod_64; + } + let scalars = [ + C::ScalarField::rand(&mut rng) + .into_bigint() + .as_ref() + .to_vec(), + vec![u64::rand(&mut rng)], + (-C::ScalarField::one()).into_bigint().as_ref().to_vec(), + ::MODULUS.as_ref().to_vec(), + max, + vec![0; 50], + vec![1000012341233u64; 36], + ]; + + let mut input = vec![]; + + // Check scalar mul with edge cases + for scalar in scalars.iter() { + let native_result = a_native.mul_bigint(scalar); + let native_result = native_result.into_affine(); + + let scalar_bits: Vec = BitIteratorLE::new(&scalar).collect(); + input = + Vec::new_witness(ark_relations::ns!(cs, "bits"), || Ok(scalar_bits)).unwrap(); + let result = a + .scalar_mul_le(input.iter()) + .expect(&format!("Mode: {:?}", mode)); + let result_val = result.value()?.into_affine(); + assert_eq!( + result_val, native_result, + "gadget & native values are diff. after scalar mul {:?}", + scalar, + ); + assert!(cs.is_satisfied().unwrap()); + } + + let result = zero.scalar_mul_le(input.iter())?; + let result_val = result.value()?.into_affine(); + result.enforce_equal(&zero)?; + assert_eq!( + result_val, + C::zero().into_affine(), + "gadget & native values are diff. after scalar mul of zero" + ); + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn sw_test() -> Result<(), SynthesisError> + where + P: ark_ec::models::short_weierstrass::SWCurveConfig, + GG: CurveVar, ::BasePrimeField>, + for<'a> &'a GG: GroupOpsBounds<'a, SWProjective

, GG>, + { + group_test::, _, GG>()?; + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let mut rng = test_rng(); + + let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); + + let a = SWProjective::

::rand(&mut rng); + let b = SWProjective::

::rand(&mut rng); + let a_affine = a.into_affine(); + let b_affine = b.into_affine(); + + let ns = ark_relations::ns!(cs, "allocating variables"); + let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; + let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; + let zero = GG::zero(); + drop(ns); + assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); + assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); + assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); + assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); + assert_eq!(cs.which_is_unsatisfied().unwrap(), None); + + // Check addition + let ab = a + &b; + let ab_affine = ab.into_affine(); + let gadget_ab = &gadget_a + &gadget_b; + let gadget_ba = &gadget_b + &gadget_a; + gadget_ba.enforce_equal(&gadget_ab)?; + + let ab_val = gadget_ab.value()?.into_affine(); + assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); + assert!(cs.is_satisfied().unwrap()); + + let gadget_a_zero = &gadget_a + &zero; + gadget_a_zero.enforce_equal(&gadget_a)?; + + // Check doubling + let aa = &a.double(); + let aa_affine = aa.into_affine(); + gadget_a.double_in_place()?; + let aa_val = gadget_a.value()?.into_affine(); + assert_eq!( + aa_val, aa_affine, + "Gadget and native values are unequal after double." + ); + assert!(cs.is_satisfied().unwrap()); + + if !cs.is_satisfied().unwrap() { + panic!( + "Unsatisfied in mode {:?}.\n{:?}", + mode, + cs.which_is_unsatisfied().unwrap() + ); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn te_test() -> Result<(), SynthesisError> + where + P: ark_ec::twisted_edwards::TECurveConfig, + GG: CurveVar, ::BasePrimeField>, + for<'a> &'a GG: GroupOpsBounds<'a, TEProjective

, GG>, + { + group_test::, _, GG>()?; + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let mut rng = test_rng(); + + let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); + + let a = TEProjective::

::rand(&mut rng); + let b = TEProjective::

::rand(&mut rng); + let a_affine = a.into_affine(); + let b_affine = b.into_affine(); + + let ns = ark_relations::ns!(cs, "allocating variables"); + let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; + let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; + drop(ns); + + assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); + assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); + assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); + assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); + assert_eq!(cs.which_is_unsatisfied()?, None); + + // Check addition + let ab = a + &b; + let ab_affine = ab.into_affine(); + let gadget_ab = &gadget_a + &gadget_b; + let gadget_ba = &gadget_b + &gadget_a; + gadget_ba.enforce_equal(&gadget_ab)?; + + let ab_val = gadget_ab.value()?.into_affine(); + assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); + assert!(cs.is_satisfied().unwrap()); + + // Check doubling + let aa = &a.double(); + let aa_affine = aa.into_affine(); + gadget_a.double_in_place()?; + let aa_val = gadget_a.value()?.into_affine(); + assert_eq!( + aa_val, aa_affine, + "Gadget and native values are unequal after double." + ); + assert!(cs.is_satisfied().unwrap()); + + if !cs.is_satisfied().unwrap() { + panic!( + "Unsatisfied in mode {:?}.\n{:?}", + mode, + cs.which_is_unsatisfied().unwrap() + ); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } +} + +pub mod pairing { + use ark_ec::{ + pairing::{Pairing, PairingOutput}, + AffineRepr, CurveGroup, + }; + use ark_ff::{BitIteratorLE, Field, PrimeField}; + use ark_r1cs_std::prelude::*; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec, UniformRand}; + + #[allow(dead_code)] + pub fn bilinearity_test>() -> Result<(), SynthesisError> + where + for<'a> &'a P::G1Var: GroupOpsBounds<'a, E::G1, P::G1Var>, + for<'a> &'a P::G2Var: GroupOpsBounds<'a, E::G2, P::G2Var>, + for<'a> &'a P::GTVar: FieldOpsBounds<'a, E::TargetField, P::GTVar>, + { + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::<::BaseField>::new_ref(); + + let mut rng = test_rng(); + let a = E::G1::rand(&mut rng); + let b = E::G2::rand(&mut rng); + let s = E::ScalarField::rand(&mut rng); + + let mut sa = a; + sa *= s; + let mut sb = b; + sb *= s; + + let a_g = P::G1Var::new_variable(cs.clone(), || Ok(a.into_affine()), mode)?; + let b_g = P::G2Var::new_variable(cs.clone(), || Ok(b.into_affine()), mode)?; + let sa_g = P::G1Var::new_variable(cs.clone(), || Ok(sa.into_affine()), mode)?; + let sb_g = P::G2Var::new_variable(cs.clone(), || Ok(sb.into_affine()), mode)?; + + let mut _preparation_num_constraints = cs.num_constraints(); + let a_prep_g = P::prepare_g1(&a_g)?; + let b_prep_g = P::prepare_g2(&b_g)?; + _preparation_num_constraints = cs.num_constraints() - _preparation_num_constraints; + + let sa_prep_g = P::prepare_g1(&sa_g)?; + let sb_prep_g = P::prepare_g2(&sb_g)?; + + let (ans1_g, ans1_n) = { + let _ml_constraints = cs.num_constraints(); + let ml_g = P::miller_loop(&[sa_prep_g], &[b_prep_g.clone()])?; + let _fe_constraints = cs.num_constraints(); + let ans_g = P::final_exponentiation(&ml_g)?; + let ans_n = E::pairing(sa, b); + (ans_g, ans_n) + }; + + let (ans2_g, ans2_n) = { + let ans_g = P::pairing(a_prep_g.clone(), sb_prep_g)?; + let ans_n = E::pairing(a, sb); + (ans_g, ans_n) + }; + + let (ans3_g, ans3_n) = { + let s_iter = BitIteratorLE::without_trailing_zeros(s.into_bigint()) + .map(Boolean::constant) + .collect::>(); + + let mut ans_g = P::pairing(a_prep_g, b_prep_g)?; + let mut ans_n = E::pairing(a, b); + ans_n = PairingOutput(ans_n.0.pow(s.into_bigint())); + ans_g = ans_g.pow_le(&s_iter)?; + + (ans_g, ans_n) + }; + + ans1_g.enforce_equal(&ans2_g)?; + ans2_g.enforce_equal(&ans3_g)?; + + assert_eq!(ans1_g.value()?, ans1_n.0, "Failed native test 1"); + assert_eq!(ans2_g.value()?, ans2_n.0, "Failed native test 2"); + assert_eq!(ans3_g.value()?, ans3_n.0, "Failed native test 3"); + + assert_eq!(ans1_n.0, ans2_n.0, "Failed ans1_native == ans2_native"); + assert_eq!(ans2_n.0, ans3_n.0, "Failed ans2_native == ans3_native"); + assert_eq!(ans1_g.value()?, ans3_g.value()?, "Failed ans1 == ans3"); + assert_eq!(ans1_g.value()?, ans2_g.value()?, "Failed ans1 == ans2"); + assert_eq!(ans2_g.value()?, ans3_g.value()?, "Failed ans2 == ans3"); + + if !cs.is_satisfied().unwrap() { + panic!( + "Unsatisfied in mode {:?}.\n{:?}", + mode, + cs.which_is_unsatisfied().unwrap() + ); + } + + assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); + } + Ok(()) + } + + #[allow(dead_code)] + pub fn g2_prepare_consistency_test>() -> Result<(), SynthesisError> + { + let test_g2_elem = E::G2Affine::generator(); + let test_g2_prepared = E::G2Prepared::from(test_g2_elem.clone()); + + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::new_ref(); + + let test_g2_gadget = + P::G2Var::new_witness(cs.clone(), || Ok(test_g2_elem.clone())).unwrap(); + + let prepared_test_g2_gadget = P::prepare_g2(&test_g2_gadget).unwrap(); + let allocated_test_g2_gadget = + P::G2PreparedVar::new_variable(cs.clone(), || Ok(test_g2_prepared.clone()), mode) + .unwrap(); + + let prepared_test_g2_gadget_bytes = prepared_test_g2_gadget.to_bytes().unwrap(); + let allocated_test_g2_gadget_bytes = allocated_test_g2_gadget.to_bytes().unwrap(); + + prepared_test_g2_gadget_bytes + .enforce_equal(&allocated_test_g2_gadget_bytes) + .unwrap(); + + assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); + } + Ok(()) + } +} From 634803157ff69bc14c94552250f6fe1f9e72d01a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 11:06:46 +0100 Subject: [PATCH 036/364] bls12_377 deep link fields --- Cargo.lock | 1 + .../ark_sub_bls12_377/Cargo.toml | 1 + .../ark_sub_bls12_377/src/fields/fq.rs | 7 - .../ark_sub_bls12_377/src/fields/fq12.rs | 74 ------ .../ark_sub_bls12_377/src/fields/fq2.rs | 51 ----- .../ark_sub_bls12_377/src/fields/fq6.rs | 79 ------- .../ark_sub_bls12_377/src/fields/fr.rs | 27 --- .../ark_sub_bls12_377/src/fields/mod.rs | 27 --- .../ark_sub_bls12_377/src/fields/tests.rs | 216 ------------------ .../ark_sub_bls12_377/src/lib.rs | 7 +- 10 files changed, 5 insertions(+), 485 deletions(-) delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs delete mode 100644 primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs diff --git a/Cargo.lock b/Cargo.lock index 140388445ff10..c45e238b2dd69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -386,6 +386,7 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ + "ark-bls12-377", "ark-ec", "ark-ff", "ark-r1cs-std", diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml index 58e39eca88889..f440b80ac5efb 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml @@ -17,6 +17,7 @@ ark-ff = { version="0.4.0-alpha", default-features = false } ark-ec = { version="0.4.0-alpha", default-features = false } ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } +ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } [features] default = [ "curve" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs deleted file mode 100644 index 30744c63499cd..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq.rs +++ /dev/null @@ -1,7 +0,0 @@ -use ark_ff::fields::{Fp384, MontBackend, MontConfig}; - -#[derive(MontConfig)] -#[modulus = "258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177"] -#[generator = "15"] -pub struct FqConfig; -pub type Fq = Fp384>; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs deleted file mode 100644 index e1390724062be..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq12.rs +++ /dev/null @@ -1,74 +0,0 @@ -use ark_ff::{fields::*, MontFp}; - -use crate::*; - -pub type Fq12 = Fp12; - -#[derive(Clone, Copy)] -pub struct Fq12Config; - -impl Fp12Config for Fq12Config { - type Fp6Config = Fq6Config; - - const NONRESIDUE: Fq6 = Fq6::new(Fq2::ZERO, Fq2::ONE, Fq2::ZERO); - - const FROBENIUS_COEFF_FP12_C1: &'static [Fq2] = &[ - // Fp2::NONRESIDUE^(((q^0) - 1) / 6) - Fq2::new(Fq::ONE, Fq::ZERO), - // Fp2::NONRESIDUE^(((q^1) - 1) / 6) - Fq2::new( - MontFp!("92949345220277864758624960506473182677953048909283248980960104381795901929519566951595905490535835115111760994353"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^2) - 1) / 6) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410946"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^3) - 1) / 6) - Fq2::new( - MontFp!("216465761340224619389371505802605247630151569547285782856803747159100223055385581585702401816380679166954762214499"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^4) - 1) / 6) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^5) - 1) / 6) - Fq2::new( - MontFp!("123516416119946754630746545296132064952198520638002533875843642777304321125866014634106496325844844051843001220146"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^6) - 1) / 6) - Fq2::new( - MontFp!("-1"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^7) - 1) / 6) - Fq2::new( - MontFp!("165715080792691229252027773188420350858440463845631411558924158284924566418821255823372982649037525009328560463824"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^8) - 1) / 6) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^9) - 1) / 6) - Fq2::new( - MontFp!("42198664672744474621281227892288285906241943207628877683080515507620245292955241189266486323192680957485559243678"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^10) - 1) / 6) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047232"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^11) - 1) / 6) - Fq2::new( - MontFp!("135148009893022339379906188398761468584194992116912126664040619889416147222474808140862391813728516072597320238031"), - Fq::ZERO, - ), - ]; -} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs deleted file mode 100644 index 60d38884d60d2..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq2.rs +++ /dev/null @@ -1,51 +0,0 @@ -use ark_ff::{fields::*, MontFp}; - -use crate::*; - -pub type Fq2 = Fp2; - -pub struct Fq2Config; - -impl Fp2Config for Fq2Config { - type Fp = Fq; - - /// NONRESIDUE = -5 - const NONRESIDUE: Fq = MontFp!("-5"); - - /// Coefficients for the Frobenius automorphism. - const FROBENIUS_COEFF_FP2_C1: &'static [Fq] = &[ - // NONRESIDUE**(((q^0) - 1) / 2) - Fq::ONE, - // NONRESIDUE**(((q^1) - 1) / 2) - MontFp!("-1"), - ]; - - #[inline(always)] - fn mul_fp_by_nonresidue_in_place(fe: &mut Self::Fp) -> &mut Self::Fp { - fe.neg_in_place(); - *fe = *fe + fe.double_in_place().double_in_place(); - fe - } - - #[inline(always)] - fn sub_and_mul_fp_by_nonresidue(y: &mut Self::Fp, x: &Self::Fp) { - let mut original = *y; - original += x; - y.double_in_place().double_in_place(); - *y += original; - } - - #[inline(always)] - fn mul_fp_by_nonresidue_plus_one_and_add(y: &mut Self::Fp, x: &Self::Fp) { - y.double_in_place().double_in_place().neg_in_place(); - *y += x; - } - - fn mul_fp_by_nonresidue_and_add(y: &mut Self::Fp, x: &Self::Fp) { - let mut original = *y; - original.double_in_place().double_in_place(); - original += &*y; - *y = *x; - *y -= original; - } -} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs deleted file mode 100644 index bafab308741c7..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fq6.rs +++ /dev/null @@ -1,79 +0,0 @@ -use ark_ff::{fields::*, MontFp}; - -use crate::*; - -pub type Fq6 = Fp6; - -#[derive(Clone, Copy)] -pub struct Fq6Config; - -impl Fp6Config for Fq6Config { - type Fp2Config = Fq2Config; - - /// NONRESIDUE = U - const NONRESIDUE: Fq2 = Fq2::new(Fq::ZERO, Fq::ONE); - - const FROBENIUS_COEFF_FP6_C1: &'static [Fq2] = &[ - // Fp2::NONRESIDUE^(((q^0) - 1) / 3) - Fq2::new(Fq::ONE, Fq::ZERO), - // Fp2::NONRESIDUE^(((q^1) - 1) / 3) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410946"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^2) - 1) / 3) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^3) - 1) / 3) - Fq2::new(MontFp!("-1"), Fq::ZERO), - // Fp2::NONRESIDUE^(((q^4) - 1) / 3) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^(((q^5) - 1) / 3) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047232"), - Fq::ZERO, - ), - ]; - - const FROBENIUS_COEFF_FP6_C2: &'static [Fq2] = &[ - // Fp2::NONRESIDUE^((2*(q^0) - 2) / 3) - Fq2::new(Fq::ONE, Fq::ZERO), - // Fp2::NONRESIDUE^((2*(q^1) - 2) / 3) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), - Fq::ZERO - ), - // Fp2::NONRESIDUE^((2*(q^2) - 2) / 3) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^((2*(q^3) - 2) / 3) - Fq2::new(Fq::ONE, Fq::ZERO), - // Fp2::NONRESIDUE^((2*(q^4) - 2) / 3) - Fq2::new( - MontFp!("80949648264912719408558363140637477264845294720710499478137287262712535938301461879813459410945"), - Fq::ZERO, - ), - // Fp2::NONRESIDUE^((2*(q^5) - 2) / 3) - Fq2::new( - MontFp!("258664426012969093929703085429980814127835149614277183275038967946009968870203535512256352201271898244626862047231"), - Fq::ZERO, - ), - ]; - - #[inline(always)] - fn mul_fp2_by_nonresidue_in_place(fe: &mut Fq2) -> &mut Fq2 { - // Karatsuba multiplication with constant other = u. - let old_c0 = fe.c0; - fe.c0 = fe.c1; - Fq2Config::mul_fp_by_nonresidue_in_place(&mut fe.c0); - fe.c1 = old_c0; - fe - } -} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs deleted file mode 100644 index 7fb498c4cfad1..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/fr.rs +++ /dev/null @@ -1,27 +0,0 @@ -//! Bls12-377 scalar field. -/// Roots of unity computed from modulus and R using this sage code: -/// -/// ```ignore -/// q = 8444461749428370424248824938781546531375899335154063827935233455917409239041 -/// R = 6014086494747379908336260804527802945383293308637734276299549080986809532403 # Montgomery R -/// s = 47 -/// o = q - 1 -/// F = GF(q) -/// g = F.multiplicative_generator() -/// g = F.multiplicative_generator() -/// assert g.multiplicative_order() == o -/// g2 = g ** (o/2**s) -/// assert g2.multiplicative_order() == 2**s -/// def into_chunks(val, width, n): -/// return [int(int(val) // (2 ** (width * i)) % 2 ** width) for i in range(n)] -/// print("Gen: ", g * R % q) -/// print("Gen: ", into_chunks(g * R % q, 64, 4)) -/// print("2-adic gen: ", into_chunks(g2 * R % q, 64, 4)) -/// ``` -use ark_ff::fields::{Fp256, MontBackend, MontConfig}; - -#[derive(MontConfig)] -#[modulus = "8444461749428370424248824938781546531375899335154063827935233455917409239041"] -#[generator = "22"] -pub struct FrConfig; -pub type Fr = Fp256>; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs deleted file mode 100644 index 401c07b570c93..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/mod.rs +++ /dev/null @@ -1,27 +0,0 @@ -#[cfg(feature = "scalar_field")] -pub mod fr; -#[cfg(feature = "scalar_field")] -pub use self::fr::*; - -#[cfg(feature = "base_field")] -pub mod fq; -#[cfg(feature = "base_field")] -pub use self::fq::*; - -#[cfg(feature = "curve")] -pub mod fq2; -#[cfg(feature = "curve")] -pub use self::fq2::*; - -#[cfg(feature = "curve")] -pub mod fq6; -#[cfg(feature = "curve")] -pub use self::fq6::*; - -#[cfg(feature = "curve")] -pub mod fq12; -#[cfg(feature = "curve")] -pub use self::fq12::*; - -#[cfg(all(feature = "curve", test))] -mod tests; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs deleted file mode 100644 index 44c22ece276a4..0000000000000 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/fields/tests.rs +++ /dev/null @@ -1,216 +0,0 @@ -use ark_algebra_test_templates::*; -use ark_ff::{ - biginteger::{BigInt, BigInteger, BigInteger384}, - fields::{FftField, Field, Fp6Config, PrimeField}, - Fp384, One, UniformRand, Zero, -}; -use ark_std::{ - cmp::Ordering, - ops::{AddAssign, MulAssign}, - test_rng, -}; - -use crate::{Fq, Fq12, Fq2, Fq6, Fq6Config, Fr}; - -test_field!(fr; Fr; mont_prime_field); -test_field!(fq; Fq; mont_prime_field); -test_field!(fq2; Fq2); -test_field!(fq6; Fq6); -test_field!(fq12; Fq12); - -#[test] -fn test_fq_repr_from() { - assert_eq!(BigInt::from(100u64), BigInt::new([100, 0, 0, 0, 0, 0])); -} - -#[test] -fn test_fq_repr_is_odd() { - assert!(!BigInteger384::from(0u64).is_odd()); - assert!(BigInteger384::from(0u64).is_even()); - assert!(BigInteger384::from(1u64).is_odd()); - assert!(!BigInteger384::from(1u64).is_even()); - assert!(!BigInteger384::from(324834872u64).is_odd()); - assert!(BigInteger384::from(324834872u64).is_even()); - assert!(BigInteger384::from(324834873u64).is_odd()); - assert!(!BigInteger384::from(324834873u64).is_even()); -} - -#[test] -fn test_fq_repr_is_zero() { - assert!(BigInteger384::from(0u64).is_zero()); - assert!(!BigInteger384::from(1u64).is_zero()); - assert!(!BigInt::new([0, 0, 0, 0, 1, 0]).is_zero()); -} - -#[test] -fn test_fq_repr_num_bits() { - let mut a = BigInteger384::from(0u64); - assert_eq!(0, a.num_bits()); - a = BigInteger384::from(1u64); - for i in 1..385 { - assert_eq!(i, a.num_bits()); - a.mul2(); - } - assert_eq!(0, a.num_bits()); -} - -#[test] -fn test_fq_num_bits() { - assert_eq!(Fq::MODULUS_BIT_SIZE, 377); -} - -#[test] -fn test_fq_root_of_unity() { - assert_eq!(Fq::TWO_ADICITY, 46); - assert_eq!( - Fq::GENERATOR.pow([ - 0x7510c00000021423, - 0x88bee82520005c2d, - 0x67cc03d44e3c7bcd, - 0x1701b28524ec688b, - 0xe9185f1443ab18ec, - 0x6b8 - ]), - Fq::TWO_ADIC_ROOT_OF_UNITY - ); - assert_eq!( - Fq::TWO_ADIC_ROOT_OF_UNITY.pow([1 << Fq::TWO_ADICITY]), - Fq::one() - ); - assert!(Fq::GENERATOR.sqrt().is_none()); -} - -#[test] -fn test_fq_ordering() { - // BigInteger384's ordering is well-tested, but we still need to make sure the - // Fq elements aren't being compared in Montgomery form. - for i in 0..100u64 { - assert!(Fq::from(Fp384::from(i + 1)) > Fq::from(Fp384::from(i))); - } -} - -#[test] -fn test_fq_legendre() { - use ark_ff::fields::LegendreSymbol::*; - - assert_eq!(QuadraticResidue, Fq::one().legendre()); - assert_eq!(Zero, Fq::zero().legendre()); - assert_eq!(QuadraticResidue, Fq::from(Fp384::from(4u64)).legendre()); - assert_eq!(QuadraticNonResidue, Fq::from(Fp384::from(5u64)).legendre()); -} - -#[test] -fn test_fq2_ordering() { - let mut a = Fq2::new(Fq::zero(), Fq::zero()); - let mut b = a.clone(); - - assert!(a.cmp(&b) == Ordering::Equal); - b.c0.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Less); - a.c0.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Equal); - b.c1.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Less); - a.c0.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Less); - a.c1.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Greater); - b.c0.add_assign(&Fq::one()); - assert!(a.cmp(&b) == Ordering::Equal); -} - -#[test] -fn test_fq2_basics() { - assert_eq!(Fq2::new(Fq::zero(), Fq::zero(),), Fq2::zero()); - assert_eq!(Fq2::new(Fq::one(), Fq::zero(),), Fq2::one()); - assert!(Fq2::zero().is_zero()); - assert!(!Fq2::one().is_zero()); - assert!(!Fq2::new(Fq::zero(), Fq::one(),).is_zero()); -} - -#[test] -fn test_fq2_legendre() { - use ark_ff::fields::LegendreSymbol::*; - - assert_eq!(Zero, Fq2::zero().legendre()); - // i^2 = -1 - let mut m1 = -Fq2::one(); - assert_eq!(QuadraticResidue, m1.legendre()); - Fq6Config::mul_fp2_by_nonresidue_in_place(&mut m1); - assert_eq!(QuadraticNonResidue, m1.legendre()); -} - -#[test] -fn test_fq6_mul_by_1() { - let mut rng = test_rng(); - - for _ in 0..1000 { - let c1 = Fq2::rand(&mut rng); - let mut a = Fq6::rand(&mut rng); - let mut b = a; - - a.mul_by_1(&c1); - b.mul_assign(&Fq6::new(Fq2::zero(), c1, Fq2::zero())); - - assert_eq!(a, b); - } -} - -#[test] -fn test_fq6_mul_by_01() { - let mut rng = test_rng(); - - for _ in 0..1000 { - let c0 = Fq2::rand(&mut rng); - let c1 = Fq2::rand(&mut rng); - let mut a = Fq6::rand(&mut rng); - let mut b = a; - - a.mul_by_01(&c0, &c1); - b.mul_assign(&Fq6::new(c0, c1, Fq2::zero())); - - assert_eq!(a, b); - } -} - -#[test] -fn test_fq12_mul_by_014() { - let mut rng = test_rng(); - - for _ in 0..1000 { - let c0 = Fq2::rand(&mut rng); - let c1 = Fq2::rand(&mut rng); - let c5 = Fq2::rand(&mut rng); - let mut a = Fq12::rand(&mut rng); - let mut b = a; - - a.mul_by_014(&c0, &c1, &c5); - b.mul_assign(&Fq12::new( - Fq6::new(c0, c1, Fq2::zero()), - Fq6::new(Fq2::zero(), c5, Fq2::zero()), - )); - - assert_eq!(a, b); - } -} - -#[test] -fn test_fq12_mul_by_034() { - let mut rng = test_rng(); - - for _ in 0..1000 { - let c0 = Fq2::rand(&mut rng); - let c3 = Fq2::rand(&mut rng); - let c4 = Fq2::rand(&mut rng); - let mut a = Fq12::rand(&mut rng); - let mut b = a; - - a.mul_by_034(&c0, &c3, &c4); - b.mul_assign(&Fq12::new( - Fq6::new(c0, Fq2::zero(), Fq2::zero()), - Fq6::new(c3, c4, Fq2::zero()), - )); - - assert_eq!(a, b); - } -} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs index 207e08d9fd8be..fae1f702bd18b 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs @@ -1,7 +1,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![deny( - warnings, - unused, + // warnings, + // unused, future_incompatible, nonstandard_style, rust_2018_idioms @@ -29,12 +29,11 @@ #[cfg(feature = "curve")] mod curves; -mod fields; #[cfg(feature = "r1cs")] pub mod constraints; #[cfg(feature = "curve")] pub use curves::*; +pub use ark_bls12_377::{Fq2Config, Fq6Config, Fq12Config, Fq, Fq2, Fr}; -pub use fields::*; From 9ad62f334d59a82bc22158299cc416ab6047f529 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 14:59:02 +0100 Subject: [PATCH 037/364] miller_loop, final_exp through host_functions --- Cargo.lock | 3 + .../ark_sub_bls12_377/Cargo.toml | 5 ++ .../ark_sub_bls12_377/benches/bls12_377.rs | 18 ++-- .../src/constraints/curves.rs | 20 ++--- .../src/constraints/fields.rs | 22 ++--- .../src/constraints/pairing.rs | 8 +- .../ark_sub_bls12_377/src/curves/g1.rs | 82 +++++++++---------- .../ark_sub_bls12_377/src/curves/g2.rs | 56 ++++++------- .../ark_sub_bls12_377/src/curves/mod.rs | 82 ++++++++++++++++--- .../ark_sub_bls12_377/src/lib.rs | 7 +- .../ark_sub_bls12_381/src/curves/mod.rs | 3 +- primitives/arkworks-models/src/lib.rs | 2 +- 12 files changed, 184 insertions(+), 124 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c45e238b2dd69..ad5ece668fb80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -389,8 +389,11 @@ dependencies = [ "ark-bls12-377", "ark-ec", "ark-ff", + "ark-models", "ark-r1cs-std", + "ark-serialize", "ark-std 0.4.0-alpha", + "sp-io", ] [[package]] diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml index f440b80ac5efb..e12e4b59962a8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml @@ -17,7 +17,12 @@ ark-ff = { version="0.4.0-alpha", default-features = false } ark-ec = { version="0.4.0-alpha", default-features = false } ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0-alpha", default-features = false } + ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-models = { path = "../../arkworks-models" } +sp-io = { path = "../../io" } + [features] default = [ "curve" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs b/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs index 7bb18ab0c6d03..73a661c990ec8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs @@ -1,16 +1,16 @@ use ark_algebra_bench_templates::*; use ark_bls12_377::{ - fq::Fq, fq2::Fq2, fr::Fr, Bls12_377, Fq12, G1Projective as G1, G2Projective as G2, + fq::Fq, fq2::Fq2, fr::Fr, Bls12_377, Fq12, G1Projective as G1, G2Projective as G2, }; bench!( - Name = "Bls12_377", - Pairing = Bls12_377, - G1 = G1, - G2 = G2, - ScalarField = Fr, - G1BaseField = Fq, - G2BaseField = Fq2, - TargetField = Fq12, + Name = "Bls12_377", + Pairing = Bls12_377, + G1 = G1, + G2 = G2, + ScalarField = Fr, + G1BaseField = Fq, + G2BaseField = Fq2, + TargetField = Fq12, ); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs index 07b4b9342b67b..90ab32ffc418f 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs @@ -1,7 +1,7 @@ use ark_ec::{bls12::Bls12Config, CurveConfig}; use ark_r1cs_std::{ - fields::fp::FpVar, - groups::{bls12, curves::twisted_edwards::AffineVar as TEAffineVar}, + fields::fp::FpVar, + groups::{bls12, curves::twisted_edwards::AffineVar as TEAffineVar}, }; use crate::Config; @@ -13,8 +13,8 @@ pub type G2Var = bls12::G2Var; /// An element of G1 (in TE Affine form) in the BLS12-377 bilinear group. pub type G1TEAffineVar = TEAffineVar< - ::G1Config, - FpVar<<::G1Config as CurveConfig>::BaseField>, + ::G1Config, + FpVar<<::G1Config as CurveConfig>::BaseField>, >; /// Represents the cached precomputation that can be performed on a G1 element @@ -26,14 +26,14 @@ pub type G2PreparedVar = bls12::G2PreparedVar; #[test] fn test() { - use ark_ec::models::bls12::Bls12Config; - ark_curve_constraint_tests::curves::sw_test::<::G1Config, G1Var>() - .unwrap(); - ark_curve_constraint_tests::curves::te_test::< + use ark_ec::models::bls12::Bls12Config; + ark_curve_constraint_tests::curves::sw_test::<::G1Config, G1Var>() + .unwrap(); + ark_curve_constraint_tests::curves::te_test::< ::G1Config, G1TEAffineVar, >() .unwrap(); - ark_curve_constraint_tests::curves::sw_test::<::G2Config, G2Var>() - .unwrap(); + ark_curve_constraint_tests::curves::sw_test::<::G2Config, G2Var>() + .unwrap(); } diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs index b3d883ce893c1..2aa2c3b684b78 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs @@ -14,19 +14,19 @@ pub type Fq12Var = Fp12Var; #[test] fn bls12_377_field_test() { - use super::*; - use crate::{Fq, Fq12, Fq2, Fq6}; - use ark_curve_constraint_tests::fields::*; + use super::*; + use crate::{Fq, Fq12, Fq2, Fq6}; + use ark_curve_constraint_tests::fields::*; - field_test::<_, _, FqVar>().unwrap(); - frobenius_tests::(13).unwrap(); + field_test::<_, _, FqVar>().unwrap(); + frobenius_tests::(13).unwrap(); - field_test::<_, _, Fq2Var>().unwrap(); - frobenius_tests::(13).unwrap(); + field_test::<_, _, Fq2Var>().unwrap(); + frobenius_tests::(13).unwrap(); - field_test::<_, _, Fq6Var>().unwrap(); - frobenius_tests::(13).unwrap(); + field_test::<_, _, Fq6Var>().unwrap(); + frobenius_tests::(13).unwrap(); - field_test::<_, _, Fq12Var>().unwrap(); - frobenius_tests::(13).unwrap(); + field_test::<_, _, Fq12Var>().unwrap(); + frobenius_tests::(13).unwrap(); } diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs index 95dcc905d4026..3832cc08e954c 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs @@ -6,8 +6,8 @@ pub type PairingVar = ark_r1cs_std::pairing::bls12::PairingVar; #[test] fn test() { - use crate::Bls12_377; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); - ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() - .unwrap(); + use crate::Bls12_377; + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); } diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index f7f6103957f39..203d5877a8d1d 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -1,11 +1,11 @@ -use ark_ec::models::{ - short_weierstrass::{Affine as SWAffine, SWCurveConfig}, - twisted_edwards::{ - Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, - }, - CurveConfig, -}; use ark_ff::{Field, MontFp, Zero}; +use ark_models::models::{ + short_weierstrass::{Affine as SWAffine, SWCurveConfig}, + twisted_edwards::{ + Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, + }, + CurveConfig, +}; use core::ops::Neg; use crate::{Fq, Fr}; @@ -14,31 +14,31 @@ use crate::{Fq, Fr}; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; + type BaseField = Fq; + type ScalarField = Fr; - /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 - const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; + /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 + const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 5285428838741532253824584287042945485047145357130994810877 - const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 5285428838741532253824584287042945485047145357130994810877 + const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); } impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; - /// COEFF_B = 1 - const COEFF_B: Fq = Fq::ONE; + /// COEFF_B = 1 + const COEFF_B: Fq = Fq::ONE; - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } } pub type G1SWAffine = SWAffine; @@ -93,22 +93,22 @@ pub type G1TEProjective = TEProjective; /// TE2d = Fp(122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179) /// ``` impl TECurveConfig for Config { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); - /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q - const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); + /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q + const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); - /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) - const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); + /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) + const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); - type MontCurveConfig = Config; + type MontCurveConfig = Config; - /// Multiplication by `a` is multiply by `-1`. - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - elem.neg() - } + /// Multiplication by `a` is multiply by `-1`. + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + elem.neg() + } } // BLS12-377::G1 also has a Montgomery form. @@ -141,13 +141,13 @@ impl TECurveConfig for Config { // MB=Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) // ``` impl MontCurveConfig for Config { - /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 - const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); + /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 + const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); - /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 - const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); + /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 + const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); - type TECurveConfig = Config; + type TECurveConfig = Config; } /// G1_GENERATOR_X = diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index d25265b341046..1bcea11e91b49 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -1,8 +1,8 @@ -use ark_ec::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::Affine, -}; use ark_ff::{Field, MontFp, Zero}; +use ark_models::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::Affine, +}; use crate::{g1, Fq, Fq2, Fr}; @@ -11,13 +11,13 @@ pub type G2Affine = Affine; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; + type BaseField = Fq2; + type ScalarField = Fr; - /// COFACTOR = - /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 + /// COFACTOR = + /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ + const COFACTOR: &'static [u64] = &[ 0x0000000000000001, 0x452217cc90000000, 0xa0f3622fba094800, @@ -28,34 +28,34 @@ impl CurveConfig for Config { 0x26ba558ae9562a, ]; - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 - const COFACTOR_INV: Fr = - MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 + const COFACTOR_INV: Fr = + MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); } impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - // As per https://eprint.iacr.org/2012/072.pdf, - // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is - // the irreducible poly used to extend from Fp2 to Fp12. - // In our case, i = u (App A.3, T_6). - /// COEFF_B = [0, - /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] - const COEFF_B: Fq2 = Fq2::new( + // As per https://eprint.iacr.org/2012/072.pdf, + // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is + // the irreducible poly used to extend from Fp2 to Fp12. + // In our case, i = u (App A.3, T_6). + /// COEFF_B = [0, + /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] + const COEFF_B: Fq2 = Fq2::new( Fq::ZERO, MontFp!("155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906"), ); - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs index d7c6695cf5663..beee2f092b8a5 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs @@ -1,7 +1,11 @@ -use ark_ec::{ - bls12, - bls12::{Bls12, Bls12Config, TwistType}, +use ark_ff::Fp12; +use ark_models::{ + bls12, + bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, }; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::*; @@ -14,16 +18,68 @@ mod tests; pub struct Config; impl Bls12Config for Config { - const X: &'static [u64] = &[0x8508c00000000001]; - /// `x` is positive. - const X_IS_NEGATIVE: bool = false; - const TWIST_TYPE: TwistType = TwistType::D; - type Fp = Fq; - type Fp2Config = Fq2Config; - type Fp6Config = Fq6Config; - type Fp12Config = Fq12Config; - type G1Config = g1::Config; - type G2Config = g2::Config; + const X: &'static [u64] = &[0x8508c00000000001]; + /// `x` is positive. + const X_IS_NEGATIVE: bool = false; + const TWIST_TYPE: TwistType = TwistType::D; + type Fp = Fq; + type Fp2Config = Fq2Config; + type Fp6Config = Fq6Config; + type Fp12Config = Fq12Config; + type G1Config = g1::Config; + type G2Config = g2::Config; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + let a: Vec> = a + .into_iter() + .map(|elem| { + let elem: as Pairing>::G1Prepared = elem.into(); + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let b = b + .into_iter() + .map(|elem| { + let elem: as Pairing>::G2Prepared = elem.into(); + let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + + let res = sp_io::crypto::bls12_377_multi_miller_loop(a, b); + let cursor = Cursor::new(&res[..]); + let f: as Pairing>::TargetField = + Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + MillerLoopOutput(f) + } + + fn final_exponentiation( + f: MillerLoopOutput>, + ) -> Option>> { + let mut out: [u8; 576] = [0; 576]; + let mut cursor = Cursor::new(&mut out[..]); + f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let res = sp_io::crypto::bls12_377_final_exponentiation(&out); + + let cursor = Cursor::new(&res[..]); + let res = PairingOutput::>::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + + Some(res) + } } pub type Bls12_377 = Bls12; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs index fae1f702bd18b..87c568c71c5c0 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs @@ -18,8 +18,7 @@ //! //! Curve information: //! * Base field: q = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 -//! * Scalar field: r = -//! 8444461749428370424248824938781546531375899335154063827935233455917409239041 +//! * Scalar field: r = 8444461749428370424248824938781546531375899335154063827935233455917409239041 //! * valuation(q - 1, 2) = 46 //! * valuation(r - 1, 2) = 47 //! * G1 curve equation: y^2 = x^3 + 1 @@ -29,11 +28,9 @@ #[cfg(feature = "curve")] mod curves; - #[cfg(feature = "r1cs")] pub mod constraints; +pub use ark_bls12_377::{Fq, Fq12Config, Fq2, Fq2Config, Fq6Config, Fr}; #[cfg(feature = "curve")] pub use curves::*; -pub use ark_bls12_377::{Fq2Config, Fq6Config, Fq12Config, Fq, Fq2, Fr}; - diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs index cce41858cadb1..97577f21e9c88 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -56,8 +56,7 @@ impl Bls12Config for Config { let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); let cursor = Cursor::new(&res[..]); let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); + Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); MillerLoopOutput(f) } diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 54657817d013c..11872ff19f7d5 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,2 +1,2 @@ pub mod bls12; -pub use ark_ec::{models, models::short_weierstrass, AffineRepr, CurveGroup, Group}; +pub use ark_ec::{models, models::short_weierstrass, pairing, AffineRepr, CurveGroup, Group}; From 5a496cfc1e9cf4e01c1cc56ad4a6c4d29910a092 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 15:02:20 +0100 Subject: [PATCH 038/364] remove ark-ec from curves --- Cargo.lock | 2 -- primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml | 3 +-- primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml | 3 +-- .../arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs | 2 +- .../arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs | 4 ++-- .../arkworks-curves/ark_sub_bls12_381/src/curves/util.rs | 2 +- 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad5ece668fb80..6945b40be4aa2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -387,7 +387,6 @@ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ "ark-bls12-377", - "ark-ec", "ark-ff", "ark-models", "ark-r1cs-std", @@ -403,7 +402,6 @@ dependencies = [ "ark-algebra-bench-templates", "ark-algebra-test-templates", "ark-bls12-381", - "ark-ec", "ark-ff", "ark-models", "ark-serialize", diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml index e12e4b59962a8..1004736511c29 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml @@ -14,7 +14,6 @@ edition = "2021" [dependencies] ark-ff = { version="0.4.0-alpha", default-features = false } -ark-ec = { version="0.4.0-alpha", default-features = false } ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } @@ -26,7 +25,7 @@ sp-io = { path = "../../io" } [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml index f74845e902dc2..0c2830fdcf3ae 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -14,7 +14,6 @@ edition = "2021" [dependencies] ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } @@ -28,7 +27,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs index 97577f21e9c88..75a86d7ec4d18 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs @@ -1,9 +1,9 @@ use ark_bls12_381::{Fq, Fq12Config, Fq2Config, Fq6Config}; -use ark_ec::pairing::{MillerLoopOutput, Pairing, PairingOutput}; use ark_ff::Fp12; use ark_models::{ bls12, bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, }; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs index c5fbe6f2cda56..eb1312e6f2abe 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs @@ -1,6 +1,6 @@ use ark_algebra_test_templates::*; -use ark_ec::{AffineRepr, CurveGroup, Group}; use ark_ff::{fields::Field, One, UniformRand, Zero}; +use ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec}; @@ -8,7 +8,7 @@ use crate::{Bls12_381, Fq, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projecti test_group!(g1; G1Projective; sw); test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_group!(pairing_output; PairingOutput; msm); test_pairing!(pairing; crate::Bls12_381); #[test] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs index ed44908853039..e1d4b388bc5c8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs @@ -1,5 +1,5 @@ -use ark_ec::{short_weierstrass::Affine, AffineRepr}; use ark_ff::{BigInteger384, PrimeField}; +use ark_models::{short_weierstrass::Affine, AffineRepr}; use ark_serialize::SerializationError; use crate::{g1::Config as G1Config, g2::Config as G2Config, G1Affine, G2Affine}; From 6b68de33f77e523ddfecd41b6ce5864e5840f1d3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 15:12:57 +0100 Subject: [PATCH 039/364] add msm for bls12_377 g1 --- .../ark_sub_bls12_377/src/curves/g1.rs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index 203d5877a8d1d..497e2b8d3cad8 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -1,12 +1,14 @@ use ark_ff::{Field, MontFp, Zero}; use ark_models::models::{ - short_weierstrass::{Affine as SWAffine, SWCurveConfig}, + short_weierstrass::{Affine as SWAffine, SWCurveConfig, Projective}, twisted_edwards::{ Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, }, CurveConfig, }; use core::ops::Neg; +use ark_std::{vec::Vec, vec, io::Cursor}; +use ark_serialize::{CanonicalSerialize, Compress, Validate}; use crate::{Fq, Fr}; @@ -39,6 +41,34 @@ impl SWCurveConfig for Config { fn mul_by_a(_: Self::BaseField) -> Self::BaseField { Self::BaseField::zero() } + + fn msm( + bases: &[SWAffine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } } pub type G1SWAffine = SWAffine; @@ -109,6 +139,7 @@ impl TECurveConfig for Config { fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { elem.neg() } + } // BLS12-377::G1 also has a Montgomery form. From 498f76f7ed90b748929c6f58672bdd4574b096a0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 15:14:23 +0100 Subject: [PATCH 040/364] add msm for bls12_377 g2 --- .../ark_sub_bls12_377/src/curves/g2.rs | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index 1bcea11e91b49..1b1343eea42f0 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -1,8 +1,10 @@ use ark_ff::{Field, MontFp, Zero}; use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, + models::{short_weierstrass::{SWCurveConfig, Projective}, CurveConfig}, short_weierstrass::Affine, }; +use ark_std::{vec::Vec, vec, io::Cursor}; +use ark_serialize::{CanonicalSerialize, Compress, Validate}; use crate::{g1, Fq, Fq2, Fr}; @@ -56,6 +58,34 @@ impl SWCurveConfig for Config { fn mul_by_a(_: Self::BaseField) -> Self::BaseField { Self::BaseField::zero() } + + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From ed0b742bd4bcf199ffbe4352c316ff8a09992fbf Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 15:18:41 +0100 Subject: [PATCH 041/364] add mul_projective host for bls12_377 --- .../ark_sub_bls12_377/src/curves/g1.rs | 32 +++++++++++++++---- .../ark_sub_bls12_377/src/curves/g2.rs | 30 ++++++++++++++--- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index 497e2b8d3cad8..3b4aff58fb265 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -1,14 +1,14 @@ use ark_ff::{Field, MontFp, Zero}; use ark_models::models::{ - short_weierstrass::{Affine as SWAffine, SWCurveConfig, Projective}, + short_weierstrass::{Affine as SWAffine, Projective, SWCurveConfig}, twisted_edwards::{ Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, }, CurveConfig, }; -use core::ops::Neg; -use ark_std::{vec::Vec, vec, io::Cursor}; use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; +use core::ops::Neg; use crate::{Fq, Fr}; @@ -42,7 +42,7 @@ impl SWCurveConfig for Config { Self::BaseField::zero() } - fn msm( + fn msm( bases: &[SWAffine], scalars: &[::ScalarField], ) -> Result, usize> { @@ -66,9 +66,30 @@ impl SWCurveConfig for Config { .collect(); let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = + ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); Ok(result.into()) } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::bls12_377_mul_projective_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = + ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); + result.into() + } } pub type G1SWAffine = SWAffine; @@ -139,7 +160,6 @@ impl TECurveConfig for Config { fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { elem.neg() } - } // BLS12-377::G1 also has a Montgomery form. diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index 1b1343eea42f0..d0489971d2f59 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -1,10 +1,13 @@ use ark_ff::{Field, MontFp, Zero}; use ark_models::{ - models::{short_weierstrass::{SWCurveConfig, Projective}, CurveConfig}, + models::{ + short_weierstrass::{Projective, SWCurveConfig}, + CurveConfig, + }, short_weierstrass::Affine, }; -use ark_std::{vec::Vec, vec, io::Cursor}; use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{g1, Fq, Fq2, Fr}; @@ -59,7 +62,7 @@ impl SWCurveConfig for Config { Self::BaseField::zero() } - fn msm( + fn msm( bases: &[Affine], scalars: &[::ScalarField], ) -> Result, usize> { @@ -83,9 +86,28 @@ impl SWCurveConfig for Config { .collect(); let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = + ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); Ok(result.into()) } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::bls12_377_mul_projective_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); From bb39dcb2834cec7c318e886b81bb347a0dcb6719 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 15:20:19 +0100 Subject: [PATCH 042/364] add mul_affine host for bls12_377 --- .../ark_sub_bls12_377/src/curves/g1.rs | 18 ++++++++++++++++++ .../ark_sub_bls12_377/src/curves/g2.rs | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index 3b4aff58fb265..250a7347eccd1 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -90,6 +90,24 @@ impl SWCurveConfig for Config { .unwrap(); result.into() } + + fn mul_affine(base: &SWAffine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let serialized_result = + sp_io::crypto::bls12_377_mul_affine_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&serialized_result[..]); + + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } pub type G1SWAffine = SWAffine; diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index d0489971d2f59..3444e9f25188d 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -105,6 +105,23 @@ impl SWCurveConfig for Config { let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::bls12_377_mul_affine_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); result.into() } From 9ce062bfa5eee2b3cddc156f4655a455384e0b9e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 17:04:10 +0100 Subject: [PATCH 043/364] fix tests bls12_377 --- Cargo.lock | 375 +++++++----------- .../ark_sub_bls12_377/Cargo.toml | 6 + .../ark_sub_bls12_377/src/curves/g1.rs | 2 +- .../ark_sub_bls12_377/src/curves/g2.rs | 2 +- .../ark_sub_bls12_381/Cargo.toml | 7 +- .../ark_sub_bls12_381/src/curves/tests/mod.rs | 4 +- 6 files changed, 165 insertions(+), 231 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6945b40be4aa2..9e2a9267b44b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,12 +111,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - [[package]] name = "ansi_term" version = "0.12.1" @@ -128,9 +122,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7724808837b77f4b4de9d283820f9d98bcf496d5692934b857a2399d31ff22e6" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "approx" @@ -147,38 +141,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" -[[package]] -name = "ark-algebra-bench-templates" -version = "0.4.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b1fb3020e8aa4bf438866401997506eab659c7effd3d3b49e2e5ed6f00a3bd" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std 0.4.0-alpha", - "criterion 0.4.0", - "paste", -] - [[package]] name = "ark-algebra-test-templates" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#b1d61ef132d626d079417a5c77834861633f6a9a" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "ark-ec", "ark-ff", "ark-serialize", "ark-std 0.4.0-alpha", + "hex", "num-bigint", "num-integer", "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", ] [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" +source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-ec", "ark-ff", @@ -188,7 +173,7 @@ dependencies = [ [[package]] name = "ark-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" +source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-ec", "ark-ff", @@ -199,7 +184,7 @@ dependencies = [ [[package]] name = "ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" +source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", "ark-ec", @@ -207,10 +192,22 @@ dependencies = [ "ark-std 0.4.0-alpha", ] +[[package]] +name = "ark-curve-constraint-tests" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-serialize", + "ark-std 0.4.0-alpha", +] + [[package]] name = "ark-ec" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "ark-ff", "ark-poly", @@ -226,7 +223,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" +source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", "ark-ec", @@ -237,7 +234,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#febd7635fbee31e7e94eac1ba38f75cd22793bde" +source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", "ark-ec", @@ -247,8 +244,8 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -266,8 +263,8 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "quote", "syn", @@ -275,8 +272,8 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "num-bigint", "num-traits", @@ -304,8 +301,8 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "ark-ff", "ark-serialize", @@ -316,12 +313,12 @@ dependencies = [ [[package]] name = "ark-r1cs-std" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/r1cs-std/?branch=release-0.4#bdffd136f955ccb437183862964612d235148615" +version = "0.4.0-alpha.3" +source = "git+https://github.com/arkworks-rs/r1cs-std/?branch=release-0.4#93b7f195ea72a1553db4f8d3f4c5c2bab6b59eb5" dependencies = [ "ark-ec", "ark-ff", - "ark-relations", + "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", "num-bigint", @@ -335,6 +332,17 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" +dependencies = [ + "ark-ff", + "ark-std 0.4.0-alpha", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-relations" +version = "0.4.0-alpha.1" +source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ "ark-ff", "ark-std 0.4.0-alpha", @@ -343,8 +351,8 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "ark-serialize-derive", "ark-std 0.4.0-alpha", @@ -354,8 +362,8 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.0-alpha.5" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#7f931fe334ad6644b68d4c4617d31e42c845c635" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ "proc-macro2", "quote", @@ -386,10 +394,14 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ + "ark-algebra-test-templates", "ark-bls12-377", + "ark-curve-constraint-tests", + "ark-ec", "ark-ff", "ark-models", "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", "ark-serialize", "ark-std 0.4.0-alpha", "sp-io", @@ -399,14 +411,17 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-bench-templates", "ark-algebra-test-templates", "ark-bls12-381", + "ark-ec", "ark-ff", "ark-models", "ark-serialize", "ark-std 0.4.0-alpha", "hex", + "serde", + "serde_derive", + "serde_json", "sp-io", ] @@ -1005,7 +1020,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.15", + "semver 1.0.16", "serde", "serde_json", ] @@ -1085,7 +1100,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.0.29", + "clap 4.0.32", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1109,33 +1124,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "ciborium" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" - -[[package]] -name = "ciborium-ll" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" -dependencies = [ - "ciborium-io", - "half", -] - [[package]] name = "cid" version = "0.8.6" @@ -1185,31 +1173,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "bitflags", - "textwrap 0.11.0", + "textwrap", "unicode-width", ] [[package]] name = "clap" -version = "3.2.23" +version = "4.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" -dependencies = [ - "bitflags", - "clap_lex 0.2.4", - "indexmap", - "textwrap 0.16.0", -] - -[[package]] -name = "clap" -version = "4.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d63b9e9c07271b9957ad22c173bae2a4d9a81127680962039296abcd2f8251d" +checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.0", + "clap_lex", "is-terminal", "once_cell", "strsim", @@ -1218,11 +1194,11 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.0.6" +version = "4.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7b3c9eae0de7bf8e3f904a5e40612b21fb2e2e566456d177809a48b892d24da" +checksum = "10861370d2ba66b0f5989f83ebf35db6421713fd92351790e7fdd6c36774c56b" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", ] [[package]] @@ -1238,15 +1214,6 @@ dependencies = [ "syn", ] -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - [[package]] name = "clap_lex" version = "0.3.0" @@ -1463,7 +1430,7 @@ dependencies = [ "atty", "cast", "clap 2.34.0", - "criterion-plot 0.4.5", + "criterion-plot", "csv", "futures", "itertools", @@ -1482,32 +1449,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "criterion" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" -dependencies = [ - "anes", - "atty", - "cast", - "ciborium", - "clap 3.2.23", - "criterion-plot 0.5.0", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - [[package]] name = "criterion-plot" version = "0.4.5" @@ -1518,16 +1459,6 @@ dependencies = [ "itertools", ] -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -1702,9 +1633,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.84" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27874566aca772cb515af4c6e997b5fe2119820bca447689145e39bb734d19a0" +checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" dependencies = [ "cc", "cxxbridge-flags", @@ -1714,9 +1645,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.84" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb951f2523a49533003656a72121306b225ec16a49a09dc6b0ba0d6f3ec3c0" +checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" dependencies = [ "cc", "codespan-reporting", @@ -1729,15 +1660,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.84" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be778b6327031c1c7b61dd2e48124eee5361e6aa76b8de93692f011b08870ab4" +checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" [[package]] name = "cxxbridge-macro" -version = "1.0.84" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b8a2b87662fe5a0a0b38507756ab66aff32638876a0866e5a5fc82ceb07ee49" +checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" dependencies = [ "proc-macro2", "quote", @@ -2295,7 +2226,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.0.29", + "clap 4.0.32", "comfy-table", "frame-benchmarking", "frame-support", @@ -2377,7 +2308,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2559,7 +2490,7 @@ dependencies = [ name = "frame-system" version = "4.0.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "frame-support", "log", "parity-scale-codec", @@ -2926,9 +2857,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.5" +version = "4.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e4ab33f1213cdc25b5fa45c76881240cfe79284cf2b395e8b9e312a30a2fd" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" dependencies = [ "log", "pest", @@ -3328,13 +3259,13 @@ checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" [[package]] name = "is-terminal" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi 0.2.6", "io-lifetimes 1.0.3", - "rustix 0.36.5", + "rustix 0.36.6", "windows-sys 0.42.0", ] @@ -3680,9 +3611,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.138" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libgit2-sys" @@ -4297,7 +4228,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.5", + "rustix 0.36.6", ] [[package]] @@ -4662,7 +4593,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.0.29", + "clap 4.0.32", "derive_more", "fs_extra", "futures", @@ -4699,9 +4630,9 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.0.29", + "clap 4.0.32", "clap_complete", - "criterion 0.3.6", + "criterion", "frame-benchmarking-cli", "frame-system", "frame-system-rpc-runtime-api", @@ -4782,7 +4713,7 @@ dependencies = [ name = "node-executor" version = "3.0.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "frame-benchmarking", "frame-support", "frame-system", @@ -4818,7 +4749,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -4877,7 +4808,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "generate-bags", "kitchensink-runtime", ] @@ -4886,7 +4817,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5082,11 +5013,11 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi 0.2.6", "libc", ] @@ -6738,9 +6669,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0" +checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" dependencies = [ "thiserror", "ucd-trie", @@ -6748,9 +6679,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc078600d06ff90d4ed238f0119d84ab5d43dbaad278b0e33a8820293b32344" +checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" dependencies = [ "pest", "pest_generator", @@ -6758,9 +6689,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a1af60b1c4148bb269006a750cff8e2ea36aff34d2d96cf7be0b14d1bed23c" +checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" dependencies = [ "pest", "pest_meta", @@ -6771,9 +6702,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec8605d59fc2ae0c6c1aefc0c7c7a9769732017c0ce07f7a9cfffa7b4404f20" +checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" dependencies = [ "once_cell", "pest", @@ -7029,9 +6960,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.48" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ "unicode-ident", ] @@ -7075,9 +7006,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b18e655c21ff5ac2084a5ad0611e827b3f92badf79f4910b5a5c58f4d87ff0" +checksum = "c01db6702aa05baa3f57dec92b8eeeeb4cb19e894e73996b32a4093289e54592" dependencies = [ "bytes", "prost-derive", @@ -7085,9 +7016,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276470f7f281b0ed53d2ae42dd52b4a8d08853a3c70e7fe95882acbb98a6ae94" +checksum = "cb5320c680de74ba083512704acb90fe00f28f79207286a848e730c45dd73ed6" dependencies = [ "bytes", "heck", @@ -7120,9 +7051,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +checksum = "c8842bad1a5419bca14eac663ba798f6bc19c413c2fdceb5f3ba3b0932d96720" dependencies = [ "anyhow", "itertools", @@ -7133,9 +7064,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +checksum = "017f79637768cde62820bc2d4fe0e45daaa027755c323ad077767c6c5f173091" dependencies = [ "bytes", "prost", @@ -7178,9 +7109,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -7521,7 +7452,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.15", + "semver 1.0.16", ] [[package]] @@ -7540,9 +7471,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.5" +version = "0.36.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" +checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" dependencies = [ "bitflags", "errno", @@ -7749,7 +7680,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.0.29", + "clap 4.0.32", "fdlimit", "futures", "futures-timer", @@ -7818,7 +7749,7 @@ dependencies = [ name = "sc-client-db" version = "0.10.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "hash-db", "kitchensink-runtime", "kvdb", @@ -8097,7 +8028,7 @@ name = "sc-executor" version = "0.10.0-dev" dependencies = [ "array-bytes", - "criterion 0.3.6", + "criterion", "env_logger", "lru", "num_cpus", @@ -8856,7 +8787,7 @@ dependencies = [ "ansi_term", "atty", "chrono", - "criterion 0.3.6", + "criterion", "lazy_static", "libc", "log", @@ -8897,7 +8828,7 @@ dependencies = [ "array-bytes", "assert_matches", "async-trait", - "criterion 0.3.6", + "criterion", "futures", "futures-timer", "linked-hash-map", @@ -9110,9 +9041,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfa246f936730408c0abee392cc1a50b118ece708c7f630516defd64480c7d8" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -9125,9 +9056,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] @@ -9144,9 +9075,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -9155,9 +9086,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa 1.0.5", "ryu", @@ -9393,7 +9324,7 @@ dependencies = [ name = "sp-api-test" version = "2.0.1" dependencies = [ - "criterion 0.3.6", + "criterion", "futures", "log", "parity-scale-codec", @@ -9438,7 +9369,7 @@ dependencies = [ name = "sp-arithmetic" version = "6.0.0" dependencies = [ - "criterion 0.3.6", + "criterion", "integer-sqrt", "num-traits", "parity-scale-codec", @@ -9653,7 +9584,7 @@ dependencies = [ "bitflags", "blake2", "byteorder", - "criterion 0.3.6", + "criterion", "dyn-clonable", "ed25519-zebra", "futures", @@ -9873,7 +9804,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10150,7 +10081,7 @@ version = "7.0.0" dependencies = [ "ahash 0.7.6", "array-bytes", - "criterion 0.3.6", + "criterion", "hash-db", "hashbrown 0.12.3", "lazy_static", @@ -10347,7 +10278,7 @@ dependencies = [ name = "subkey" version = "2.0.2" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "sc-cli", ] @@ -10375,7 +10306,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "frame-support", "frame-system", "sc-cli", @@ -10632,9 +10563,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -10724,12 +10655,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.38" @@ -11074,7 +10999,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5b26bd2cdd7641c5beb476b314c0cb1f629832bf21a6235f545e2d47bc9d05a" dependencies = [ - "criterion 0.3.6", + "criterion", "hash-db", "keccak-hasher", "memory-db", @@ -11171,7 +11096,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.0.29", + "clap 4.0.32", "frame-remote-externalities", "frame-try-runtime", "log", @@ -11212,9 +11137,9 @@ dependencies = [ [[package]] name = "tt-call" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e66dcbec4290c69dd03c57e76c2469ea5c7ce109c6dd4351c13055cf71ea055" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" [[package]] name = "twox-hash" diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml index 1004736511c29..104cf7514e222 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml @@ -22,6 +22,12 @@ ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } +[dev-dependencies] +ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } + [features] default = [ "curve" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index 250a7347eccd1..1c40341f6456f 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -64,7 +64,7 @@ impl SWCurveConfig for Config { serialized }) .collect(); - let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); + let result = sp_io::crypto::bls12_377_msm_g1(bases, scalars); let cursor = Cursor::new(&result[..]); let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index 3444e9f25188d..6b2f06b3936d0 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -84,7 +84,7 @@ impl SWCurveConfig for Config { serialized }) .collect(); - let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); + let result = sp_io::crypto::bls12_377_msm_g2(bases, scalars); let cursor = Cursor::new(&result[..]); let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml index 0c2830fdcf3ae..a05db47ea6046 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -21,9 +21,12 @@ ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] -ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } -ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } hex = "^0.4.0" +serde = "1.0" +serde_json = "1.0" +serde_derive = "1.0" [features] default = [ "curve" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs index eb1312e6f2abe..c9dd6033a2167 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs @@ -1,13 +1,13 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, One, UniformRand, Zero}; -use ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; +use ark_models::{pairing::*, AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec}; use crate::{Bls12_381, Fq, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective}; test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); +// test_group!(g2; G2Projective; sw); test_group!(pairing_output; PairingOutput; msm); test_pairing!(pairing; crate::Bls12_381); From 7f31539c8d4227fd10b298bc1716c11540c935f5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 18:13:20 +0100 Subject: [PATCH 044/364] fix tests bls12_381 --- Cargo.lock | 3 - .../ark_sub_bls12_381/Cargo.toml | 4 +- .../ark_sub_bls12_381/src/curves/g2.rs | 417 +++++++++--------- .../ark_sub_bls12_381/src/curves/tests/mod.rs | 2 +- 4 files changed, 210 insertions(+), 216 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9e2a9267b44b4..260e9c59f7fca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -419,9 +419,6 @@ dependencies = [ "ark-serialize", "ark-std 0.4.0-alpha", "hex", - "serde", - "serde_derive", - "serde_json", "sp-io", ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml index a05db47ea6046..063b0af5ae00c 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml @@ -16,6 +16,7 @@ edition = "2021" ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -24,9 +25,6 @@ sp-io = { path = "../../io" } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } hex = "^0.4.0" -serde = "1.0" -serde_json = "1.0" -serde_derive = "1.0" [features] default = [ "curve" ] diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index 2e09e9cc071f8..a94ccc02eecb1 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -1,20 +1,19 @@ -use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec}; +use ark_std::{ops::Neg, io::Cursor, vec, vec::Vec}; -use ark_bls12_381::{Fq, Fq2, Fr}; -use ark_ff::{Field, MontFp, Zero}; use ark_models::{ - bls12, - bls12::Bls12Config, - models::CurveConfig, - short_weierstrass::{Affine, Projective, SWCurveConfig}, - AffineRepr, CurveGroup, Group, + bls12, + bls12::Bls12Config, + models::CurveConfig, + short_weierstrass::{Affine, Projective, SWCurveConfig}, + AffineRepr, CurveGroup, Group, }; -use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; +use ark_ff::{Field, MontFp, Zero}; +use ark_serialize::{Compress, SerializationError, CanonicalSerialize, Validate}; use super::util::{serialize_fq, EncodingFlags, G2_SERIALIZED_SIZE}; use crate::{ - util::{read_g2_compressed, read_g2_uncompressed}, - *, + util::{read_g2_compressed, read_g2_uncompressed}, + *, }; pub type G2Affine = bls12::G2Affine; @@ -24,14 +23,14 @@ pub type G2Projective = bls12::G2Projective; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; + type BaseField = Fq2; + type ScalarField = Fr; - /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // - /// 9 - /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 + /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // + /// 9 + /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ + const COFACTOR: &'static [u64] = &[ 0xcf1c38e31c7238e5, 0x1616ec6e786f0c70, 0x21537e293a6691ae, @@ -42,144 +41,144 @@ impl CurveConfig for Config { 0x5d543a95414e7f1, ]; - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 - const COFACTOR_INV: Fr = - MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 + const COFACTOR_INV: Fr = + MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); } impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - - /// COEFF_B = [4, 4] - const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { - // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. - // - // Checks that [p]P = [X]P - - let mut x_times_point = point.mul_bigint(crate::Config::X); - if crate::Config::X_IS_NEGATIVE { - x_times_point = -x_times_point; - } - - let p_times_point = p_power_endomorphism(point); - - x_times_point.eq(&p_times_point) - } - - #[inline] - fn clear_cofactor(p: &G2Affine) -> G2Affine { - // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf - // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) - - // x = -15132376222941642752 - // When multiplying, use -c1 instead, and then negate the result. That's much - // more efficient, since the scalar -c1 has less limbs and a much lower Hamming - // weight. - let x: &'static [u64] = crate::Config::X; - let p_projective = p.into_group(); - - // [x]P - let x_p = Config::mul_affine(p, &x).neg(); - // ψ(P) - let psi_p = p_power_endomorphism(&p); - // (ψ^2)(2P) - let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); - - // tmp = [x]P + ψ(P) - let mut tmp = x_p.clone(); - tmp += &psi_p; - - // tmp2 = [x^2]P + [x]ψ(P) - let mut tmp2: Projective = tmp; - tmp2 = tmp2.mul_bigint(x).neg(); - - // add up all the terms - psi2_p2 += tmp2; - psi2_p2 -= x_p; - psi2_p2 += &-psi_p; - (psi2_p2 - p_projective).into_affine() - } - - fn deserialize_with_mode( - mut reader: R, - compress: ark_serialize::Compress, - validate: ark_serialize::Validate, - ) -> Result, ark_serialize::SerializationError> { - let p = if compress == ark_serialize::Compress::Yes { - read_g2_compressed(&mut reader)? - } else { - read_g2_uncompressed(&mut reader)? - }; - - if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() - { - return Err(SerializationError::InvalidData) - } - Ok(p) - } - - fn serialize_with_mode( - item: &Affine, - mut writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - let encoding = EncodingFlags { - is_compressed: compress == ark_serialize::Compress::Yes, - is_infinity: item.is_zero(), - is_lexographically_largest: item.y > -item.y, - }; - let mut p = *item; - if encoding.is_infinity { - p = G2Affine::zero(); - } - - let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.x.c1); - let c0_bytes = serialize_fq(p.x.c0); - x_bytes[0..48].copy_from_slice(&c1_bytes[..]); - x_bytes[48..96].copy_from_slice(&c0_bytes[..]); - if encoding.is_compressed { - let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - } else { - let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; - - let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.y.c1); - let c0_bytes = serialize_fq(p.y.c0); - y_bytes[0..48].copy_from_slice(&c1_bytes[..]); - y_bytes[48..96].copy_from_slice(&c0_bytes[..]); - bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); - bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - }; - - Ok(()) - } - - fn serialized_size(compress: ark_serialize::Compress) -> usize { - if compress == Compress::Yes { - G2_SERIALIZED_SIZE - } else { - 2 * G2_SERIALIZED_SIZE - } - } + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + + /// COEFF_B = [4, 4] + const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } + + fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { + // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. + // + // Checks that [p]P = [X]P + + let mut x_times_point = point.mul_bigint(crate::Config::X); + if crate::Config::X_IS_NEGATIVE { + x_times_point = -x_times_point; + } + + let p_times_point = p_power_endomorphism(point); + + x_times_point.eq(&p_times_point) + } + + #[inline] + fn clear_cofactor(p: &G2Affine) -> G2Affine { + // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf + // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) + + // x = -15132376222941642752 + // When multiplying, use -c1 instead, and then negate the result. That's much + // more efficient, since the scalar -c1 has less limbs and a much lower Hamming + // weight. + let x: &'static [u64] = crate::Config::X; + let p_projective = p.into_group(); + + // [x]P + let x_p = Config::mul_affine(p, &x).neg(); + // ψ(P) + let psi_p = p_power_endomorphism(&p); + // (ψ^2)(2P) + let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); + + // tmp = [x]P + ψ(P) + let mut tmp = x_p.clone(); + tmp += &psi_p; + + // tmp2 = [x^2]P + [x]ψ(P) + let mut tmp2: Projective = tmp; + tmp2 = tmp2.mul_bigint(x).neg(); + + // add up all the terms + psi2_p2 += tmp2; + psi2_p2 -= x_p; + psi2_p2 += &-psi_p; + (psi2_p2 - p_projective).into_affine() + } + + fn deserialize_with_mode( + mut reader: R, + compress: ark_serialize::Compress, + validate: ark_serialize::Validate, + ) -> Result, ark_serialize::SerializationError> { + let p = if compress == ark_serialize::Compress::Yes { + read_g2_compressed(&mut reader)? + } else { + read_g2_uncompressed(&mut reader)? + }; + + if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() + { + return Err(SerializationError::InvalidData); + } + Ok(p) + } + + fn serialize_with_mode( + item: &Affine, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + let encoding = EncodingFlags { + is_compressed: compress == ark_serialize::Compress::Yes, + is_infinity: item.is_zero(), + is_lexographically_largest: item.y > -item.y, + }; + let mut p = *item; + if encoding.is_infinity { + p = G2Affine::zero(); + } + + let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.x.c1); + let c0_bytes = serialize_fq(p.x.c0); + x_bytes[0..48].copy_from_slice(&c1_bytes[..]); + x_bytes[48..96].copy_from_slice(&c0_bytes[..]); + if encoding.is_compressed { + let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + } else { + let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; + + let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.y.c1); + let c0_bytes = serialize_fq(p.y.c0); + y_bytes[0..48].copy_from_slice(&c1_bytes[..]); + y_bytes[48..96].copy_from_slice(&c0_bytes[..]); + bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); + bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + }; + + Ok(()) + } + + fn serialized_size(compress: ark_serialize::Compress) -> usize { + if compress == Compress::Yes { + G2_SERIALIZED_SIZE + } else { + 2 * G2_SERIALIZED_SIZE + } + } fn msm( bases: &[Affine], @@ -288,72 +287,72 @@ pub const DOUBLE_P_POWER_ENDOMORPHISM: Fq2 = Fq2::new( ); pub fn p_power_endomorphism(p: &Affine) -> Affine { - // The p-power endomorphism for G2 is defined as follows: - // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). - // To map a point (x, y) in E' to (s, t) in E, - // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), - // because E: y^2 = x^3 + 4. - // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), - // another point on curve E, where s' = s^p, t' = t^p. - // 3. Map the point from E back to E'; that is, - // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). - // - // To sum up, it maps - // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) - // as implemented in the code as follows. - - let mut res = *p; - res.x.frobenius_map(1); - res.y.frobenius_map(1); - - let tmp_x = res.x.clone(); - res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; - res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; - res.y *= P_POWER_ENDOMORPHISM_COEFF_1; - - res + // The p-power endomorphism for G2 is defined as follows: + // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). + // To map a point (x, y) in E' to (s, t) in E, + // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), + // because E: y^2 = x^3 + 4. + // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), + // another point on curve E, where s' = s^p, t' = t^p. + // 3. Map the point from E back to E'; that is, + // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). + // + // To sum up, it maps + // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) + // as implemented in the code as follows. + + let mut res = *p; + res.x.frobenius_map_in_place(1); + res.y.frobenius_map_in_place(1); + + let tmp_x = res.x.clone(); + res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; + res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; + res.y *= P_POWER_ENDOMORPHISM_COEFF_1; + + res } /// For a p-power endomorphism psi(P), compute psi(psi(P)) pub fn double_p_power_endomorphism(p: &Projective) -> Projective { - let mut res = *p; + let mut res = *p; - res.x *= DOUBLE_P_POWER_ENDOMORPHISM; - res.y = res.y.neg(); + res.x *= DOUBLE_P_POWER_ENDOMORPHISM; + res.y = res.y.neg(); - res + res } #[cfg(test)] mod test { - use super::*; - use ark_std::UniformRand; - - #[test] - fn test_cofactor_clearing() { - // multiplying by h_eff and clearing the cofactor by the efficient - // endomorphism-based method should yield the same result. - let h_eff: &'static [u64] = &[ - 0xe8020005aaa95551, - 0x59894c0adebbf6b4, - 0xe954cbc06689f6a3, - 0x2ec0ec69d7477c1a, - 0x6d82bf015d1212b0, - 0x329c2f178731db95, - 0x9986ff031508ffe1, - 0x88e2a8e9145ad768, - 0x584c6a0ea91b3528, - 0xbc69f08f2ee75b3, - ]; - - let mut rng = ark_std::test_rng(); - const SAMPLES: usize = 10; - for _ in 0..SAMPLES { - let p = Affine::::rand(&mut rng); - let optimised = p.clear_cofactor().into_group(); - let naive = g2::Config::mul_affine(&p, h_eff); - assert_eq!(optimised, naive); - } - } + use super::*; + use ark_std::UniformRand; + + #[test] + fn test_cofactor_clearing() { + // multiplying by h_eff and clearing the cofactor by the efficient + // endomorphism-based method should yield the same result. + let h_eff: &'static [u64] = &[ + 0xe8020005aaa95551, + 0x59894c0adebbf6b4, + 0xe954cbc06689f6a3, + 0x2ec0ec69d7477c1a, + 0x6d82bf015d1212b0, + 0x329c2f178731db95, + 0x9986ff031508ffe1, + 0x88e2a8e9145ad768, + 0x584c6a0ea91b3528, + 0xbc69f08f2ee75b3, + ]; + + let mut rng = ark_std::test_rng(); + const SAMPLES: usize = 10; + for _ in 0..SAMPLES { + let p = Affine::::rand(&mut rng); + let optimised = p.clear_cofactor().into_group(); + let naive = g2::Config::mul_affine(&p, h_eff); + assert_eq!(optimised, naive); + } + } } diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs index c9dd6033a2167..f007e38d45e5d 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs @@ -7,7 +7,7 @@ use ark_std::{rand::Rng, test_rng, vec}; use crate::{Bls12_381, Fq, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective}; test_group!(g1; G1Projective; sw); -// test_group!(g2; G2Projective; sw); +test_group!(g2; G2Projective; sw); test_group!(pairing_output; PairingOutput; msm); test_pairing!(pairing; crate::Bls12_381); From 4fad25598c6d696e89fda3fb1820456585075db7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 18:39:25 +0100 Subject: [PATCH 045/364] project builds --- Cargo.lock | 7 ++++++- Cargo.toml | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 260e9c59f7fca..8ef86f8d11ced 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -314,7 +314,7 @@ dependencies = [ [[package]] name = "ark-r1cs-std" version = "0.4.0-alpha.3" -source = "git+https://github.com/arkworks-rs/r1cs-std/?branch=release-0.4#93b7f195ea72a1553db4f8d3f4c5c2bab6b59eb5" +source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ "ark-ec", "ark-ff", @@ -12071,3 +12071,8 @@ dependencies = [ "cc", "libc", ] + +[[patch.unused]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/Cargo.toml b/Cargo.toml index 5627e51354291..4c07b10b2a263 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -330,8 +330,8 @@ ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "rel ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/", branch = "release-0.4" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/" } +ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } From 8e16ae19e49c3d72e9f9ea2272e96bb916ea433a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 28 Dec 2022 18:43:24 +0100 Subject: [PATCH 046/364] fmt --- .../ark_sub_bls12_377/src/curves/g1.rs | 6 +- .../ark_sub_bls12_377/src/curves/g2.rs | 2 +- .../ark_sub_bls12_381/src/curves/g2.rs | 416 +++--- .../curve-constraint-tests/src/lib.rs | 1209 ++++++++--------- 4 files changed, 782 insertions(+), 851 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs index 1c40341f6456f..fc71186837774 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs @@ -91,7 +91,7 @@ impl SWCurveConfig for Config { result.into() } - fn mul_affine(base: &SWAffine, scalar: &[u64]) -> Projective { + fn mul_affine(base: &SWAffine, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -105,7 +105,9 @@ impl SWCurveConfig for Config { let cursor = Cursor::new(&serialized_result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = + ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); result.into() } } diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs index 6b2f06b3936d0..f5632f245ffe2 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs @@ -109,7 +109,7 @@ impl SWCurveConfig for Config { result.into() } - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs index a94ccc02eecb1..3bb592e302336 100644 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs @@ -1,19 +1,19 @@ -use ark_std::{ops::Neg, io::Cursor, vec, vec::Vec}; +use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec}; +use ark_ff::{Field, MontFp, Zero}; use ark_models::{ - bls12, - bls12::Bls12Config, - models::CurveConfig, - short_weierstrass::{Affine, Projective, SWCurveConfig}, - AffineRepr, CurveGroup, Group, + bls12, + bls12::Bls12Config, + models::CurveConfig, + short_weierstrass::{Affine, Projective, SWCurveConfig}, + AffineRepr, CurveGroup, Group, }; -use ark_ff::{Field, MontFp, Zero}; -use ark_serialize::{Compress, SerializationError, CanonicalSerialize, Validate}; +use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; use super::util::{serialize_fq, EncodingFlags, G2_SERIALIZED_SIZE}; use crate::{ - util::{read_g2_compressed, read_g2_uncompressed}, - *, + util::{read_g2_compressed, read_g2_uncompressed}, + *, }; pub type G2Affine = bls12::G2Affine; @@ -23,14 +23,14 @@ pub type G2Projective = bls12::G2Projective; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; + type BaseField = Fq2; + type ScalarField = Fr; - /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // - /// 9 - /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 + /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // + /// 9 + /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ + const COFACTOR: &'static [u64] = &[ 0xcf1c38e31c7238e5, 0x1616ec6e786f0c70, 0x21537e293a6691ae, @@ -41,144 +41,144 @@ impl CurveConfig for Config { 0x5d543a95414e7f1, ]; - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 - const COFACTOR_INV: Fr = - MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); + /// COFACTOR_INV = COFACTOR^{-1} mod r + /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 + const COFACTOR_INV: Fr = + MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); } impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - - /// COEFF_B = [4, 4] - const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { - // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. - // - // Checks that [p]P = [X]P - - let mut x_times_point = point.mul_bigint(crate::Config::X); - if crate::Config::X_IS_NEGATIVE { - x_times_point = -x_times_point; - } - - let p_times_point = p_power_endomorphism(point); - - x_times_point.eq(&p_times_point) - } - - #[inline] - fn clear_cofactor(p: &G2Affine) -> G2Affine { - // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf - // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) - - // x = -15132376222941642752 - // When multiplying, use -c1 instead, and then negate the result. That's much - // more efficient, since the scalar -c1 has less limbs and a much lower Hamming - // weight. - let x: &'static [u64] = crate::Config::X; - let p_projective = p.into_group(); - - // [x]P - let x_p = Config::mul_affine(p, &x).neg(); - // ψ(P) - let psi_p = p_power_endomorphism(&p); - // (ψ^2)(2P) - let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); - - // tmp = [x]P + ψ(P) - let mut tmp = x_p.clone(); - tmp += &psi_p; - - // tmp2 = [x^2]P + [x]ψ(P) - let mut tmp2: Projective = tmp; - tmp2 = tmp2.mul_bigint(x).neg(); - - // add up all the terms - psi2_p2 += tmp2; - psi2_p2 -= x_p; - psi2_p2 += &-psi_p; - (psi2_p2 - p_projective).into_affine() - } - - fn deserialize_with_mode( - mut reader: R, - compress: ark_serialize::Compress, - validate: ark_serialize::Validate, - ) -> Result, ark_serialize::SerializationError> { - let p = if compress == ark_serialize::Compress::Yes { - read_g2_compressed(&mut reader)? - } else { - read_g2_uncompressed(&mut reader)? - }; - - if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() - { - return Err(SerializationError::InvalidData); - } - Ok(p) - } - - fn serialize_with_mode( - item: &Affine, - mut writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - let encoding = EncodingFlags { - is_compressed: compress == ark_serialize::Compress::Yes, - is_infinity: item.is_zero(), - is_lexographically_largest: item.y > -item.y, - }; - let mut p = *item; - if encoding.is_infinity { - p = G2Affine::zero(); - } - - let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.x.c1); - let c0_bytes = serialize_fq(p.x.c0); - x_bytes[0..48].copy_from_slice(&c1_bytes[..]); - x_bytes[48..96].copy_from_slice(&c0_bytes[..]); - if encoding.is_compressed { - let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - } else { - let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; - - let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.y.c1); - let c0_bytes = serialize_fq(p.y.c0); - y_bytes[0..48].copy_from_slice(&c1_bytes[..]); - y_bytes[48..96].copy_from_slice(&c0_bytes[..]); - bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); - bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - }; - - Ok(()) - } - - fn serialized_size(compress: ark_serialize::Compress) -> usize { - if compress == Compress::Yes { - G2_SERIALIZED_SIZE - } else { - 2 * G2_SERIALIZED_SIZE - } - } + /// COEFF_A = [0, 0] + const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); + + /// COEFF_B = [4, 4] + const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_: Self::BaseField) -> Self::BaseField { + Self::BaseField::zero() + } + + fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { + // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. + // + // Checks that [p]P = [X]P + + let mut x_times_point = point.mul_bigint(crate::Config::X); + if crate::Config::X_IS_NEGATIVE { + x_times_point = -x_times_point; + } + + let p_times_point = p_power_endomorphism(point); + + x_times_point.eq(&p_times_point) + } + + #[inline] + fn clear_cofactor(p: &G2Affine) -> G2Affine { + // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf + // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) + + // x = -15132376222941642752 + // When multiplying, use -c1 instead, and then negate the result. That's much + // more efficient, since the scalar -c1 has less limbs and a much lower Hamming + // weight. + let x: &'static [u64] = crate::Config::X; + let p_projective = p.into_group(); + + // [x]P + let x_p = Config::mul_affine(p, &x).neg(); + // ψ(P) + let psi_p = p_power_endomorphism(&p); + // (ψ^2)(2P) + let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); + + // tmp = [x]P + ψ(P) + let mut tmp = x_p.clone(); + tmp += &psi_p; + + // tmp2 = [x^2]P + [x]ψ(P) + let mut tmp2: Projective = tmp; + tmp2 = tmp2.mul_bigint(x).neg(); + + // add up all the terms + psi2_p2 += tmp2; + psi2_p2 -= x_p; + psi2_p2 += &-psi_p; + (psi2_p2 - p_projective).into_affine() + } + + fn deserialize_with_mode( + mut reader: R, + compress: ark_serialize::Compress, + validate: ark_serialize::Validate, + ) -> Result, ark_serialize::SerializationError> { + let p = if compress == ark_serialize::Compress::Yes { + read_g2_compressed(&mut reader)? + } else { + read_g2_uncompressed(&mut reader)? + }; + + if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() + { + return Err(SerializationError::InvalidData) + } + Ok(p) + } + + fn serialize_with_mode( + item: &Affine, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + let encoding = EncodingFlags { + is_compressed: compress == ark_serialize::Compress::Yes, + is_infinity: item.is_zero(), + is_lexographically_largest: item.y > -item.y, + }; + let mut p = *item; + if encoding.is_infinity { + p = G2Affine::zero(); + } + + let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.x.c1); + let c0_bytes = serialize_fq(p.x.c0); + x_bytes[0..48].copy_from_slice(&c1_bytes[..]); + x_bytes[48..96].copy_from_slice(&c0_bytes[..]); + if encoding.is_compressed { + let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + } else { + let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; + + let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; + let c1_bytes = serialize_fq(p.y.c1); + let c0_bytes = serialize_fq(p.y.c0); + y_bytes[0..48].copy_from_slice(&c1_bytes[..]); + y_bytes[48..96].copy_from_slice(&c0_bytes[..]); + bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); + bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); + + encoding.encode_flags(&mut bytes); + writer.write_all(&bytes)?; + }; + + Ok(()) + } + + fn serialized_size(compress: ark_serialize::Compress) -> usize { + if compress == Compress::Yes { + G2_SERIALIZED_SIZE + } else { + 2 * G2_SERIALIZED_SIZE + } + } fn msm( bases: &[Affine], @@ -287,72 +287,72 @@ pub const DOUBLE_P_POWER_ENDOMORPHISM: Fq2 = Fq2::new( ); pub fn p_power_endomorphism(p: &Affine) -> Affine { - // The p-power endomorphism for G2 is defined as follows: - // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). - // To map a point (x, y) in E' to (s, t) in E, - // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), - // because E: y^2 = x^3 + 4. - // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), - // another point on curve E, where s' = s^p, t' = t^p. - // 3. Map the point from E back to E'; that is, - // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). - // - // To sum up, it maps - // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) - // as implemented in the code as follows. - - let mut res = *p; - res.x.frobenius_map_in_place(1); - res.y.frobenius_map_in_place(1); - - let tmp_x = res.x.clone(); - res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; - res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; - res.y *= P_POWER_ENDOMORPHISM_COEFF_1; - - res + // The p-power endomorphism for G2 is defined as follows: + // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). + // To map a point (x, y) in E' to (s, t) in E, + // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), + // because E: y^2 = x^3 + 4. + // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), + // another point on curve E, where s' = s^p, t' = t^p. + // 3. Map the point from E back to E'; that is, + // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). + // + // To sum up, it maps + // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) + // as implemented in the code as follows. + + let mut res = *p; + res.x.frobenius_map_in_place(1); + res.y.frobenius_map_in_place(1); + + let tmp_x = res.x.clone(); + res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; + res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; + res.y *= P_POWER_ENDOMORPHISM_COEFF_1; + + res } /// For a p-power endomorphism psi(P), compute psi(psi(P)) pub fn double_p_power_endomorphism(p: &Projective) -> Projective { - let mut res = *p; + let mut res = *p; - res.x *= DOUBLE_P_POWER_ENDOMORPHISM; - res.y = res.y.neg(); + res.x *= DOUBLE_P_POWER_ENDOMORPHISM; + res.y = res.y.neg(); - res + res } #[cfg(test)] mod test { - use super::*; - use ark_std::UniformRand; - - #[test] - fn test_cofactor_clearing() { - // multiplying by h_eff and clearing the cofactor by the efficient - // endomorphism-based method should yield the same result. - let h_eff: &'static [u64] = &[ - 0xe8020005aaa95551, - 0x59894c0adebbf6b4, - 0xe954cbc06689f6a3, - 0x2ec0ec69d7477c1a, - 0x6d82bf015d1212b0, - 0x329c2f178731db95, - 0x9986ff031508ffe1, - 0x88e2a8e9145ad768, - 0x584c6a0ea91b3528, - 0xbc69f08f2ee75b3, - ]; - - let mut rng = ark_std::test_rng(); - const SAMPLES: usize = 10; - for _ in 0..SAMPLES { - let p = Affine::::rand(&mut rng); - let optimised = p.clear_cofactor().into_group(); - let naive = g2::Config::mul_affine(&p, h_eff); - assert_eq!(optimised, naive); - } - } + use super::*; + use ark_std::UniformRand; + + #[test] + fn test_cofactor_clearing() { + // multiplying by h_eff and clearing the cofactor by the efficient + // endomorphism-based method should yield the same result. + let h_eff: &'static [u64] = &[ + 0xe8020005aaa95551, + 0x59894c0adebbf6b4, + 0xe954cbc06689f6a3, + 0x2ec0ec69d7477c1a, + 0x6d82bf015d1212b0, + 0x329c2f178731db95, + 0x9986ff031508ffe1, + 0x88e2a8e9145ad768, + 0x584c6a0ea91b3528, + 0xbc69f08f2ee75b3, + ]; + + let mut rng = ark_std::test_rng(); + const SAMPLES: usize = 10; + for _ in 0..SAMPLES { + let p = Affine::::rand(&mut rng); + let optimised = p.clear_cofactor().into_group(); + let naive = g2::Config::mul_affine(&p, h_eff); + assert_eq!(optimised, naive); + } + } } diff --git a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs index 71af55562d5cb..336f933c4da29 100644 --- a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs +++ b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs @@ -2,650 +2,579 @@ extern crate ark_relations; pub mod fields { - use ark_ff::{BitIteratorLE, Field, PrimeField, UniformRand}; - use ark_r1cs_std::prelude::*; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec}; - - pub fn field_test() -> Result<(), SynthesisError> - where - F: Field, - ConstraintF: PrimeField, - AF: FieldVar, - AF: TwoBitLookupGadget, - for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, - { - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - - let mut rng = test_rng(); - let a_native = F::rand(&mut rng); - let b_native = F::rand(&mut rng); - let a = AF::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode)?; - let b = AF::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode)?; - let b_const = AF::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; - - let zero = AF::zero(); - let zero_native = zero.value()?; - zero.enforce_equal(&zero)?; - - let one = AF::one(); - let one_native = one.value()?; - one.enforce_equal(&one)?; - - one.enforce_not_equal(&zero)?; - - let one_dup = &zero + &one; - one_dup.enforce_equal(&one)?; - - let two = &one + &one; - two.enforce_equal(&two)?; - two.enforce_equal(&one.double()?)?; - two.enforce_not_equal(&one)?; - two.enforce_not_equal(&zero)?; - - // a + 0 = a - let a_plus_zero = &a + &zero; - assert_eq!(a_plus_zero.value()?, a_native); - a_plus_zero.enforce_equal(&a)?; - a_plus_zero.enforce_not_equal(&a.double()?)?; - - // a - 0 = a - let a_minus_zero = &a - &zero; - assert_eq!(a_minus_zero.value()?, a_native); - a_minus_zero.enforce_equal(&a)?; - - // a - a = 0 - let a_minus_a = &a - &a; - assert_eq!(a_minus_a.value()?, zero_native); - a_minus_a.enforce_equal(&zero)?; - - // a + b = b + a - let a_b = &a + &b; - let b_a = &b + &a; - assert_eq!(a_b.value()?, a_native + &b_native); - a_b.enforce_equal(&b_a)?; - - // (a + b) + a = a + (b + a) - let ab_a = &a_b + &a; - let a_ba = &a + &b_a; - assert_eq!(ab_a.value()?, a_native + &b_native + &a_native); - ab_a.enforce_equal(&a_ba)?; - - let b_times_a_plus_b = &a_b * &b; - let b_times_b_plus_a = &b_a * &b; - assert_eq!( - b_times_a_plus_b.value()?, - b_native * &(b_native + &a_native) - ); - assert_eq!( - b_times_a_plus_b.value()?, - (b_native + &a_native) * &b_native - ); - assert_eq!( - b_times_a_plus_b.value()?, - (a_native + &b_native) * &b_native - ); - b_times_b_plus_a.enforce_equal(&b_times_a_plus_b)?; - - // a * 1 = a - assert_eq!((&a * &one).value()?, a_native * &one_native); - - // a * b = b * a - let ab = &a * &b; - let ba = &b * &a; - assert_eq!(ab.value()?, ba.value()?); - assert_eq!(ab.value()?, a_native * &b_native); - - let ab_const = &a * &b_const; - let b_const_a = &b_const * &a; - assert_eq!(ab_const.value()?, b_const_a.value()?); - assert_eq!(ab_const.value()?, ab.value()?); - assert_eq!(ab_const.value()?, a_native * &b_native); - - // (a * b) * a = a * (b * a) - let ab_a = &ab * &a; - let a_ba = &a * &ba; - assert_eq!(ab_a.value()?, a_ba.value()?); - assert_eq!(ab_a.value()?, a_native * &b_native * &a_native); - - let aa = &a * &a; - let a_squared = a.square()?; - a_squared.enforce_equal(&aa)?; - assert_eq!(aa.value()?, a_squared.value()?); - assert_eq!(aa.value()?, a_native.square()); - - let aa = &a * a_native; - a_squared.enforce_equal(&aa)?; - assert_eq!(aa.value()?, a_squared.value()?); - assert_eq!(aa.value()?, a_native.square()); - - let a_b2 = &a + b_native; - a_b.enforce_equal(&a_b2)?; - assert_eq!(a_b.value()?, a_b2.value()?); - - let a_inv = a.inverse()?; - a_inv.mul_equals(&a, &one)?; - assert_eq!(a_inv.value()?, a.value()?.inverse().unwrap()); - assert_eq!(a_inv.value()?, a_native.inverse().unwrap()); - - let a_b_inv = a.mul_by_inverse(&b)?; - a_b_inv.mul_equals(&b, &a)?; - assert_eq!(a_b_inv.value()?, a_native * b_native.inverse().unwrap()); - - // a * a * a = a^3 - let bits = BitIteratorLE::without_trailing_zeros([3u64]) - .map(Boolean::constant) - .collect::>(); - assert_eq!(a_native.pow([0x3]), a.pow_le(&bits)?.value()?); - - // a * a * a = a^3 - assert_eq!(a_native.pow([0x3]), a.pow_by_constant(&[0x3])?.value()?); - assert!(cs.is_satisfied().unwrap()); - - let mut constants = [F::zero(); 4]; - for c in &mut constants { - *c = UniformRand::rand(&mut test_rng()); - } - let bits = [ - Boolean::::constant(false), - Boolean::constant(true), - ]; - let lookup_result = AF::two_bit_lookup(&bits, constants.as_ref())?; - assert_eq!(lookup_result.value()?, constants[2]); - assert!(cs.is_satisfied().unwrap()); - - let f = F::from(1u128 << 64); - let f_bits = ark_ff::BitIteratorLE::new(&[0u64, 1u64]).collect::>(); - let fv = AF::new_variable(ark_relations::ns!(cs, "alloc u128"), || Ok(f), mode)?; - assert_eq!(fv.to_bits_le()?.value().unwrap()[..128], f_bits[..128]); - assert!(cs.is_satisfied().unwrap()); - - let r_native: F = UniformRand::rand(&mut test_rng()); - - let r = AF::new_variable(ark_relations::ns!(cs, "r_native"), || Ok(r_native), mode) - .unwrap(); - let _ = r.to_non_unique_bits_le()?; - assert!(cs.is_satisfied().unwrap()); - let _ = r.to_bits_le()?; - assert!(cs.is_satisfied().unwrap()); - - let ab_false = &a + (AF::from(Boolean::Constant(false)) * b_native); - let ab_true = &a + (AF::from(Boolean::Constant(true)) * b_native); - assert_eq!(ab_false.value()?, a_native); - assert_eq!(ab_true.value()?, a_native + &b_native); - - if !cs.is_satisfied().unwrap() { - panic!( - "Unsatisfied in mode {:?}.\n{:?}", - mode, - cs.which_is_unsatisfied().unwrap() - ); - } - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn frobenius_tests(maxpower: usize) -> Result<(), SynthesisError> - where - F: Field, - ConstraintF: Field, - AF: FieldVar, - for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, - { - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - let mut rng = test_rng(); - for i in 0..=maxpower { - let mut a = F::rand(&mut rng); - let mut a_gadget = AF::new_variable(ark_relations::ns!(cs, "a"), || Ok(a), mode)?; - a_gadget.frobenius_map_in_place(i)?; - a.frobenius_map(i); - - assert_eq!(a_gadget.value()?, a); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } + use ark_ff::{BitIteratorLE, Field, PrimeField, UniformRand}; + use ark_r1cs_std::prelude::*; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec}; + + pub fn field_test() -> Result<(), SynthesisError> + where + F: Field, + ConstraintF: PrimeField, + AF: FieldVar, + AF: TwoBitLookupGadget, + for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, + { + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + + let mut rng = test_rng(); + let a_native = F::rand(&mut rng); + let b_native = F::rand(&mut rng); + let a = AF::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode)?; + let b = AF::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode)?; + let b_const = AF::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; + + let zero = AF::zero(); + let zero_native = zero.value()?; + zero.enforce_equal(&zero)?; + + let one = AF::one(); + let one_native = one.value()?; + one.enforce_equal(&one)?; + + one.enforce_not_equal(&zero)?; + + let one_dup = &zero + &one; + one_dup.enforce_equal(&one)?; + + let two = &one + &one; + two.enforce_equal(&two)?; + two.enforce_equal(&one.double()?)?; + two.enforce_not_equal(&one)?; + two.enforce_not_equal(&zero)?; + + // a + 0 = a + let a_plus_zero = &a + &zero; + assert_eq!(a_plus_zero.value()?, a_native); + a_plus_zero.enforce_equal(&a)?; + a_plus_zero.enforce_not_equal(&a.double()?)?; + + // a - 0 = a + let a_minus_zero = &a - &zero; + assert_eq!(a_minus_zero.value()?, a_native); + a_minus_zero.enforce_equal(&a)?; + + // a - a = 0 + let a_minus_a = &a - &a; + assert_eq!(a_minus_a.value()?, zero_native); + a_minus_a.enforce_equal(&zero)?; + + // a + b = b + a + let a_b = &a + &b; + let b_a = &b + &a; + assert_eq!(a_b.value()?, a_native + &b_native); + a_b.enforce_equal(&b_a)?; + + // (a + b) + a = a + (b + a) + let ab_a = &a_b + &a; + let a_ba = &a + &b_a; + assert_eq!(ab_a.value()?, a_native + &b_native + &a_native); + ab_a.enforce_equal(&a_ba)?; + + let b_times_a_plus_b = &a_b * &b; + let b_times_b_plus_a = &b_a * &b; + assert_eq!(b_times_a_plus_b.value()?, b_native * &(b_native + &a_native)); + assert_eq!(b_times_a_plus_b.value()?, (b_native + &a_native) * &b_native); + assert_eq!(b_times_a_plus_b.value()?, (a_native + &b_native) * &b_native); + b_times_b_plus_a.enforce_equal(&b_times_a_plus_b)?; + + // a * 1 = a + assert_eq!((&a * &one).value()?, a_native * &one_native); + + // a * b = b * a + let ab = &a * &b; + let ba = &b * &a; + assert_eq!(ab.value()?, ba.value()?); + assert_eq!(ab.value()?, a_native * &b_native); + + let ab_const = &a * &b_const; + let b_const_a = &b_const * &a; + assert_eq!(ab_const.value()?, b_const_a.value()?); + assert_eq!(ab_const.value()?, ab.value()?); + assert_eq!(ab_const.value()?, a_native * &b_native); + + // (a * b) * a = a * (b * a) + let ab_a = &ab * &a; + let a_ba = &a * &ba; + assert_eq!(ab_a.value()?, a_ba.value()?); + assert_eq!(ab_a.value()?, a_native * &b_native * &a_native); + + let aa = &a * &a; + let a_squared = a.square()?; + a_squared.enforce_equal(&aa)?; + assert_eq!(aa.value()?, a_squared.value()?); + assert_eq!(aa.value()?, a_native.square()); + + let aa = &a * a_native; + a_squared.enforce_equal(&aa)?; + assert_eq!(aa.value()?, a_squared.value()?); + assert_eq!(aa.value()?, a_native.square()); + + let a_b2 = &a + b_native; + a_b.enforce_equal(&a_b2)?; + assert_eq!(a_b.value()?, a_b2.value()?); + + let a_inv = a.inverse()?; + a_inv.mul_equals(&a, &one)?; + assert_eq!(a_inv.value()?, a.value()?.inverse().unwrap()); + assert_eq!(a_inv.value()?, a_native.inverse().unwrap()); + + let a_b_inv = a.mul_by_inverse(&b)?; + a_b_inv.mul_equals(&b, &a)?; + assert_eq!(a_b_inv.value()?, a_native * b_native.inverse().unwrap()); + + // a * a * a = a^3 + let bits = BitIteratorLE::without_trailing_zeros([3u64]) + .map(Boolean::constant) + .collect::>(); + assert_eq!(a_native.pow([0x3]), a.pow_le(&bits)?.value()?); + + // a * a * a = a^3 + assert_eq!(a_native.pow([0x3]), a.pow_by_constant(&[0x3])?.value()?); + assert!(cs.is_satisfied().unwrap()); + + let mut constants = [F::zero(); 4]; + for c in &mut constants { + *c = UniformRand::rand(&mut test_rng()); + } + let bits = [Boolean::::constant(false), Boolean::constant(true)]; + let lookup_result = AF::two_bit_lookup(&bits, constants.as_ref())?; + assert_eq!(lookup_result.value()?, constants[2]); + assert!(cs.is_satisfied().unwrap()); + + let f = F::from(1u128 << 64); + let f_bits = ark_ff::BitIteratorLE::new(&[0u64, 1u64]).collect::>(); + let fv = AF::new_variable(ark_relations::ns!(cs, "alloc u128"), || Ok(f), mode)?; + assert_eq!(fv.to_bits_le()?.value().unwrap()[..128], f_bits[..128]); + assert!(cs.is_satisfied().unwrap()); + + let r_native: F = UniformRand::rand(&mut test_rng()); + + let r = AF::new_variable(ark_relations::ns!(cs, "r_native"), || Ok(r_native), mode) + .unwrap(); + let _ = r.to_non_unique_bits_le()?; + assert!(cs.is_satisfied().unwrap()); + let _ = r.to_bits_le()?; + assert!(cs.is_satisfied().unwrap()); + + let ab_false = &a + (AF::from(Boolean::Constant(false)) * b_native); + let ab_true = &a + (AF::from(Boolean::Constant(true)) * b_native); + assert_eq!(ab_false.value()?, a_native); + assert_eq!(ab_true.value()?, a_native + &b_native); + + if !cs.is_satisfied().unwrap() { + panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); + } + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn frobenius_tests(maxpower: usize) -> Result<(), SynthesisError> + where + F: Field, + ConstraintF: Field, + AF: FieldVar, + for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, + { + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + let mut rng = test_rng(); + for i in 0..=maxpower { + let mut a = F::rand(&mut rng); + let mut a_gadget = AF::new_variable(ark_relations::ns!(cs, "a"), || Ok(a), mode)?; + a_gadget.frobenius_map_in_place(i)?; + a.frobenius_map(i); + + assert_eq!(a_gadget.value()?, a); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } } pub mod curves { - use ark_ec::{ - short_weierstrass::Projective as SWProjective, twisted_edwards::Projective as TEProjective, - CurveGroup, Group, - }; - use ark_ff::{BitIteratorLE, Field, One, PrimeField}; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec, UniformRand}; - - use ark_r1cs_std::prelude::*; - - pub fn group_test() -> Result<(), SynthesisError> - where - C: CurveGroup, - ConstraintF: Field, - GG: CurveVar, - for<'a> &'a GG: GroupOpsBounds<'a, C, GG>, - { - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - - let mut rng = test_rng(); - let a_native = C::rand(&mut rng); - let b_native = C::rand(&mut rng); - let a = GG::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode) - .unwrap(); - let b = GG::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode) - .unwrap(); - - let zero = GG::zero(); - assert_eq!(zero.value()?, zero.value()?); - - // a == a - assert_eq!(a.value()?, a.value()?); - // a + 0 = a - assert_eq!((&a + &zero).value()?, a.value()?); - // a - 0 = a - assert_eq!((&a - &zero).value()?, a.value()?); - // a - a = 0 - assert_eq!((&a - &a).value()?, zero.value()?); - // a + b = b + a - let a_b = &a + &b; - let b_a = &b + &a; - assert_eq!(a_b.value()?, b_a.value()?); - a_b.enforce_equal(&b_a)?; - assert!(cs.is_satisfied().unwrap()); - - // (a + b) + a = a + (b + a) - let ab_a = &a_b + &a; - let a_ba = &a + &b_a; - assert_eq!(ab_a.value()?, a_ba.value()?); - ab_a.enforce_equal(&a_ba)?; - assert!(cs.is_satisfied().unwrap()); - - // a.double() = a + a - let a_a = &a + &a; - let mut a2 = a.clone(); - a2.double_in_place()?; - a2.enforce_equal(&a_a)?; - assert_eq!(a2.value()?, a_native.double()); - assert_eq!(a_a.value()?, a_native.double()); - assert_eq!(a2.value()?, a_a.value()?); - assert!(cs.is_satisfied().unwrap()); - - // b.double() = b + b - let mut b2 = b.clone(); - b2.double_in_place()?; - let b_b = &b + &b; - b2.enforce_equal(&b_b)?; - assert!(cs.is_satisfied().unwrap()); - assert_eq!(b2.value()?, b_b.value()?); - - let _ = a.to_bytes()?; - assert!(cs.is_satisfied().unwrap()); - let _ = a.to_non_unique_bytes()?; - assert!(cs.is_satisfied().unwrap()); - - let _ = b.to_bytes()?; - let _ = b.to_non_unique_bytes()?; - if !cs.is_satisfied().unwrap() { - panic!( - "Unsatisfied in mode {:?}.\n{:?}", - mode, - cs.which_is_unsatisfied().unwrap() - ); - } - assert!(cs.is_satisfied().unwrap()); - - let modulus = ::MODULUS.as_ref().to_vec(); - let mut max = modulus.clone(); - for limb in &mut max { - *limb = u64::MAX; - } - - let modulus_num_bits_mod_64 = ::MODULUS_BIT_SIZE % 64; - if modulus_num_bits_mod_64 != 0 { - *max.last_mut().unwrap() >>= 64 - modulus_num_bits_mod_64; - } - let scalars = [ - C::ScalarField::rand(&mut rng) - .into_bigint() - .as_ref() - .to_vec(), - vec![u64::rand(&mut rng)], - (-C::ScalarField::one()).into_bigint().as_ref().to_vec(), - ::MODULUS.as_ref().to_vec(), - max, - vec![0; 50], - vec![1000012341233u64; 36], - ]; - - let mut input = vec![]; - - // Check scalar mul with edge cases - for scalar in scalars.iter() { - let native_result = a_native.mul_bigint(scalar); - let native_result = native_result.into_affine(); - - let scalar_bits: Vec = BitIteratorLE::new(&scalar).collect(); - input = - Vec::new_witness(ark_relations::ns!(cs, "bits"), || Ok(scalar_bits)).unwrap(); - let result = a - .scalar_mul_le(input.iter()) - .expect(&format!("Mode: {:?}", mode)); - let result_val = result.value()?.into_affine(); - assert_eq!( - result_val, native_result, - "gadget & native values are diff. after scalar mul {:?}", - scalar, - ); - assert!(cs.is_satisfied().unwrap()); - } - - let result = zero.scalar_mul_le(input.iter())?; - let result_val = result.value()?.into_affine(); - result.enforce_equal(&zero)?; - assert_eq!( - result_val, - C::zero().into_affine(), - "gadget & native values are diff. after scalar mul of zero" - ); - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn sw_test() -> Result<(), SynthesisError> - where - P: ark_ec::models::short_weierstrass::SWCurveConfig, - GG: CurveVar, ::BasePrimeField>, - for<'a> &'a GG: GroupOpsBounds<'a, SWProjective

, GG>, - { - group_test::, _, GG>()?; - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let mut rng = test_rng(); - - let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); - - let a = SWProjective::

::rand(&mut rng); - let b = SWProjective::

::rand(&mut rng); - let a_affine = a.into_affine(); - let b_affine = b.into_affine(); - - let ns = ark_relations::ns!(cs, "allocating variables"); - let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; - let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; - let zero = GG::zero(); - drop(ns); - assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); - assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); - assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); - assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); - assert_eq!(cs.which_is_unsatisfied().unwrap(), None); - - // Check addition - let ab = a + &b; - let ab_affine = ab.into_affine(); - let gadget_ab = &gadget_a + &gadget_b; - let gadget_ba = &gadget_b + &gadget_a; - gadget_ba.enforce_equal(&gadget_ab)?; - - let ab_val = gadget_ab.value()?.into_affine(); - assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); - assert!(cs.is_satisfied().unwrap()); - - let gadget_a_zero = &gadget_a + &zero; - gadget_a_zero.enforce_equal(&gadget_a)?; - - // Check doubling - let aa = &a.double(); - let aa_affine = aa.into_affine(); - gadget_a.double_in_place()?; - let aa_val = gadget_a.value()?.into_affine(); - assert_eq!( - aa_val, aa_affine, - "Gadget and native values are unequal after double." - ); - assert!(cs.is_satisfied().unwrap()); - - if !cs.is_satisfied().unwrap() { - panic!( - "Unsatisfied in mode {:?}.\n{:?}", - mode, - cs.which_is_unsatisfied().unwrap() - ); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn te_test() -> Result<(), SynthesisError> - where - P: ark_ec::twisted_edwards::TECurveConfig, - GG: CurveVar, ::BasePrimeField>, - for<'a> &'a GG: GroupOpsBounds<'a, TEProjective

, GG>, - { - group_test::, _, GG>()?; - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let mut rng = test_rng(); - - let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); - - let a = TEProjective::

::rand(&mut rng); - let b = TEProjective::

::rand(&mut rng); - let a_affine = a.into_affine(); - let b_affine = b.into_affine(); - - let ns = ark_relations::ns!(cs, "allocating variables"); - let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; - let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; - drop(ns); - - assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); - assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); - assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); - assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); - assert_eq!(cs.which_is_unsatisfied()?, None); - - // Check addition - let ab = a + &b; - let ab_affine = ab.into_affine(); - let gadget_ab = &gadget_a + &gadget_b; - let gadget_ba = &gadget_b + &gadget_a; - gadget_ba.enforce_equal(&gadget_ab)?; - - let ab_val = gadget_ab.value()?.into_affine(); - assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); - assert!(cs.is_satisfied().unwrap()); - - // Check doubling - let aa = &a.double(); - let aa_affine = aa.into_affine(); - gadget_a.double_in_place()?; - let aa_val = gadget_a.value()?.into_affine(); - assert_eq!( - aa_val, aa_affine, - "Gadget and native values are unequal after double." - ); - assert!(cs.is_satisfied().unwrap()); - - if !cs.is_satisfied().unwrap() { - panic!( - "Unsatisfied in mode {:?}.\n{:?}", - mode, - cs.which_is_unsatisfied().unwrap() - ); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } + use ark_ec::{ + short_weierstrass::Projective as SWProjective, twisted_edwards::Projective as TEProjective, + CurveGroup, Group, + }; + use ark_ff::{BitIteratorLE, Field, One, PrimeField}; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec, UniformRand}; + + use ark_r1cs_std::prelude::*; + + pub fn group_test() -> Result<(), SynthesisError> + where + C: CurveGroup, + ConstraintF: Field, + GG: CurveVar, + for<'a> &'a GG: GroupOpsBounds<'a, C, GG>, + { + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let cs = ConstraintSystem::::new_ref(); + + let mut rng = test_rng(); + let a_native = C::rand(&mut rng); + let b_native = C::rand(&mut rng); + let a = GG::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode) + .unwrap(); + let b = GG::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode) + .unwrap(); + + let zero = GG::zero(); + assert_eq!(zero.value()?, zero.value()?); + + // a == a + assert_eq!(a.value()?, a.value()?); + // a + 0 = a + assert_eq!((&a + &zero).value()?, a.value()?); + // a - 0 = a + assert_eq!((&a - &zero).value()?, a.value()?); + // a - a = 0 + assert_eq!((&a - &a).value()?, zero.value()?); + // a + b = b + a + let a_b = &a + &b; + let b_a = &b + &a; + assert_eq!(a_b.value()?, b_a.value()?); + a_b.enforce_equal(&b_a)?; + assert!(cs.is_satisfied().unwrap()); + + // (a + b) + a = a + (b + a) + let ab_a = &a_b + &a; + let a_ba = &a + &b_a; + assert_eq!(ab_a.value()?, a_ba.value()?); + ab_a.enforce_equal(&a_ba)?; + assert!(cs.is_satisfied().unwrap()); + + // a.double() = a + a + let a_a = &a + &a; + let mut a2 = a.clone(); + a2.double_in_place()?; + a2.enforce_equal(&a_a)?; + assert_eq!(a2.value()?, a_native.double()); + assert_eq!(a_a.value()?, a_native.double()); + assert_eq!(a2.value()?, a_a.value()?); + assert!(cs.is_satisfied().unwrap()); + + // b.double() = b + b + let mut b2 = b.clone(); + b2.double_in_place()?; + let b_b = &b + &b; + b2.enforce_equal(&b_b)?; + assert!(cs.is_satisfied().unwrap()); + assert_eq!(b2.value()?, b_b.value()?); + + let _ = a.to_bytes()?; + assert!(cs.is_satisfied().unwrap()); + let _ = a.to_non_unique_bytes()?; + assert!(cs.is_satisfied().unwrap()); + + let _ = b.to_bytes()?; + let _ = b.to_non_unique_bytes()?; + if !cs.is_satisfied().unwrap() { + panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); + } + assert!(cs.is_satisfied().unwrap()); + + let modulus = ::MODULUS.as_ref().to_vec(); + let mut max = modulus.clone(); + for limb in &mut max { + *limb = u64::MAX; + } + + let modulus_num_bits_mod_64 = ::MODULUS_BIT_SIZE % 64; + if modulus_num_bits_mod_64 != 0 { + *max.last_mut().unwrap() >>= 64 - modulus_num_bits_mod_64; + } + let scalars = [ + C::ScalarField::rand(&mut rng).into_bigint().as_ref().to_vec(), + vec![u64::rand(&mut rng)], + (-C::ScalarField::one()).into_bigint().as_ref().to_vec(), + ::MODULUS.as_ref().to_vec(), + max, + vec![0; 50], + vec![1000012341233u64; 36], + ]; + + let mut input = vec![]; + + // Check scalar mul with edge cases + for scalar in scalars.iter() { + let native_result = a_native.mul_bigint(scalar); + let native_result = native_result.into_affine(); + + let scalar_bits: Vec = BitIteratorLE::new(&scalar).collect(); + input = + Vec::new_witness(ark_relations::ns!(cs, "bits"), || Ok(scalar_bits)).unwrap(); + let result = a.scalar_mul_le(input.iter()).expect(&format!("Mode: {:?}", mode)); + let result_val = result.value()?.into_affine(); + assert_eq!( + result_val, native_result, + "gadget & native values are diff. after scalar mul {:?}", + scalar, + ); + assert!(cs.is_satisfied().unwrap()); + } + + let result = zero.scalar_mul_le(input.iter())?; + let result_val = result.value()?.into_affine(); + result.enforce_equal(&zero)?; + assert_eq!( + result_val, + C::zero().into_affine(), + "gadget & native values are diff. after scalar mul of zero" + ); + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn sw_test() -> Result<(), SynthesisError> + where + P: ark_ec::models::short_weierstrass::SWCurveConfig, + GG: CurveVar, ::BasePrimeField>, + for<'a> &'a GG: GroupOpsBounds<'a, SWProjective

, GG>, + { + group_test::, _, GG>()?; + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let mut rng = test_rng(); + + let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); + + let a = SWProjective::

::rand(&mut rng); + let b = SWProjective::

::rand(&mut rng); + let a_affine = a.into_affine(); + let b_affine = b.into_affine(); + + let ns = ark_relations::ns!(cs, "allocating variables"); + let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; + let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; + let zero = GG::zero(); + drop(ns); + assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); + assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); + assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); + assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); + assert_eq!(cs.which_is_unsatisfied().unwrap(), None); + + // Check addition + let ab = a + &b; + let ab_affine = ab.into_affine(); + let gadget_ab = &gadget_a + &gadget_b; + let gadget_ba = &gadget_b + &gadget_a; + gadget_ba.enforce_equal(&gadget_ab)?; + + let ab_val = gadget_ab.value()?.into_affine(); + assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); + assert!(cs.is_satisfied().unwrap()); + + let gadget_a_zero = &gadget_a + &zero; + gadget_a_zero.enforce_equal(&gadget_a)?; + + // Check doubling + let aa = &a.double(); + let aa_affine = aa.into_affine(); + gadget_a.double_in_place()?; + let aa_val = gadget_a.value()?.into_affine(); + assert_eq!(aa_val, aa_affine, "Gadget and native values are unequal after double."); + assert!(cs.is_satisfied().unwrap()); + + if !cs.is_satisfied().unwrap() { + panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } + + pub fn te_test() -> Result<(), SynthesisError> + where + P: ark_ec::twisted_edwards::TECurveConfig, + GG: CurveVar, ::BasePrimeField>, + for<'a> &'a GG: GroupOpsBounds<'a, TEProjective

, GG>, + { + group_test::, _, GG>()?; + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let mut rng = test_rng(); + + let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); + + let a = TEProjective::

::rand(&mut rng); + let b = TEProjective::

::rand(&mut rng); + let a_affine = a.into_affine(); + let b_affine = b.into_affine(); + + let ns = ark_relations::ns!(cs, "allocating variables"); + let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; + let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; + drop(ns); + + assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); + assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); + assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); + assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); + assert_eq!(cs.which_is_unsatisfied()?, None); + + // Check addition + let ab = a + &b; + let ab_affine = ab.into_affine(); + let gadget_ab = &gadget_a + &gadget_b; + let gadget_ba = &gadget_b + &gadget_a; + gadget_ba.enforce_equal(&gadget_ab)?; + + let ab_val = gadget_ab.value()?.into_affine(); + assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); + assert!(cs.is_satisfied().unwrap()); + + // Check doubling + let aa = &a.double(); + let aa_affine = aa.into_affine(); + gadget_a.double_in_place()?; + let aa_val = gadget_a.value()?.into_affine(); + assert_eq!(aa_val, aa_affine, "Gadget and native values are unequal after double."); + assert!(cs.is_satisfied().unwrap()); + + if !cs.is_satisfied().unwrap() { + panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); + } + + assert!(cs.is_satisfied().unwrap()); + } + Ok(()) + } } pub mod pairing { - use ark_ec::{ - pairing::{Pairing, PairingOutput}, - AffineRepr, CurveGroup, - }; - use ark_ff::{BitIteratorLE, Field, PrimeField}; - use ark_r1cs_std::prelude::*; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec, UniformRand}; - - #[allow(dead_code)] - pub fn bilinearity_test>() -> Result<(), SynthesisError> - where - for<'a> &'a P::G1Var: GroupOpsBounds<'a, E::G1, P::G1Var>, - for<'a> &'a P::G2Var: GroupOpsBounds<'a, E::G2, P::G2Var>, - for<'a> &'a P::GTVar: FieldOpsBounds<'a, E::TargetField, P::GTVar>, - { - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let cs = ConstraintSystem::<::BaseField>::new_ref(); - - let mut rng = test_rng(); - let a = E::G1::rand(&mut rng); - let b = E::G2::rand(&mut rng); - let s = E::ScalarField::rand(&mut rng); - - let mut sa = a; - sa *= s; - let mut sb = b; - sb *= s; - - let a_g = P::G1Var::new_variable(cs.clone(), || Ok(a.into_affine()), mode)?; - let b_g = P::G2Var::new_variable(cs.clone(), || Ok(b.into_affine()), mode)?; - let sa_g = P::G1Var::new_variable(cs.clone(), || Ok(sa.into_affine()), mode)?; - let sb_g = P::G2Var::new_variable(cs.clone(), || Ok(sb.into_affine()), mode)?; - - let mut _preparation_num_constraints = cs.num_constraints(); - let a_prep_g = P::prepare_g1(&a_g)?; - let b_prep_g = P::prepare_g2(&b_g)?; - _preparation_num_constraints = cs.num_constraints() - _preparation_num_constraints; - - let sa_prep_g = P::prepare_g1(&sa_g)?; - let sb_prep_g = P::prepare_g2(&sb_g)?; - - let (ans1_g, ans1_n) = { - let _ml_constraints = cs.num_constraints(); - let ml_g = P::miller_loop(&[sa_prep_g], &[b_prep_g.clone()])?; - let _fe_constraints = cs.num_constraints(); - let ans_g = P::final_exponentiation(&ml_g)?; - let ans_n = E::pairing(sa, b); - (ans_g, ans_n) - }; - - let (ans2_g, ans2_n) = { - let ans_g = P::pairing(a_prep_g.clone(), sb_prep_g)?; - let ans_n = E::pairing(a, sb); - (ans_g, ans_n) - }; - - let (ans3_g, ans3_n) = { - let s_iter = BitIteratorLE::without_trailing_zeros(s.into_bigint()) - .map(Boolean::constant) - .collect::>(); - - let mut ans_g = P::pairing(a_prep_g, b_prep_g)?; - let mut ans_n = E::pairing(a, b); - ans_n = PairingOutput(ans_n.0.pow(s.into_bigint())); - ans_g = ans_g.pow_le(&s_iter)?; - - (ans_g, ans_n) - }; - - ans1_g.enforce_equal(&ans2_g)?; - ans2_g.enforce_equal(&ans3_g)?; - - assert_eq!(ans1_g.value()?, ans1_n.0, "Failed native test 1"); - assert_eq!(ans2_g.value()?, ans2_n.0, "Failed native test 2"); - assert_eq!(ans3_g.value()?, ans3_n.0, "Failed native test 3"); - - assert_eq!(ans1_n.0, ans2_n.0, "Failed ans1_native == ans2_native"); - assert_eq!(ans2_n.0, ans3_n.0, "Failed ans2_native == ans3_native"); - assert_eq!(ans1_g.value()?, ans3_g.value()?, "Failed ans1 == ans3"); - assert_eq!(ans1_g.value()?, ans2_g.value()?, "Failed ans1 == ans2"); - assert_eq!(ans2_g.value()?, ans3_g.value()?, "Failed ans2 == ans3"); - - if !cs.is_satisfied().unwrap() { - panic!( - "Unsatisfied in mode {:?}.\n{:?}", - mode, - cs.which_is_unsatisfied().unwrap() - ); - } - - assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); - } - Ok(()) - } - - #[allow(dead_code)] - pub fn g2_prepare_consistency_test>() -> Result<(), SynthesisError> - { - let test_g2_elem = E::G2Affine::generator(); - let test_g2_prepared = E::G2Prepared::from(test_g2_elem.clone()); - - let modes = [ - AllocationMode::Input, - AllocationMode::Witness, - AllocationMode::Constant, - ]; - for &mode in &modes { - let cs = ConstraintSystem::new_ref(); - - let test_g2_gadget = - P::G2Var::new_witness(cs.clone(), || Ok(test_g2_elem.clone())).unwrap(); - - let prepared_test_g2_gadget = P::prepare_g2(&test_g2_gadget).unwrap(); - let allocated_test_g2_gadget = - P::G2PreparedVar::new_variable(cs.clone(), || Ok(test_g2_prepared.clone()), mode) - .unwrap(); - - let prepared_test_g2_gadget_bytes = prepared_test_g2_gadget.to_bytes().unwrap(); - let allocated_test_g2_gadget_bytes = allocated_test_g2_gadget.to_bytes().unwrap(); - - prepared_test_g2_gadget_bytes - .enforce_equal(&allocated_test_g2_gadget_bytes) - .unwrap(); - - assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); - } - Ok(()) - } + use ark_ec::{ + pairing::{Pairing, PairingOutput}, + AffineRepr, CurveGroup, + }; + use ark_ff::{BitIteratorLE, Field, PrimeField}; + use ark_r1cs_std::prelude::*; + use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; + use ark_std::{test_rng, vec::Vec, UniformRand}; + + #[allow(dead_code)] + pub fn bilinearity_test>() -> Result<(), SynthesisError> + where + for<'a> &'a P::G1Var: GroupOpsBounds<'a, E::G1, P::G1Var>, + for<'a> &'a P::G2Var: GroupOpsBounds<'a, E::G2, P::G2Var>, + for<'a> &'a P::GTVar: FieldOpsBounds<'a, E::TargetField, P::GTVar>, + { + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let cs = ConstraintSystem::<::BaseField>::new_ref(); + + let mut rng = test_rng(); + let a = E::G1::rand(&mut rng); + let b = E::G2::rand(&mut rng); + let s = E::ScalarField::rand(&mut rng); + + let mut sa = a; + sa *= s; + let mut sb = b; + sb *= s; + + let a_g = P::G1Var::new_variable(cs.clone(), || Ok(a.into_affine()), mode)?; + let b_g = P::G2Var::new_variable(cs.clone(), || Ok(b.into_affine()), mode)?; + let sa_g = P::G1Var::new_variable(cs.clone(), || Ok(sa.into_affine()), mode)?; + let sb_g = P::G2Var::new_variable(cs.clone(), || Ok(sb.into_affine()), mode)?; + + let mut _preparation_num_constraints = cs.num_constraints(); + let a_prep_g = P::prepare_g1(&a_g)?; + let b_prep_g = P::prepare_g2(&b_g)?; + _preparation_num_constraints = cs.num_constraints() - _preparation_num_constraints; + + let sa_prep_g = P::prepare_g1(&sa_g)?; + let sb_prep_g = P::prepare_g2(&sb_g)?; + + let (ans1_g, ans1_n) = { + let _ml_constraints = cs.num_constraints(); + let ml_g = P::miller_loop(&[sa_prep_g], &[b_prep_g.clone()])?; + let _fe_constraints = cs.num_constraints(); + let ans_g = P::final_exponentiation(&ml_g)?; + let ans_n = E::pairing(sa, b); + (ans_g, ans_n) + }; + + let (ans2_g, ans2_n) = { + let ans_g = P::pairing(a_prep_g.clone(), sb_prep_g)?; + let ans_n = E::pairing(a, sb); + (ans_g, ans_n) + }; + + let (ans3_g, ans3_n) = { + let s_iter = BitIteratorLE::without_trailing_zeros(s.into_bigint()) + .map(Boolean::constant) + .collect::>(); + + let mut ans_g = P::pairing(a_prep_g, b_prep_g)?; + let mut ans_n = E::pairing(a, b); + ans_n = PairingOutput(ans_n.0.pow(s.into_bigint())); + ans_g = ans_g.pow_le(&s_iter)?; + + (ans_g, ans_n) + }; + + ans1_g.enforce_equal(&ans2_g)?; + ans2_g.enforce_equal(&ans3_g)?; + + assert_eq!(ans1_g.value()?, ans1_n.0, "Failed native test 1"); + assert_eq!(ans2_g.value()?, ans2_n.0, "Failed native test 2"); + assert_eq!(ans3_g.value()?, ans3_n.0, "Failed native test 3"); + + assert_eq!(ans1_n.0, ans2_n.0, "Failed ans1_native == ans2_native"); + assert_eq!(ans2_n.0, ans3_n.0, "Failed ans2_native == ans3_native"); + assert_eq!(ans1_g.value()?, ans3_g.value()?, "Failed ans1 == ans3"); + assert_eq!(ans1_g.value()?, ans2_g.value()?, "Failed ans1 == ans2"); + assert_eq!(ans2_g.value()?, ans3_g.value()?, "Failed ans2 == ans3"); + + if !cs.is_satisfied().unwrap() { + panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); + } + + assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); + } + Ok(()) + } + + #[allow(dead_code)] + pub fn g2_prepare_consistency_test>() -> Result<(), SynthesisError> + { + let test_g2_elem = E::G2Affine::generator(); + let test_g2_prepared = E::G2Prepared::from(test_g2_elem.clone()); + + let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; + for &mode in &modes { + let cs = ConstraintSystem::new_ref(); + + let test_g2_gadget = + P::G2Var::new_witness(cs.clone(), || Ok(test_g2_elem.clone())).unwrap(); + + let prepared_test_g2_gadget = P::prepare_g2(&test_g2_gadget).unwrap(); + let allocated_test_g2_gadget = + P::G2PreparedVar::new_variable(cs.clone(), || Ok(test_g2_prepared.clone()), mode) + .unwrap(); + + let prepared_test_g2_gadget_bytes = prepared_test_g2_gadget.to_bytes().unwrap(); + let allocated_test_g2_gadget_bytes = allocated_test_g2_gadget.to_bytes().unwrap(); + + prepared_test_g2_gadget_bytes + .enforce_equal(&allocated_test_g2_gadget_bytes) + .unwrap(); + + assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); + } + Ok(()) + } } From 62a77aa105ead5f8cf48060f887430ab9df77c5f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 04:33:11 +0100 Subject: [PATCH 047/364] add ed_on_bls12_381 --- Cargo.lock | 378 ++++++++++++++---- Cargo.toml | 1 + .../ark_sub_bls12_381/src/lib.rs | 2 +- .../ark_sub_ed_on_bls12_381/Cargo.toml | 33 ++ .../benches/ed_on_bls12_381.rs | 9 + .../scripts/base_field.sage | 28 ++ .../scripts/scalar_field.sage | 28 ++ .../src/constraints/curves.rs | 16 + .../src/constraints/fields.rs | 9 + .../src/constraints/mod.rs | 107 +++++ .../ark_sub_ed_on_bls12_381/src/curves/mod.rs | 124 ++++++ .../src/curves/tests.rs | 5 + .../ark_sub_ed_on_bls12_381/src/fields/fq.rs | 1 + .../ark_sub_ed_on_bls12_381/src/fields/fr.rs | 7 + .../ark_sub_ed_on_bls12_381/src/fields/mod.rs | 8 + .../src/fields/tests.rs | 346 ++++++++++++++++ .../ark_sub_ed_on_bls12_381/src/lib.rs | 33 ++ primitives/arkworks-models/src/lib.rs | 2 +- 18 files changed, 1061 insertions(+), 76 deletions(-) create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs create mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 8ef86f8d11ced..37ed3bed258ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,6 +111,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "ansi_term" version = "0.12.1" @@ -141,14 +147,47 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" +[[package]] +name = "ark-algebra-bench-templates" +version = "0.4.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3d68347402ac48dd29fcf0b3a0cf6e0f7500e585a02113ea8b6c100baee05e" +dependencies = [ + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "criterion 0.4.0", + "paste", +] + [[package]] name = "ark-algebra-test-templates" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "hex", "num-bigint", @@ -165,8 +204,8 @@ name = "ark-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -175,9 +214,9 @@ name = "ark-bls12-381" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -187,8 +226,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -196,11 +235,11 @@ dependencies = [ name = "ark-curve-constraint-tests" version = "0.4.0-alpha.1" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -209,9 +248,25 @@ name = "ark-ec" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -226,8 +281,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -237,19 +292,38 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ff" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "digest 0.10.6", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", + "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", @@ -264,7 +338,16 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" dependencies = [ "quote", "syn", @@ -273,7 +356,19 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" dependencies = [ "num-bigint", "num-traits", @@ -286,10 +381,10 @@ dependencies = [ name = "ark-models" version = "0.4.0-alpha.5" dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -304,8 +399,20 @@ name = "ark-poly" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" dependencies = [ - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", +] + +[[package]] +name = "ark-poly" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -316,8 +423,8 @@ name = "ark-r1cs-std" version = "0.4.0-alpha.3" source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", @@ -333,7 +440,7 @@ version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "tracing", "tracing-subscriber", @@ -344,7 +451,7 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "tracing", ] @@ -352,9 +459,20 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "digest 0.10.6", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "digest 0.10.6", "num-bigint", @@ -363,7 +481,17 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" dependencies = [ "proc-macro2", "quote", @@ -394,15 +522,15 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-377", "ark-curve-constraint-tests", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "sp-io", ] @@ -411,12 +539,12 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -428,12 +556,29 @@ version = "0.4.0" source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.3.0", ] +[[package]] +name = "ark-sub-ed-on-bls12-381" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-bench-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-curve-constraint-tests", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "ark-sub-bls12-381 0.4.0", +] + [[package]] name = "array-bytes" version = "4.2.0" @@ -1121,6 +1266,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cid" version = "0.8.6" @@ -1170,10 +1342,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "bitflags", - "textwrap", + "textwrap 0.11.0", "unicode-width", ] +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "bitflags", + "clap_lex 0.2.4", + "indexmap", + "textwrap 0.16.0", +] + [[package]] name = "clap" version = "4.0.32" @@ -1182,7 +1366,7 @@ checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" dependencies = [ "bitflags", "clap_derive", - "clap_lex", + "clap_lex 0.3.0", "is-terminal", "once_cell", "strsim", @@ -1211,6 +1395,15 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "clap_lex" version = "0.3.0" @@ -1427,7 +1620,7 @@ dependencies = [ "atty", "cast", "clap 2.34.0", - "criterion-plot", + "criterion-plot 0.4.5", "csv", "futures", "itertools", @@ -1446,6 +1639,32 @@ dependencies = [ "walkdir", ] +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap 3.2.23", + "criterion-plot 0.5.0", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + [[package]] name = "criterion-plot" version = "0.4.5" @@ -1456,6 +1675,16 @@ dependencies = [ "itertools", ] +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -2487,7 +2716,7 @@ dependencies = [ name = "frame-system" version = "4.0.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "frame-support", "log", "parity-scale-codec", @@ -4629,7 +4858,7 @@ dependencies = [ "assert_cmd", "clap 4.0.32", "clap_complete", - "criterion", + "criterion 0.3.6", "frame-benchmarking-cli", "frame-system", "frame-system-rpc-runtime-api", @@ -4710,7 +4939,7 @@ dependencies = [ name = "node-executor" version = "3.0.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "frame-benchmarking", "frame-support", "frame-system", @@ -7746,7 +7975,7 @@ dependencies = [ name = "sc-client-db" version = "0.10.0-dev" dependencies = [ - "criterion", + "criterion 0.3.6", "hash-db", "kitchensink-runtime", "kvdb", @@ -8025,7 +8254,7 @@ name = "sc-executor" version = "0.10.0-dev" dependencies = [ "array-bytes", - "criterion", + "criterion 0.3.6", "env_logger", "lru", "num_cpus", @@ -8784,7 +9013,7 @@ dependencies = [ "ansi_term", "atty", "chrono", - "criterion", + "criterion 0.3.6", "lazy_static", "libc", "log", @@ -8825,7 +9054,7 @@ dependencies = [ "array-bytes", "assert_matches", "async-trait", - "criterion", + "criterion 0.3.6", "futures", "futures-timer", "linked-hash-map", @@ -9321,7 +9550,7 @@ dependencies = [ name = "sp-api-test" version = "2.0.1" dependencies = [ - "criterion", + "criterion 0.3.6", "futures", "log", "parity-scale-codec", @@ -9366,7 +9595,7 @@ dependencies = [ name = "sp-arithmetic" version = "6.0.0" dependencies = [ - "criterion", + "criterion 0.3.6", "integer-sqrt", "num-traits", "parity-scale-codec", @@ -9394,15 +9623,15 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", - "ark-ec", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", @@ -9581,7 +9810,7 @@ dependencies = [ "bitflags", "blake2", "byteorder", - "criterion", + "criterion 0.3.6", "dyn-clonable", "ed25519-zebra", "futures", @@ -10078,7 +10307,7 @@ version = "7.0.0" dependencies = [ "ahash 0.7.6", "array-bytes", - "criterion", + "criterion 0.3.6", "hash-db", "hashbrown 0.12.3", "lazy_static", @@ -10652,6 +10881,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" version = "1.0.38" @@ -10996,7 +11231,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5b26bd2cdd7641c5beb476b314c0cb1f629832bf21a6235f545e2d47bc9d05a" dependencies = [ - "criterion", + "criterion 0.3.6", "hash-db", "keccak-hasher", "memory-db", @@ -12071,8 +12306,3 @@ dependencies = [ "cc", "libc", ] - -[[patch.unused]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/Cargo.toml b/Cargo.toml index 4c07b10b2a263..f011a9d5f3ec8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -176,6 +176,7 @@ members = [ "primitives/arkworks", "primitives/arkworks-curves/ark_sub_bls12_381", "primitives/arkworks-curves/ark_sub_bls12_377", + "primitives/arkworks-curves/ark_sub_ed_on_bls12_381", "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs index 2b500b0714164..c78c3f4ca9a4e 100755 --- a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs @@ -27,6 +27,6 @@ #[cfg(feature = "curve")] mod curves; -pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr, Fq, Fq2, Fr}; +pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr, Fq, Fq2, Fr, FrConfig}; #[cfg(feature = "curve")] pub use curves::*; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml new file mode 100644 index 0000000000000..daeffd49bf557 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "ark-sub-ed-on-bls12-381" +version = "0.4.0-alpha.1" +authors = [ "arkworks contributors" ] +description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-ed-on-bls12-381/" +keywords = ["cryptography", "finite-fields", "elliptic-curves" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-ff = { version = "0.4.0-alpha", default-features = false } +ark-ec = { version = "0.4.0-alpha", default-features = false } +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } +ark-sub-bls12-381 = { version = "0.4.0-alpha", path = "../ark_sub_bls12_381", default-features = false, features = [ "scalar_field" ] } +ark-models = { path = "../../arkworks-models" } + +[dev-dependencies] +ark-relations = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } +ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } + +[features] +default = [] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "ark-sub-bls12-381/std" ] +r1cs = ["ark-r1cs-std"] \ No newline at end of file diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs new file mode 100644 index 0000000000000..c64c370fb9a1c --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs @@ -0,0 +1,9 @@ +use ark_algebra_bench_templates::*; +use ark_ed_on_bls12_381::{fq::Fq, fr::Fr, EdwardsProjective as G}; + +bench!( + Name = "EdOnBls12_381", + Group = G, + ScalarField = Fr, + PrimeBaseField = Fq, +); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage new file mode 100644 index 0000000000000..fb96ea80349ed --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage @@ -0,0 +1,28 @@ +modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 20): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage new file mode 100644 index 0000000000000..36af7a59c70a3 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage @@ -0,0 +1,28 @@ +modulus = 6554484396890773809930967563523245729705921265872317281365359162392183254199 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 20): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs new file mode 100644 index 0000000000000..6f3d85d3c044a --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs @@ -0,0 +1,16 @@ +use ark_r1cs_std::groups::curves::{short_weierstrass::ProjectiveVar, twisted_edwards::AffineVar}; + +use crate::{constraints::FqVar, *}; + +/// A variable that is the R1CS equivalent of `crate::EdwardsAffine`. +pub type EdwardsVar = AffineVar; + +/// A variable that is the R1CS equivalent of `crate::SWProjective` +pub type SWVar = ProjectiveVar; + +#[test] +fn test() { + ark_curve_constraint_tests::curves::te_test::<_, EdwardsVar>().unwrap(); + ark_curve_constraint_tests::curves::sw_test::<_, SWVar>().unwrap(); + ark_curve_constraint_tests::curves::group_test::<_, Fq, EdwardsVar>().unwrap(); +} diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs new file mode 100644 index 0000000000000..3f81d7a3f4d93 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs @@ -0,0 +1,9 @@ +use ark_r1cs_std::fields::fp::FpVar; + +/// A variable that is the R1CS equivalent of `crate::Fq`. +pub type FqVar = FpVar; + +#[test] +fn test() { + ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); +} diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs new file mode 100644 index 0000000000000..c6680fa2dce42 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs @@ -0,0 +1,107 @@ +//! This module implements the R1CS equivalent of `ark_ed_on_bls12_381`. +//! +//! It implements field variables for `crate::Fq`, +//! and group variables for `crate::Projective`. +//! +//! The field underlying these constraints is `crate::Fq`. +//! +//! # Examples +//! +//! One can perform standard algebraic operations on `FqVar`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! use ark_std::UniformRand; +//! use ark_relations::r1cs::*; +//! use ark_r1cs_std::prelude::*; +//! use ark_ed_on_bls12_381::{*, constraints::*}; +//! +//! let cs = ConstraintSystem::::new_ref(); +//! // This rng is just for test purposes; do not use it +//! // in real applications. +//! let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `Fq` elements. +//! let a_native = Fq::rand(&mut rng); +//! let b_native = Fq::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; +//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! let one = FqVar::one(); +//! let zero = FqVar::zero(); +//! +//! // Sanity check one + one = two +//! let two = &one + &one + &zero; +//! two.enforce_equal(&one.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that the value of &a * &b is correct. +//! assert_eq!((&a * &b).value()?, a_native * &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` +//! +//! One can also perform standard algebraic operations on `EdwardsVar`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! # use ark_std::UniformRand; +//! # use ark_relations::r1cs::*; +//! # use ark_r1cs_std::prelude::*; +//! # use ark_ed_on_bls12_381::{*, constraints::*}; +//! +//! # let cs = ConstraintSystem::::new_ref(); +//! # let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `Edwards` elements. +//! let a_native = EdwardsProjective::rand(&mut rng); +//! let b_native = EdwardsProjective::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = EdwardsVar::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; +//! let b = EdwardsVar::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! // This returns the identity of `Edwards`. +//! let zero = EdwardsVar::zero(); +//! +//! // Sanity check one + one = two +//! let two_a = &a + &a + &zero; +//! two_a.enforce_equal(&a.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` + +mod curves; +mod fields; + +pub use curves::*; +pub use fields::*; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs new file mode 100644 index 0000000000000..60623c8a412cf --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs @@ -0,0 +1,124 @@ +use ark_models::{ + models::CurveConfig, + short_weierstrass::{self, SWCurveConfig}, + twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, +}; +use ark_ff::MontFp; + +use crate::{Fq, Fr}; + +#[cfg(test)] +mod tests; + +pub type EdwardsAffine = Affine; +pub type EdwardsProjective = Projective; +pub type SWAffine = short_weierstrass::Affine; +pub type SWProjective = short_weierstrass::Projective; + +/// `JubJub` is a twisted Edwards curve. These curves have equations of the +/// form: ax² + y² = 1 - dx²y². +/// over some base finite field Fq. +/// +/// JubJub's curve equation: -x² + y² = 1 - (10240/10241)x²y² +/// +/// q = 52435875175126190479447740508185965837690552500527637822603658699938581184513. +/// +/// a = -1. +/// d = -(10240/10241) mod q +/// = 19257038036680949359750312669786877991949435402254120286184196891950884077233. +/// +/// Sage script to calculate these: +/// +/// ```text +/// q = 52435875175126190479447740508185965837690552500527637822603658699938581184513 +/// Fq = GF(q) +/// d = -(Fq(10240)/Fq(10241)) +/// ``` +/// These parameters and the sage script obtained from: +/// +/// +/// +/// `jubjub` also has a short Weierstrass curve form, following the +/// form: y² = x³ + A * x + B +/// where +/// +/// A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 +/// B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 +/// +/// We can use the script available +/// [here](https://github.com/zhenfeizhang/bandersnatch/blob/main/bandersnatch/script/jubjub.sage) +/// to convert between the different representations. +#[derive(Clone, Default, PartialEq, Eq)] +pub struct JubjubConfig; +pub type EdwardsConfig = JubjubConfig; +pub type SWConfig = JubjubConfig; + +impl CurveConfig for JubjubConfig { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = 8 + const COFACTOR: &'static [u64] = &[8]; + + /// COFACTOR^(-1) mod r = + /// 819310549611346726241370945440405716213240158234039660170669895299022906775 + const COFACTOR_INV: Fr = + MontFp!("819310549611346726241370945440405716213240158234039660170669895299022906775"); +} + +impl TECurveConfig for JubjubConfig { + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); + + /// COEFF_D = -(10240/10241) mod q + const COEFF_D: Fq = + MontFp!("19257038036680949359750312669786877991949435402254120286184196891950884077233"); + + /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) + const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); + + type MontCurveConfig = JubjubConfig; + + /// Multiplication by `a` is simply negation here. + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + -elem + } +} + +impl MontCurveConfig for JubjubConfig { + /// COEFF_A = 40962 + const COEFF_A: Fq = MontFp!("40962"); + + /// COEFF_B = -40964 + const COEFF_B: Fq = MontFp!("-40964"); + + type TECurveConfig = JubjubConfig; +} + +const GENERATOR_X: Fq = + MontFp!("8076246640662884909881801758704306714034609987455869804520522091855516602923"); + +const GENERATOR_Y: Fq = + MontFp!("13262374693698910701929044844600465831413122818447359594527400194675274060458"); + +impl SWCurveConfig for JubjubConfig { + /// COEFF_A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 + const COEFF_A: Self::BaseField = + MontFp!("52296097456646850916096512823759002727550416093741407922227928430486925478210"); + + /// COEFF_B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 + const COEFF_B: Self::BaseField = + MontFp!("48351165704696163914533707656614864561753505123260775585269522553028192119009"); + + /// generators + const GENERATOR: SWAffine = SWAffine::new_unchecked(SW_GENERATOR_X, SW_GENERATOR_Y); +} + +/// x coordinate for SW curve generator +const SW_GENERATOR_X: Fq = + MontFp!("33835869156188682335217394949746694649676633840125476177319971163079011318731"); + +/// y coordinate for SW curve generator +const SW_GENERATOR_Y: Fq = + MontFp!("43777270878440091394432848052353307184915192688165709016756678962558652055320"); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs new file mode 100644 index 0000000000000..7db74c27dadaa --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs @@ -0,0 +1,5 @@ +use crate::*; +use ark_algebra_test_templates::*; + +test_group!(sw; SWProjective; sw); +test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs new file mode 100644 index 0000000000000..334b706e899c0 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs @@ -0,0 +1 @@ +pub use ark_sub_bls12_381::{Fr as Fq, FrConfig as FqConfig}; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs new file mode 100644 index 0000000000000..e23e39879d76a --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs @@ -0,0 +1,7 @@ +use ark_ff::fields::{Fp256, MontBackend, MontConfig}; + +#[derive(MontConfig)] +#[modulus = "6554484396890773809930967563523245729705921265872317281365359162392183254199"] +#[generator = "6"] +pub struct FrConfig; +pub type Fr = Fp256>; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs new file mode 100644 index 0000000000000..7afba55578ef5 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs @@ -0,0 +1,8 @@ +pub mod fq; +pub mod fr; + +pub use fq::*; +pub use fr::*; + +#[cfg(test)] +mod tests; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs new file mode 100644 index 0000000000000..55ccd7b937b85 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs @@ -0,0 +1,346 @@ +use crate::{Fq, Fr}; +use ark_algebra_test_templates::*; +use ark_ff::{ + biginteger::BigInteger256 as BigInteger, + fields::{Field, LegendreSymbol::*}, + One, Zero, +}; +use ark_std::str::FromStr; + +test_field!(fr; Fr; mont_prime_field); +test_field!(fq; Fq; mont_prime_field); + +#[test] +fn test_fq_add() { + let f1 = Fq::from_str( + "18386742314266644595564329008376577163854043021652781768352795308532764650733", + ) + .unwrap(); + let f2 = Fq::from_str( + "39786307610986038981023499868190793548353538256264351797285876981647142458383", + ) + .unwrap(); + let f3 = Fq::from_str( + "5737174750126493097140088368381404874517028777389495743035013590241325924603", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 + &f2, f3); +} + +#[test] +fn test_fq_add_one() { + let f1 = Fq::from_str( + "4946875394261337176810256604189376311946643975348516311606738923340201185904", + ) + .unwrap(); + let f2 = Fq::from_str( + "4946875394261337176810256604189376311946643975348516311606738923340201185905", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert_eq!(f1 + &Fq::one(), f2); +} + +#[test] +fn test_fq_mul() { + let f1 = Fq::from_str( + "24703123148064348394273033316595937198355721297494556079070134653139656190956", + ) + .unwrap(); + let f2 = Fq::from_str( + "38196797080882758914424853878212529985425118523754343117256179679117054302131", + ) + .unwrap(); + let f3 = Fq::from_str( + "38057113854472161555556064369220825628027487067886761874351491955834635348140", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 * &f2, f3); +} + +#[test] +fn test_fq_triple_mul() { + let f1 = Fq::from_str( + "23834398828139479510988224171342199299644042568628082836691700490363123893905", + ) + .unwrap(); + let f2 = Fq::from_str( + "48343809612844640454129919255697536258606705076971130519928764925719046689317", + ) + .unwrap(); + let f3 = Fq::from_str( + "22704845471524346880579660022678666462201713488283356385810726260959369106033", + ) + .unwrap(); + let f4 = Fq::from_str( + "18897508522635316277030308074760673440128491438505204942623624791502972539393", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 * &f2 * &f3, f4); +} + +#[test] +fn test_fq_div() { + let f1 = Fq::from_str( + "31892744363926593013886463524057935370302352424137349660481695792871889573091", + ) + .unwrap(); + let f2 = Fq::from_str( + "47695868328933459965610498875668250916462767196500056002116961816137113470902", + ) + .unwrap(); + let f3 = Fq::from_str( + "29049672724678710659792141917402891276693777283079976086581207190825261000580", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 / &f2, f3); +} + +#[test] +fn test_fq_sub() { + let f1 = Fq::from_str( + "18695869713129401390241150743745601908470616448391638969502807001833388904079", + ) + .unwrap(); + let f2 = Fq::from_str( + "10105476028534616828778879109836101003805485072436929139123765141153277007373", + ) + .unwrap(); + let f3 = Fq::from_str( + "8590393684594784561462271633909500904665131375954709830379041860680111896706", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 - &f2, f3); +} + +#[test] +fn test_fq_double_in_place_thrice() { + let mut f1 = Fq::from_str( + "32768907806651393940832831055386272949401004221411141755415956893066040832473", + ) + .unwrap(); + let f3 = Fq::from_str( + "52407761752706389608871686410346320244445823769178582752913020344774001921732", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f3.is_zero()); + f1.double_in_place(); + f1.double_in_place(); + f1.double_in_place(); + assert_eq!(f1, f3); +} + +#[test] +fn test_fq_generate_random_ed_on_bls12_381_point() { + let d = Fq::from_str( + "19257038036680949359750312669786877991949435402254120286184196891950884077233", + ) + .unwrap(); + let y = Fq::from_str( + "20269054604167148422407276086932743904275456233139568486008667107872965128512", + ) + .unwrap(); + let x2 = Fq::from_str( + "35041048504708632193693740149219726446678304552734087046982753200179718192840", + ) + .unwrap(); + + let computed_y2 = y.square(); + let y2 = Fq::from_str( + "22730681238307918419349440108285755984465605552827817317611903495170775437833", + ) + .unwrap(); + assert_eq!(y2, computed_y2); + + let computed_dy2 = d * &computed_y2; + let dy2 = Fq::from_str( + "24720347560552809545835752815204882739669031262711919770503096707526812943411", + ) + .unwrap(); + assert_eq!(dy2, computed_dy2); + + let computed_divisor = computed_dy2 + &Fq::one(); + let divisor = Fq::from_str( + "24720347560552809545835752815204882739669031262711919770503096707526812943412", + ) + .unwrap(); + assert_eq!(divisor, computed_divisor); + + let computed_x2 = (computed_y2 - &Fq::one()) / &computed_divisor; + assert_eq!(x2, computed_x2); + + let x = Fq::from_str( + "15337652609730546173818014678723269532482775720866471265774032070871608223361", + ) + .unwrap(); + let computed_x = computed_x2.sqrt().unwrap(); + assert_eq!(computed_x.square(), x2); + assert_eq!(x, computed_x); + + fn add<'a>(curr: (Fq, Fq), other: &'a (Fq, Fq)) -> (Fq, Fq) { + let y1y2 = curr.1 * &other.1; + let x1x2 = curr.0 * &other.0; + let d = Fq::from_str( + "19257038036680949359750312669786877991949435402254120286184196891950884077233", + ) + .unwrap(); + let dx1x2y1y2 = d * &y1y2 * &x1x2; + + let d1 = Fq::one() + &dx1x2y1y2; + let d2 = Fq::one() - &dx1x2y1y2; + + let x1y2 = curr.0 * &other.1; + let y1x2 = curr.1 * &other.0; + + let x = (x1y2 + &y1x2) / &d1; + let y = (y1y2 + &x1x2) / &d2; + + (x, y) + } + + let result = add((x, y), &(x, y)); + let result = add(result, &result); + let result = add(result, &result); + + let point_x = Fq::from_str( + "47259664076168047050113154262636619161204477920503059672059915868534495873964", + ) + .unwrap(); + let point_y = Fq::from_str( + "19016409245280491801573912449420132838852726543024859389273314249842195919690", + ) + .unwrap(); + assert_eq!((point_x, point_y), result); +} + +#[test] +fn test_fq_square_in_place() { + let mut f1 = Fq::from_str( + "34864651240005695523200639428464570946052769938774601449735727714436878540682", + ) + .unwrap(); + let f3 = + Fq::from_str("213133100629336594719108316042277780359104840987226496279264105585804377948") + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f3.is_zero()); + f1.square_in_place(); + assert_eq!(f1, f3); +} + +#[test] +fn test_fq_from_str() { + let f1_from_repr = Fq::from(BigInteger::new([ + 0xab8a2535947d1a77, + 0x9ba74cbfda0bbcda, + 0xe928b59724d60baf, + 0x1cccaaeb9bb1680a, + ])); + let f1 = Fq::from_str( + "13026376210409056429264774981357153555336288129100724591327877625017068755575", + ) + .unwrap(); + let f2_from_repr = Fq::from(BigInteger::new([ + 0x97e9103775d2f35c, + 0xbe6756b6c587544b, + 0x6ee38c3afd88ef4b, + 0x2bacd150f540c677, + ])); + let f2 = Fq::from_str( + "19754794831832707859764530223239420866832328728734160755396495950822165902172", + ) + .unwrap(); + assert_eq!(f1_from_repr, f1); + assert_eq!(f2_from_repr, f2); +} + +#[test] +fn test_fq_legendre() { + assert_eq!(QuadraticResidue, Fq::one().legendre()); + assert_eq!(Zero, Fq::zero().legendre()); + + let e = BigInteger::new([ + 0x0dbc5349cd5664da, + 0x8ac5b6296e3ae29d, + 0x127cb819feceaa3b, + 0x3a6b21fb03867191, + ]); + assert_eq!(QuadraticResidue, Fq::from(e).legendre()); + let e = BigInteger::new([ + 0x96341aefd047c045, + 0x9b5f4254500a4d65, + 0x1ee08223b68ac240, + 0x31d9cd545c0ec7c6, + ]); + assert_eq!(QuadraticNonResidue, Fq::from(e).legendre()); +} + +#[test] +fn test_fr_add() { + let f1 = Fr::from(BigInteger::new([ + 0xc81265fb4130fe0c, + 0xb308836c14e22279, + 0x699e887f96bff372, + 0x84ecc7e76c11ad, + ])); + let f2 = Fr::from(BigInteger::new([ + 0x71875719b422efb8, + 0x43658e68a93612, + 0x9fa756be2011e833, + 0xaa2b2cb08dac497, + ])); + let f3 = Fr::from(BigInteger::new([ + 0x3999bd14f553edc4, + 0xb34be8fa7d8b588c, + 0x945df3db6d1dba5, + 0xb279f92f046d645, + ])); + assert_eq!(f1 + &f2, f3); +} + +#[test] +fn test_fr_mul() { + let f1 = Fr::from(BigInteger::new([ + 0xc81265fb4130fe0c, + 0xb308836c14e22279, + 0x699e887f96bff372, + 0x84ecc7e76c11ad, + ])); + let f2 = Fr::from(BigInteger::new([ + 0x71875719b422efb8, + 0x43658e68a93612, + 0x9fa756be2011e833, + 0xaa2b2cb08dac497, + ])); + let f3 = Fr::from(BigInteger::new([ + 0x6d6618ac6b4a8381, + 0x5b9eb35d711ee1da, + 0xce83310e6ac4105d, + 0x98032e0f206320a, + ])); + assert_eq!(f1 * &f2, f3); +} + +#[test] +fn test_fr_from_str() { + let f100_from_repr = Fr::from(BigInteger::new([0x64, 0, 0, 0])); + let f100 = Fr::from_str("100").unwrap(); + assert_eq!(f100_from_repr, f100); +} diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs new file mode 100644 index 0000000000000..3aa2a1586c035 --- /dev/null +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs @@ -0,0 +1,33 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![deny( + warnings, + unused, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +#![forbid(unsafe_code)] + +//! This library implements a twisted Edwards curve whose base field is the +//! scalar field of the curve BLS12-381. This allows defining cryptographic +//! primitives that use elliptic curves over the scalar field of the latter +//! curve. This curve was generated by Sean Bowe, and is also known as [Jubjub](https://github.com/zkcrypto/jubjub). +//! +//! Curve information: +//! * Base field: q = +//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 +//! * Scalar field: r = +//! 6554484396890773809930967563523245729705921265872317281365359162392183254199 +//! * Valuation(q - 1, 2) = 32 +//! * Valuation(r - 1, 2) = 1 +//! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where +//! * a = -1 +//! * d = -(10240/10241) + +#[cfg(feature = "r1cs")] +pub mod constraints; +mod curves; +mod fields; + +pub use curves::*; +pub use fields::*; diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 11872ff19f7d5..635adaf6ba829 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,2 +1,2 @@ pub mod bls12; -pub use ark_ec::{models, models::short_weierstrass, pairing, AffineRepr, CurveGroup, Group}; +pub use ark_ec::{models, models::short_weierstrass, pairing, AffineRepr, CurveGroup, Group, twisted_edwards}; From 111ae4f456f18eb12babbf58c30e618d05c1f03b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 04:58:22 +0100 Subject: [PATCH 048/364] add ed_on_bls12_381 msm host functions --- Cargo.lock | 1 + .../ark_sub_ed_on_bls12_381/Cargo.toml | 3 +- .../ark_sub_ed_on_bls12_381/src/curves/mod.rs | 30 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 37ed3bed258ee..96698a2a5c8d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -577,6 +577,7 @@ dependencies = [ "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0", + "sp-io", ] [[package]] diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml index daeffd49bf557..f25954df39fa2 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml @@ -17,12 +17,13 @@ ark-ff = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } +ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-sub-bls12-381 = { version = "0.4.0-alpha", path = "../ark_sub_bls12_381", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } +sp-io = { path = "../../io" } [dev-dependencies] ark-relations = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs index 60623c8a412cf..9977dec250a9c 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs @@ -4,6 +4,8 @@ use ark_models::{ twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; use ark_ff::MontFp; +use ark_std::{io::Cursor, vec, vec::Vec}; +use ark_serialize::{CanonicalSerialize, Compress, Validate}; use crate::{Fq, Fr}; @@ -113,6 +115,34 @@ impl SWCurveConfig for JubjubConfig { /// generators const GENERATOR: SWAffine = SWAffine::new_unchecked(SW_GENERATOR_X, SW_GENERATOR_Y); + + fn msm( + bases: &[SWAffine], + scalars: &[::ScalarField], + ) -> Result { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } } /// x coordinate for SW curve generator From 256b54217da354364b31982d97ea8ba0683cad4a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 04:59:54 +0100 Subject: [PATCH 049/364] add ed_on_bls12_381 mul_projective host functions --- .../ark_sub_ed_on_bls12_381/src/curves/mod.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs index 9977dec250a9c..89699f3d137a2 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs @@ -143,6 +143,23 @@ impl SWCurveConfig for JubjubConfig { let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); Ok(result.into()) } + + fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } /// x coordinate for SW curve generator From 29552a8b39ccb8f089c1698cbfa17083b470d389 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 05:00:56 +0100 Subject: [PATCH 050/364] add ed_on_bls12_381 mul_affine host functions --- .../ark_sub_ed_on_bls12_381/src/curves/mod.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs index 89699f3d137a2..7c2792071b590 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs @@ -157,6 +157,23 @@ impl SWCurveConfig for JubjubConfig { let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); result.into() } From 90a040f78d783c47fa604afde6ea601692f1d0fe Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 05:01:21 +0100 Subject: [PATCH 051/364] fmt --- .../benches/ed_on_bls12_381.rs | 7 +- .../src/constraints/curves.rs | 6 +- .../src/constraints/fields.rs | 2 +- .../ark_sub_ed_on_bls12_381/src/curves/mod.rs | 116 ++-- .../src/fields/tests.rs | 538 +++++++++--------- .../ark_sub_ed_on_bls12_381/src/lib.rs | 14 +- primitives/arkworks-models/src/lib.rs | 4 +- 7 files changed, 346 insertions(+), 341 deletions(-) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs index c64c370fb9a1c..762c687e7301d 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs @@ -1,9 +1,4 @@ use ark_algebra_bench_templates::*; use ark_ed_on_bls12_381::{fq::Fq, fr::Fr, EdwardsProjective as G}; -bench!( - Name = "EdOnBls12_381", - Group = G, - ScalarField = Fr, - PrimeBaseField = Fq, -); +bench!(Name = "EdOnBls12_381", Group = G, ScalarField = Fr, PrimeBaseField = Fq,); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs index 6f3d85d3c044a..e9153807bd097 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs @@ -10,7 +10,7 @@ pub type SWVar = ProjectiveVar; #[test] fn test() { - ark_curve_constraint_tests::curves::te_test::<_, EdwardsVar>().unwrap(); - ark_curve_constraint_tests::curves::sw_test::<_, SWVar>().unwrap(); - ark_curve_constraint_tests::curves::group_test::<_, Fq, EdwardsVar>().unwrap(); + ark_curve_constraint_tests::curves::te_test::<_, EdwardsVar>().unwrap(); + ark_curve_constraint_tests::curves::sw_test::<_, SWVar>().unwrap(); + ark_curve_constraint_tests::curves::group_test::<_, Fq, EdwardsVar>().unwrap(); } diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs index 3f81d7a3f4d93..542d6c5244bef 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs @@ -5,5 +5,5 @@ pub type FqVar = FpVar; #[test] fn test() { - ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); + ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); } diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs index 7c2792071b590..9718aa732090c 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs @@ -1,11 +1,11 @@ +use ark_ff::MontFp; use ark_models::{ - models::CurveConfig, - short_weierstrass::{self, SWCurveConfig}, - twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, + models::CurveConfig, + short_weierstrass::{self, SWCurveConfig}, + twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; -use ark_ff::MontFp; -use ark_std::{io::Cursor, vec, vec::Vec}; use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{Fq, Fr}; @@ -56,67 +56,67 @@ pub type EdwardsConfig = JubjubConfig; pub type SWConfig = JubjubConfig; impl CurveConfig for JubjubConfig { - type BaseField = Fq; - type ScalarField = Fr; + type BaseField = Fq; + type ScalarField = Fr; - /// COFACTOR = 8 - const COFACTOR: &'static [u64] = &[8]; + /// COFACTOR = 8 + const COFACTOR: &'static [u64] = &[8]; - /// COFACTOR^(-1) mod r = - /// 819310549611346726241370945440405716213240158234039660170669895299022906775 - const COFACTOR_INV: Fr = - MontFp!("819310549611346726241370945440405716213240158234039660170669895299022906775"); + /// COFACTOR^(-1) mod r = + /// 819310549611346726241370945440405716213240158234039660170669895299022906775 + const COFACTOR_INV: Fr = + MontFp!("819310549611346726241370945440405716213240158234039660170669895299022906775"); } impl TECurveConfig for JubjubConfig { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); - /// COEFF_D = -(10240/10241) mod q - const COEFF_D: Fq = - MontFp!("19257038036680949359750312669786877991949435402254120286184196891950884077233"); + /// COEFF_D = -(10240/10241) mod q + const COEFF_D: Fq = + MontFp!("19257038036680949359750312669786877991949435402254120286184196891950884077233"); - /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) - const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); + /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) + const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); - type MontCurveConfig = JubjubConfig; + type MontCurveConfig = JubjubConfig; - /// Multiplication by `a` is simply negation here. - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - -elem - } + /// Multiplication by `a` is simply negation here. + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + -elem + } } impl MontCurveConfig for JubjubConfig { - /// COEFF_A = 40962 - const COEFF_A: Fq = MontFp!("40962"); + /// COEFF_A = 40962 + const COEFF_A: Fq = MontFp!("40962"); - /// COEFF_B = -40964 - const COEFF_B: Fq = MontFp!("-40964"); + /// COEFF_B = -40964 + const COEFF_B: Fq = MontFp!("-40964"); - type TECurveConfig = JubjubConfig; + type TECurveConfig = JubjubConfig; } const GENERATOR_X: Fq = - MontFp!("8076246640662884909881801758704306714034609987455869804520522091855516602923"); + MontFp!("8076246640662884909881801758704306714034609987455869804520522091855516602923"); const GENERATOR_Y: Fq = - MontFp!("13262374693698910701929044844600465831413122818447359594527400194675274060458"); + MontFp!("13262374693698910701929044844600465831413122818447359594527400194675274060458"); impl SWCurveConfig for JubjubConfig { - /// COEFF_A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 - const COEFF_A: Self::BaseField = - MontFp!("52296097456646850916096512823759002727550416093741407922227928430486925478210"); + /// COEFF_A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 + const COEFF_A: Self::BaseField = + MontFp!("52296097456646850916096512823759002727550416093741407922227928430486925478210"); - /// COEFF_B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 - const COEFF_B: Self::BaseField = - MontFp!("48351165704696163914533707656614864561753505123260775585269522553028192119009"); + /// COEFF_B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 + const COEFF_B: Self::BaseField = + MontFp!("48351165704696163914533707656614864561753505123260775585269522553028192119009"); - /// generators - const GENERATOR: SWAffine = SWAffine::new_unchecked(SW_GENERATOR_X, SW_GENERATOR_Y); + /// generators + const GENERATOR: SWAffine = SWAffine::new_unchecked(SW_GENERATOR_X, SW_GENERATOR_Y); - fn msm( + fn msm( bases: &[SWAffine], scalars: &[::ScalarField], ) -> Result { @@ -140,11 +140,16 @@ impl SWCurveConfig for JubjubConfig { .collect(); let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = ::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); Ok(result.into()) } - fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { + fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -153,15 +158,21 @@ impl SWCurveConfig for JubjubConfig { let mut cursor = Cursor::new(&mut serialized_scalar[..]); scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); + let result = + sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = ::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); result.into() } - fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { + fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -174,15 +185,20 @@ impl SWCurveConfig for JubjubConfig { let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let result = ::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); result.into() } } /// x coordinate for SW curve generator const SW_GENERATOR_X: Fq = - MontFp!("33835869156188682335217394949746694649676633840125476177319971163079011318731"); + MontFp!("33835869156188682335217394949746694649676633840125476177319971163079011318731"); /// y coordinate for SW curve generator const SW_GENERATOR_Y: Fq = - MontFp!("43777270878440091394432848052353307184915192688165709016756678962558652055320"); + MontFp!("43777270878440091394432848052353307184915192688165709016756678962558652055320"); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs index 55ccd7b937b85..df726665645f1 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs @@ -1,9 +1,9 @@ use crate::{Fq, Fr}; use ark_algebra_test_templates::*; use ark_ff::{ - biginteger::BigInteger256 as BigInteger, - fields::{Field, LegendreSymbol::*}, - One, Zero, + biginteger::BigInteger256 as BigInteger, + fields::{Field, LegendreSymbol::*}, + One, Zero, }; use ark_std::str::FromStr; @@ -12,335 +12,335 @@ test_field!(fq; Fq; mont_prime_field); #[test] fn test_fq_add() { - let f1 = Fq::from_str( - "18386742314266644595564329008376577163854043021652781768352795308532764650733", - ) - .unwrap(); - let f2 = Fq::from_str( - "39786307610986038981023499868190793548353538256264351797285876981647142458383", - ) - .unwrap(); - let f3 = Fq::from_str( - "5737174750126493097140088368381404874517028777389495743035013590241325924603", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 + &f2, f3); + let f1 = Fq::from_str( + "18386742314266644595564329008376577163854043021652781768352795308532764650733", + ) + .unwrap(); + let f2 = Fq::from_str( + "39786307610986038981023499868190793548353538256264351797285876981647142458383", + ) + .unwrap(); + let f3 = Fq::from_str( + "5737174750126493097140088368381404874517028777389495743035013590241325924603", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 + &f2, f3); } #[test] fn test_fq_add_one() { - let f1 = Fq::from_str( - "4946875394261337176810256604189376311946643975348516311606738923340201185904", - ) - .unwrap(); - let f2 = Fq::from_str( - "4946875394261337176810256604189376311946643975348516311606738923340201185905", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert_eq!(f1 + &Fq::one(), f2); + let f1 = Fq::from_str( + "4946875394261337176810256604189376311946643975348516311606738923340201185904", + ) + .unwrap(); + let f2 = Fq::from_str( + "4946875394261337176810256604189376311946643975348516311606738923340201185905", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert_eq!(f1 + &Fq::one(), f2); } #[test] fn test_fq_mul() { - let f1 = Fq::from_str( - "24703123148064348394273033316595937198355721297494556079070134653139656190956", - ) - .unwrap(); - let f2 = Fq::from_str( - "38196797080882758914424853878212529985425118523754343117256179679117054302131", - ) - .unwrap(); - let f3 = Fq::from_str( - "38057113854472161555556064369220825628027487067886761874351491955834635348140", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 * &f2, f3); + let f1 = Fq::from_str( + "24703123148064348394273033316595937198355721297494556079070134653139656190956", + ) + .unwrap(); + let f2 = Fq::from_str( + "38196797080882758914424853878212529985425118523754343117256179679117054302131", + ) + .unwrap(); + let f3 = Fq::from_str( + "38057113854472161555556064369220825628027487067886761874351491955834635348140", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 * &f2, f3); } #[test] fn test_fq_triple_mul() { - let f1 = Fq::from_str( - "23834398828139479510988224171342199299644042568628082836691700490363123893905", - ) - .unwrap(); - let f2 = Fq::from_str( - "48343809612844640454129919255697536258606705076971130519928764925719046689317", - ) - .unwrap(); - let f3 = Fq::from_str( - "22704845471524346880579660022678666462201713488283356385810726260959369106033", - ) - .unwrap(); - let f4 = Fq::from_str( - "18897508522635316277030308074760673440128491438505204942623624791502972539393", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 * &f2 * &f3, f4); + let f1 = Fq::from_str( + "23834398828139479510988224171342199299644042568628082836691700490363123893905", + ) + .unwrap(); + let f2 = Fq::from_str( + "48343809612844640454129919255697536258606705076971130519928764925719046689317", + ) + .unwrap(); + let f3 = Fq::from_str( + "22704845471524346880579660022678666462201713488283356385810726260959369106033", + ) + .unwrap(); + let f4 = Fq::from_str( + "18897508522635316277030308074760673440128491438505204942623624791502972539393", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 * &f2 * &f3, f4); } #[test] fn test_fq_div() { - let f1 = Fq::from_str( - "31892744363926593013886463524057935370302352424137349660481695792871889573091", - ) - .unwrap(); - let f2 = Fq::from_str( - "47695868328933459965610498875668250916462767196500056002116961816137113470902", - ) - .unwrap(); - let f3 = Fq::from_str( - "29049672724678710659792141917402891276693777283079976086581207190825261000580", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 / &f2, f3); + let f1 = Fq::from_str( + "31892744363926593013886463524057935370302352424137349660481695792871889573091", + ) + .unwrap(); + let f2 = Fq::from_str( + "47695868328933459965610498875668250916462767196500056002116961816137113470902", + ) + .unwrap(); + let f3 = Fq::from_str( + "29049672724678710659792141917402891276693777283079976086581207190825261000580", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 / &f2, f3); } #[test] fn test_fq_sub() { - let f1 = Fq::from_str( - "18695869713129401390241150743745601908470616448391638969502807001833388904079", - ) - .unwrap(); - let f2 = Fq::from_str( - "10105476028534616828778879109836101003805485072436929139123765141153277007373", - ) - .unwrap(); - let f3 = Fq::from_str( - "8590393684594784561462271633909500904665131375954709830379041860680111896706", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 - &f2, f3); + let f1 = Fq::from_str( + "18695869713129401390241150743745601908470616448391638969502807001833388904079", + ) + .unwrap(); + let f2 = Fq::from_str( + "10105476028534616828778879109836101003805485072436929139123765141153277007373", + ) + .unwrap(); + let f3 = Fq::from_str( + "8590393684594784561462271633909500904665131375954709830379041860680111896706", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f2.is_zero()); + assert!(!f3.is_zero()); + assert_eq!(f1 - &f2, f3); } #[test] fn test_fq_double_in_place_thrice() { - let mut f1 = Fq::from_str( - "32768907806651393940832831055386272949401004221411141755415956893066040832473", - ) - .unwrap(); - let f3 = Fq::from_str( - "52407761752706389608871686410346320244445823769178582752913020344774001921732", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f3.is_zero()); - f1.double_in_place(); - f1.double_in_place(); - f1.double_in_place(); - assert_eq!(f1, f3); + let mut f1 = Fq::from_str( + "32768907806651393940832831055386272949401004221411141755415956893066040832473", + ) + .unwrap(); + let f3 = Fq::from_str( + "52407761752706389608871686410346320244445823769178582752913020344774001921732", + ) + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f3.is_zero()); + f1.double_in_place(); + f1.double_in_place(); + f1.double_in_place(); + assert_eq!(f1, f3); } #[test] fn test_fq_generate_random_ed_on_bls12_381_point() { - let d = Fq::from_str( - "19257038036680949359750312669786877991949435402254120286184196891950884077233", - ) - .unwrap(); - let y = Fq::from_str( - "20269054604167148422407276086932743904275456233139568486008667107872965128512", - ) - .unwrap(); - let x2 = Fq::from_str( - "35041048504708632193693740149219726446678304552734087046982753200179718192840", - ) - .unwrap(); + let d = Fq::from_str( + "19257038036680949359750312669786877991949435402254120286184196891950884077233", + ) + .unwrap(); + let y = Fq::from_str( + "20269054604167148422407276086932743904275456233139568486008667107872965128512", + ) + .unwrap(); + let x2 = Fq::from_str( + "35041048504708632193693740149219726446678304552734087046982753200179718192840", + ) + .unwrap(); - let computed_y2 = y.square(); - let y2 = Fq::from_str( - "22730681238307918419349440108285755984465605552827817317611903495170775437833", - ) - .unwrap(); - assert_eq!(y2, computed_y2); + let computed_y2 = y.square(); + let y2 = Fq::from_str( + "22730681238307918419349440108285755984465605552827817317611903495170775437833", + ) + .unwrap(); + assert_eq!(y2, computed_y2); - let computed_dy2 = d * &computed_y2; - let dy2 = Fq::from_str( - "24720347560552809545835752815204882739669031262711919770503096707526812943411", - ) - .unwrap(); - assert_eq!(dy2, computed_dy2); + let computed_dy2 = d * &computed_y2; + let dy2 = Fq::from_str( + "24720347560552809545835752815204882739669031262711919770503096707526812943411", + ) + .unwrap(); + assert_eq!(dy2, computed_dy2); - let computed_divisor = computed_dy2 + &Fq::one(); - let divisor = Fq::from_str( - "24720347560552809545835752815204882739669031262711919770503096707526812943412", - ) - .unwrap(); - assert_eq!(divisor, computed_divisor); + let computed_divisor = computed_dy2 + &Fq::one(); + let divisor = Fq::from_str( + "24720347560552809545835752815204882739669031262711919770503096707526812943412", + ) + .unwrap(); + assert_eq!(divisor, computed_divisor); - let computed_x2 = (computed_y2 - &Fq::one()) / &computed_divisor; - assert_eq!(x2, computed_x2); + let computed_x2 = (computed_y2 - &Fq::one()) / &computed_divisor; + assert_eq!(x2, computed_x2); - let x = Fq::from_str( - "15337652609730546173818014678723269532482775720866471265774032070871608223361", - ) - .unwrap(); - let computed_x = computed_x2.sqrt().unwrap(); - assert_eq!(computed_x.square(), x2); - assert_eq!(x, computed_x); + let x = Fq::from_str( + "15337652609730546173818014678723269532482775720866471265774032070871608223361", + ) + .unwrap(); + let computed_x = computed_x2.sqrt().unwrap(); + assert_eq!(computed_x.square(), x2); + assert_eq!(x, computed_x); - fn add<'a>(curr: (Fq, Fq), other: &'a (Fq, Fq)) -> (Fq, Fq) { - let y1y2 = curr.1 * &other.1; - let x1x2 = curr.0 * &other.0; - let d = Fq::from_str( - "19257038036680949359750312669786877991949435402254120286184196891950884077233", - ) - .unwrap(); - let dx1x2y1y2 = d * &y1y2 * &x1x2; + fn add<'a>(curr: (Fq, Fq), other: &'a (Fq, Fq)) -> (Fq, Fq) { + let y1y2 = curr.1 * &other.1; + let x1x2 = curr.0 * &other.0; + let d = Fq::from_str( + "19257038036680949359750312669786877991949435402254120286184196891950884077233", + ) + .unwrap(); + let dx1x2y1y2 = d * &y1y2 * &x1x2; - let d1 = Fq::one() + &dx1x2y1y2; - let d2 = Fq::one() - &dx1x2y1y2; + let d1 = Fq::one() + &dx1x2y1y2; + let d2 = Fq::one() - &dx1x2y1y2; - let x1y2 = curr.0 * &other.1; - let y1x2 = curr.1 * &other.0; + let x1y2 = curr.0 * &other.1; + let y1x2 = curr.1 * &other.0; - let x = (x1y2 + &y1x2) / &d1; - let y = (y1y2 + &x1x2) / &d2; + let x = (x1y2 + &y1x2) / &d1; + let y = (y1y2 + &x1x2) / &d2; - (x, y) - } + (x, y) + } - let result = add((x, y), &(x, y)); - let result = add(result, &result); - let result = add(result, &result); + let result = add((x, y), &(x, y)); + let result = add(result, &result); + let result = add(result, &result); - let point_x = Fq::from_str( - "47259664076168047050113154262636619161204477920503059672059915868534495873964", - ) - .unwrap(); - let point_y = Fq::from_str( - "19016409245280491801573912449420132838852726543024859389273314249842195919690", - ) - .unwrap(); - assert_eq!((point_x, point_y), result); + let point_x = Fq::from_str( + "47259664076168047050113154262636619161204477920503059672059915868534495873964", + ) + .unwrap(); + let point_y = Fq::from_str( + "19016409245280491801573912449420132838852726543024859389273314249842195919690", + ) + .unwrap(); + assert_eq!((point_x, point_y), result); } #[test] fn test_fq_square_in_place() { - let mut f1 = Fq::from_str( - "34864651240005695523200639428464570946052769938774601449735727714436878540682", - ) - .unwrap(); - let f3 = - Fq::from_str("213133100629336594719108316042277780359104840987226496279264105585804377948") - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f3.is_zero()); - f1.square_in_place(); - assert_eq!(f1, f3); + let mut f1 = Fq::from_str( + "34864651240005695523200639428464570946052769938774601449735727714436878540682", + ) + .unwrap(); + let f3 = + Fq::from_str("213133100629336594719108316042277780359104840987226496279264105585804377948") + .unwrap(); + assert!(!f1.is_zero()); + assert!(!f3.is_zero()); + f1.square_in_place(); + assert_eq!(f1, f3); } #[test] fn test_fq_from_str() { - let f1_from_repr = Fq::from(BigInteger::new([ - 0xab8a2535947d1a77, - 0x9ba74cbfda0bbcda, - 0xe928b59724d60baf, - 0x1cccaaeb9bb1680a, - ])); - let f1 = Fq::from_str( - "13026376210409056429264774981357153555336288129100724591327877625017068755575", - ) - .unwrap(); - let f2_from_repr = Fq::from(BigInteger::new([ - 0x97e9103775d2f35c, - 0xbe6756b6c587544b, - 0x6ee38c3afd88ef4b, - 0x2bacd150f540c677, - ])); - let f2 = Fq::from_str( - "19754794831832707859764530223239420866832328728734160755396495950822165902172", - ) - .unwrap(); - assert_eq!(f1_from_repr, f1); - assert_eq!(f2_from_repr, f2); + let f1_from_repr = Fq::from(BigInteger::new([ + 0xab8a2535947d1a77, + 0x9ba74cbfda0bbcda, + 0xe928b59724d60baf, + 0x1cccaaeb9bb1680a, + ])); + let f1 = Fq::from_str( + "13026376210409056429264774981357153555336288129100724591327877625017068755575", + ) + .unwrap(); + let f2_from_repr = Fq::from(BigInteger::new([ + 0x97e9103775d2f35c, + 0xbe6756b6c587544b, + 0x6ee38c3afd88ef4b, + 0x2bacd150f540c677, + ])); + let f2 = Fq::from_str( + "19754794831832707859764530223239420866832328728734160755396495950822165902172", + ) + .unwrap(); + assert_eq!(f1_from_repr, f1); + assert_eq!(f2_from_repr, f2); } #[test] fn test_fq_legendre() { - assert_eq!(QuadraticResidue, Fq::one().legendre()); - assert_eq!(Zero, Fq::zero().legendre()); + assert_eq!(QuadraticResidue, Fq::one().legendre()); + assert_eq!(Zero, Fq::zero().legendre()); - let e = BigInteger::new([ - 0x0dbc5349cd5664da, - 0x8ac5b6296e3ae29d, - 0x127cb819feceaa3b, - 0x3a6b21fb03867191, - ]); - assert_eq!(QuadraticResidue, Fq::from(e).legendre()); - let e = BigInteger::new([ - 0x96341aefd047c045, - 0x9b5f4254500a4d65, - 0x1ee08223b68ac240, - 0x31d9cd545c0ec7c6, - ]); - assert_eq!(QuadraticNonResidue, Fq::from(e).legendre()); + let e = BigInteger::new([ + 0x0dbc5349cd5664da, + 0x8ac5b6296e3ae29d, + 0x127cb819feceaa3b, + 0x3a6b21fb03867191, + ]); + assert_eq!(QuadraticResidue, Fq::from(e).legendre()); + let e = BigInteger::new([ + 0x96341aefd047c045, + 0x9b5f4254500a4d65, + 0x1ee08223b68ac240, + 0x31d9cd545c0ec7c6, + ]); + assert_eq!(QuadraticNonResidue, Fq::from(e).legendre()); } #[test] fn test_fr_add() { - let f1 = Fr::from(BigInteger::new([ - 0xc81265fb4130fe0c, - 0xb308836c14e22279, - 0x699e887f96bff372, - 0x84ecc7e76c11ad, - ])); - let f2 = Fr::from(BigInteger::new([ - 0x71875719b422efb8, - 0x43658e68a93612, - 0x9fa756be2011e833, - 0xaa2b2cb08dac497, - ])); - let f3 = Fr::from(BigInteger::new([ - 0x3999bd14f553edc4, - 0xb34be8fa7d8b588c, - 0x945df3db6d1dba5, - 0xb279f92f046d645, - ])); - assert_eq!(f1 + &f2, f3); + let f1 = Fr::from(BigInteger::new([ + 0xc81265fb4130fe0c, + 0xb308836c14e22279, + 0x699e887f96bff372, + 0x84ecc7e76c11ad, + ])); + let f2 = Fr::from(BigInteger::new([ + 0x71875719b422efb8, + 0x43658e68a93612, + 0x9fa756be2011e833, + 0xaa2b2cb08dac497, + ])); + let f3 = Fr::from(BigInteger::new([ + 0x3999bd14f553edc4, + 0xb34be8fa7d8b588c, + 0x945df3db6d1dba5, + 0xb279f92f046d645, + ])); + assert_eq!(f1 + &f2, f3); } #[test] fn test_fr_mul() { - let f1 = Fr::from(BigInteger::new([ - 0xc81265fb4130fe0c, - 0xb308836c14e22279, - 0x699e887f96bff372, - 0x84ecc7e76c11ad, - ])); - let f2 = Fr::from(BigInteger::new([ - 0x71875719b422efb8, - 0x43658e68a93612, - 0x9fa756be2011e833, - 0xaa2b2cb08dac497, - ])); - let f3 = Fr::from(BigInteger::new([ - 0x6d6618ac6b4a8381, - 0x5b9eb35d711ee1da, - 0xce83310e6ac4105d, - 0x98032e0f206320a, - ])); - assert_eq!(f1 * &f2, f3); + let f1 = Fr::from(BigInteger::new([ + 0xc81265fb4130fe0c, + 0xb308836c14e22279, + 0x699e887f96bff372, + 0x84ecc7e76c11ad, + ])); + let f2 = Fr::from(BigInteger::new([ + 0x71875719b422efb8, + 0x43658e68a93612, + 0x9fa756be2011e833, + 0xaa2b2cb08dac497, + ])); + let f3 = Fr::from(BigInteger::new([ + 0x6d6618ac6b4a8381, + 0x5b9eb35d711ee1da, + 0xce83310e6ac4105d, + 0x98032e0f206320a, + ])); + assert_eq!(f1 * &f2, f3); } #[test] fn test_fr_from_str() { - let f100_from_repr = Fr::from(BigInteger::new([0x64, 0, 0, 0])); - let f100 = Fr::from_str("100").unwrap(); - assert_eq!(f100_from_repr, f100); + let f100_from_repr = Fr::from(BigInteger::new([0x64, 0, 0, 0])); + let f100 = Fr::from_str("100").unwrap(); + assert_eq!(f100_from_repr, f100); } diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs index 3aa2a1586c035..15ed0441bbfc9 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs @@ -1,11 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - warnings, - unused, - future_incompatible, - nonstandard_style, - rust_2018_idioms -)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements a twisted Edwards curve whose base field is the @@ -14,10 +8,8 @@ //! curve. This curve was generated by Sean Bowe, and is also known as [Jubjub](https://github.com/zkcrypto/jubjub). //! //! Curve information: -//! * Base field: q = -//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 -//! * Scalar field: r = -//! 6554484396890773809930967563523245729705921265872317281365359162392183254199 +//! * Base field: q = 52435875175126190479447740508185965837690552500527637822603658699938581184513 +//! * Scalar field: r = 6554484396890773809930967563523245729705921265872317281365359162392183254199 //! * Valuation(q - 1, 2) = 32 //! * Valuation(r - 1, 2) = 1 //! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 635adaf6ba829..882fa40c8e265 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,2 +1,4 @@ pub mod bls12; -pub use ark_ec::{models, models::short_weierstrass, pairing, AffineRepr, CurveGroup, Group, twisted_edwards}; +pub use ark_ec::{ + models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, +}; From c0d2c532ba8961ac1a5fe672424ad473cfe956d5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 05:16:14 +0100 Subject: [PATCH 052/364] deeplink ed curve --- Cargo.lock | 1 + Cargo.toml | 6 +- .../benches/ed_on_bls12_381.rs | 4 - .../scripts/base_field.sage | 28 -- .../scripts/scalar_field.sage | 28 -- .../src/constraints/curves.rs | 16 - .../src/constraints/fields.rs | 9 - .../src/constraints/mod.rs | 107 ------ .../ark_sub_ed_on_bls12_381/src/fields/fq.rs | 1 - .../ark_sub_ed_on_bls12_381/src/fields/fr.rs | 7 - .../ark_sub_ed_on_bls12_381/src/fields/mod.rs | 8 - .../src/fields/tests.rs | 346 ------------------ .../Cargo.toml | 0 .../LICENSE-APACHE | 0 .../LICENSE-MIT | 0 .../benches/bls12_377.rs | 0 .../scripts/base_field.sage | 0 .../scripts/scalar_field.sage | 0 .../src/constraints/curves.rs | 0 .../src/constraints/fields.rs | 0 .../src/constraints/mod.rs | 0 .../src/constraints/pairing.rs | 0 .../src/curves/g1.rs | 0 .../src/curves/g2.rs | 0 .../src/curves/mod.rs | 0 .../src/curves/tests.rs | 0 .../src/lib.rs | 0 .../Cargo.toml | 0 .../src/curves/g1.rs | 0 .../src/curves/g2.rs | 0 .../src/curves/mod.rs | 0 .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin .../src/curves/tests/mod.rs | 0 .../src/curves/util.rs | 0 .../src/lib.rs | 0 .../Cargo.toml | 3 +- .../src/curves/mod.rs | 0 .../src/curves/tests.rs | 0 .../src/lib.rs | 5 +- 42 files changed, 8 insertions(+), 561 deletions(-) delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs delete mode 100644 primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/Cargo.toml (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/LICENSE-APACHE (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/LICENSE-MIT (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/benches/bls12_377.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/scripts/base_field.sage (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/scripts/scalar_field.sage (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/constraints/curves.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/constraints/fields.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/constraints/mod.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/constraints/pairing.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/curves/g1.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/curves/g2.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/curves/mod.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/curves/tests.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_377 => bls12_377}/src/lib.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/Cargo.toml (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/g1.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/g2.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/mod.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/tests/g1_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/tests/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/tests/g2_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/tests/g2_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/tests/mod.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/curves/util.rs (100%) rename primitives/arkworks-curves/{ark_sub_bls12_381 => bls12_381}/src/lib.rs (100%) rename primitives/arkworks-curves/{ark_sub_ed_on_bls12_381 => ed_on_bls12_381}/Cargo.toml (88%) rename primitives/arkworks-curves/{ark_sub_ed_on_bls12_381 => ed_on_bls12_381}/src/curves/mod.rs (100%) rename primitives/arkworks-curves/{ark_sub_ed_on_bls12_381 => ed_on_bls12_381}/src/curves/tests.rs (100%) rename primitives/arkworks-curves/{ark_sub_ed_on_bls12_381 => ed_on_bls12_381}/src/lib.rs (90%) diff --git a/Cargo.lock b/Cargo.lock index 96698a2a5c8d2..e3cf76523a8b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -570,6 +570,7 @@ dependencies = [ "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-curve-constraint-tests", "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ed-on-bls12-381", "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", "ark-r1cs-std", diff --git a/Cargo.toml b/Cargo.toml index f011a9d5f3ec8..6ac3dbeacc377 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -174,9 +174,9 @@ members = [ "primitives/arithmetic", "primitives/arithmetic/fuzzer", "primitives/arkworks", - "primitives/arkworks-curves/ark_sub_bls12_381", - "primitives/arkworks-curves/ark_sub_bls12_377", - "primitives/arkworks-curves/ark_sub_ed_on_bls12_381", + "primitives/arkworks-curves/bls12_381", + "primitives/arkworks-curves/bls12_377", + "primitives/arkworks-curves/ed_on_bls12_381", "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs deleted file mode 100644 index 762c687e7301d..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/benches/ed_on_bls12_381.rs +++ /dev/null @@ -1,4 +0,0 @@ -use ark_algebra_bench_templates::*; -use ark_ed_on_bls12_381::{fq::Fq, fr::Fr, EdwardsProjective as G}; - -bench!(Name = "EdOnBls12_381", Group = G, ScalarField = Fr, PrimeBaseField = Fq,); diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage deleted file mode 100644 index fb96ea80349ed..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/base_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 20): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage deleted file mode 100644 index 36af7a59c70a3..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/scripts/scalar_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 6554484396890773809930967563523245729705921265872317281365359162392183254199 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 20): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs deleted file mode 100644 index e9153807bd097..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/curves.rs +++ /dev/null @@ -1,16 +0,0 @@ -use ark_r1cs_std::groups::curves::{short_weierstrass::ProjectiveVar, twisted_edwards::AffineVar}; - -use crate::{constraints::FqVar, *}; - -/// A variable that is the R1CS equivalent of `crate::EdwardsAffine`. -pub type EdwardsVar = AffineVar; - -/// A variable that is the R1CS equivalent of `crate::SWProjective` -pub type SWVar = ProjectiveVar; - -#[test] -fn test() { - ark_curve_constraint_tests::curves::te_test::<_, EdwardsVar>().unwrap(); - ark_curve_constraint_tests::curves::sw_test::<_, SWVar>().unwrap(); - ark_curve_constraint_tests::curves::group_test::<_, Fq, EdwardsVar>().unwrap(); -} diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs deleted file mode 100644 index 542d6c5244bef..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/fields.rs +++ /dev/null @@ -1,9 +0,0 @@ -use ark_r1cs_std::fields::fp::FpVar; - -/// A variable that is the R1CS equivalent of `crate::Fq`. -pub type FqVar = FpVar; - -#[test] -fn test() { - ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); -} diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs deleted file mode 100644 index c6680fa2dce42..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/constraints/mod.rs +++ /dev/null @@ -1,107 +0,0 @@ -//! This module implements the R1CS equivalent of `ark_ed_on_bls12_381`. -//! -//! It implements field variables for `crate::Fq`, -//! and group variables for `crate::Projective`. -//! -//! The field underlying these constraints is `crate::Fq`. -//! -//! # Examples -//! -//! One can perform standard algebraic operations on `FqVar`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! use ark_std::UniformRand; -//! use ark_relations::r1cs::*; -//! use ark_r1cs_std::prelude::*; -//! use ark_ed_on_bls12_381::{*, constraints::*}; -//! -//! let cs = ConstraintSystem::::new_ref(); -//! // This rng is just for test purposes; do not use it -//! // in real applications. -//! let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `Fq` elements. -//! let a_native = Fq::rand(&mut rng); -//! let b_native = Fq::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; -//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! let one = FqVar::one(); -//! let zero = FqVar::zero(); -//! -//! // Sanity check one + one = two -//! let two = &one + &one + &zero; -//! two.enforce_equal(&one.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that the value of &a * &b is correct. -//! assert_eq!((&a * &b).value()?, a_native * &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` -//! -//! One can also perform standard algebraic operations on `EdwardsVar`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! # use ark_std::UniformRand; -//! # use ark_relations::r1cs::*; -//! # use ark_r1cs_std::prelude::*; -//! # use ark_ed_on_bls12_381::{*, constraints::*}; -//! -//! # let cs = ConstraintSystem::::new_ref(); -//! # let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `Edwards` elements. -//! let a_native = EdwardsProjective::rand(&mut rng); -//! let b_native = EdwardsProjective::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = EdwardsVar::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; -//! let b = EdwardsVar::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! // This returns the identity of `Edwards`. -//! let zero = EdwardsVar::zero(); -//! -//! // Sanity check one + one = two -//! let two_a = &a + &a + &zero; -//! two_a.enforce_equal(&a.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` - -mod curves; -mod fields; - -pub use curves::*; -pub use fields::*; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs deleted file mode 100644 index 334b706e899c0..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fq.rs +++ /dev/null @@ -1 +0,0 @@ -pub use ark_sub_bls12_381::{Fr as Fq, FrConfig as FqConfig}; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs deleted file mode 100644 index e23e39879d76a..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/fr.rs +++ /dev/null @@ -1,7 +0,0 @@ -use ark_ff::fields::{Fp256, MontBackend, MontConfig}; - -#[derive(MontConfig)] -#[modulus = "6554484396890773809930967563523245729705921265872317281365359162392183254199"] -#[generator = "6"] -pub struct FrConfig; -pub type Fr = Fp256>; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs deleted file mode 100644 index 7afba55578ef5..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod fq; -pub mod fr; - -pub use fq::*; -pub use fr::*; - -#[cfg(test)] -mod tests; diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs b/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs deleted file mode 100644 index df726665645f1..0000000000000 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/fields/tests.rs +++ /dev/null @@ -1,346 +0,0 @@ -use crate::{Fq, Fr}; -use ark_algebra_test_templates::*; -use ark_ff::{ - biginteger::BigInteger256 as BigInteger, - fields::{Field, LegendreSymbol::*}, - One, Zero, -}; -use ark_std::str::FromStr; - -test_field!(fr; Fr; mont_prime_field); -test_field!(fq; Fq; mont_prime_field); - -#[test] -fn test_fq_add() { - let f1 = Fq::from_str( - "18386742314266644595564329008376577163854043021652781768352795308532764650733", - ) - .unwrap(); - let f2 = Fq::from_str( - "39786307610986038981023499868190793548353538256264351797285876981647142458383", - ) - .unwrap(); - let f3 = Fq::from_str( - "5737174750126493097140088368381404874517028777389495743035013590241325924603", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 + &f2, f3); -} - -#[test] -fn test_fq_add_one() { - let f1 = Fq::from_str( - "4946875394261337176810256604189376311946643975348516311606738923340201185904", - ) - .unwrap(); - let f2 = Fq::from_str( - "4946875394261337176810256604189376311946643975348516311606738923340201185905", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert_eq!(f1 + &Fq::one(), f2); -} - -#[test] -fn test_fq_mul() { - let f1 = Fq::from_str( - "24703123148064348394273033316595937198355721297494556079070134653139656190956", - ) - .unwrap(); - let f2 = Fq::from_str( - "38196797080882758914424853878212529985425118523754343117256179679117054302131", - ) - .unwrap(); - let f3 = Fq::from_str( - "38057113854472161555556064369220825628027487067886761874351491955834635348140", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 * &f2, f3); -} - -#[test] -fn test_fq_triple_mul() { - let f1 = Fq::from_str( - "23834398828139479510988224171342199299644042568628082836691700490363123893905", - ) - .unwrap(); - let f2 = Fq::from_str( - "48343809612844640454129919255697536258606705076971130519928764925719046689317", - ) - .unwrap(); - let f3 = Fq::from_str( - "22704845471524346880579660022678666462201713488283356385810726260959369106033", - ) - .unwrap(); - let f4 = Fq::from_str( - "18897508522635316277030308074760673440128491438505204942623624791502972539393", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 * &f2 * &f3, f4); -} - -#[test] -fn test_fq_div() { - let f1 = Fq::from_str( - "31892744363926593013886463524057935370302352424137349660481695792871889573091", - ) - .unwrap(); - let f2 = Fq::from_str( - "47695868328933459965610498875668250916462767196500056002116961816137113470902", - ) - .unwrap(); - let f3 = Fq::from_str( - "29049672724678710659792141917402891276693777283079976086581207190825261000580", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 / &f2, f3); -} - -#[test] -fn test_fq_sub() { - let f1 = Fq::from_str( - "18695869713129401390241150743745601908470616448391638969502807001833388904079", - ) - .unwrap(); - let f2 = Fq::from_str( - "10105476028534616828778879109836101003805485072436929139123765141153277007373", - ) - .unwrap(); - let f3 = Fq::from_str( - "8590393684594784561462271633909500904665131375954709830379041860680111896706", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f2.is_zero()); - assert!(!f3.is_zero()); - assert_eq!(f1 - &f2, f3); -} - -#[test] -fn test_fq_double_in_place_thrice() { - let mut f1 = Fq::from_str( - "32768907806651393940832831055386272949401004221411141755415956893066040832473", - ) - .unwrap(); - let f3 = Fq::from_str( - "52407761752706389608871686410346320244445823769178582752913020344774001921732", - ) - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f3.is_zero()); - f1.double_in_place(); - f1.double_in_place(); - f1.double_in_place(); - assert_eq!(f1, f3); -} - -#[test] -fn test_fq_generate_random_ed_on_bls12_381_point() { - let d = Fq::from_str( - "19257038036680949359750312669786877991949435402254120286184196891950884077233", - ) - .unwrap(); - let y = Fq::from_str( - "20269054604167148422407276086932743904275456233139568486008667107872965128512", - ) - .unwrap(); - let x2 = Fq::from_str( - "35041048504708632193693740149219726446678304552734087046982753200179718192840", - ) - .unwrap(); - - let computed_y2 = y.square(); - let y2 = Fq::from_str( - "22730681238307918419349440108285755984465605552827817317611903495170775437833", - ) - .unwrap(); - assert_eq!(y2, computed_y2); - - let computed_dy2 = d * &computed_y2; - let dy2 = Fq::from_str( - "24720347560552809545835752815204882739669031262711919770503096707526812943411", - ) - .unwrap(); - assert_eq!(dy2, computed_dy2); - - let computed_divisor = computed_dy2 + &Fq::one(); - let divisor = Fq::from_str( - "24720347560552809545835752815204882739669031262711919770503096707526812943412", - ) - .unwrap(); - assert_eq!(divisor, computed_divisor); - - let computed_x2 = (computed_y2 - &Fq::one()) / &computed_divisor; - assert_eq!(x2, computed_x2); - - let x = Fq::from_str( - "15337652609730546173818014678723269532482775720866471265774032070871608223361", - ) - .unwrap(); - let computed_x = computed_x2.sqrt().unwrap(); - assert_eq!(computed_x.square(), x2); - assert_eq!(x, computed_x); - - fn add<'a>(curr: (Fq, Fq), other: &'a (Fq, Fq)) -> (Fq, Fq) { - let y1y2 = curr.1 * &other.1; - let x1x2 = curr.0 * &other.0; - let d = Fq::from_str( - "19257038036680949359750312669786877991949435402254120286184196891950884077233", - ) - .unwrap(); - let dx1x2y1y2 = d * &y1y2 * &x1x2; - - let d1 = Fq::one() + &dx1x2y1y2; - let d2 = Fq::one() - &dx1x2y1y2; - - let x1y2 = curr.0 * &other.1; - let y1x2 = curr.1 * &other.0; - - let x = (x1y2 + &y1x2) / &d1; - let y = (y1y2 + &x1x2) / &d2; - - (x, y) - } - - let result = add((x, y), &(x, y)); - let result = add(result, &result); - let result = add(result, &result); - - let point_x = Fq::from_str( - "47259664076168047050113154262636619161204477920503059672059915868534495873964", - ) - .unwrap(); - let point_y = Fq::from_str( - "19016409245280491801573912449420132838852726543024859389273314249842195919690", - ) - .unwrap(); - assert_eq!((point_x, point_y), result); -} - -#[test] -fn test_fq_square_in_place() { - let mut f1 = Fq::from_str( - "34864651240005695523200639428464570946052769938774601449735727714436878540682", - ) - .unwrap(); - let f3 = - Fq::from_str("213133100629336594719108316042277780359104840987226496279264105585804377948") - .unwrap(); - assert!(!f1.is_zero()); - assert!(!f3.is_zero()); - f1.square_in_place(); - assert_eq!(f1, f3); -} - -#[test] -fn test_fq_from_str() { - let f1_from_repr = Fq::from(BigInteger::new([ - 0xab8a2535947d1a77, - 0x9ba74cbfda0bbcda, - 0xe928b59724d60baf, - 0x1cccaaeb9bb1680a, - ])); - let f1 = Fq::from_str( - "13026376210409056429264774981357153555336288129100724591327877625017068755575", - ) - .unwrap(); - let f2_from_repr = Fq::from(BigInteger::new([ - 0x97e9103775d2f35c, - 0xbe6756b6c587544b, - 0x6ee38c3afd88ef4b, - 0x2bacd150f540c677, - ])); - let f2 = Fq::from_str( - "19754794831832707859764530223239420866832328728734160755396495950822165902172", - ) - .unwrap(); - assert_eq!(f1_from_repr, f1); - assert_eq!(f2_from_repr, f2); -} - -#[test] -fn test_fq_legendre() { - assert_eq!(QuadraticResidue, Fq::one().legendre()); - assert_eq!(Zero, Fq::zero().legendre()); - - let e = BigInteger::new([ - 0x0dbc5349cd5664da, - 0x8ac5b6296e3ae29d, - 0x127cb819feceaa3b, - 0x3a6b21fb03867191, - ]); - assert_eq!(QuadraticResidue, Fq::from(e).legendre()); - let e = BigInteger::new([ - 0x96341aefd047c045, - 0x9b5f4254500a4d65, - 0x1ee08223b68ac240, - 0x31d9cd545c0ec7c6, - ]); - assert_eq!(QuadraticNonResidue, Fq::from(e).legendre()); -} - -#[test] -fn test_fr_add() { - let f1 = Fr::from(BigInteger::new([ - 0xc81265fb4130fe0c, - 0xb308836c14e22279, - 0x699e887f96bff372, - 0x84ecc7e76c11ad, - ])); - let f2 = Fr::from(BigInteger::new([ - 0x71875719b422efb8, - 0x43658e68a93612, - 0x9fa756be2011e833, - 0xaa2b2cb08dac497, - ])); - let f3 = Fr::from(BigInteger::new([ - 0x3999bd14f553edc4, - 0xb34be8fa7d8b588c, - 0x945df3db6d1dba5, - 0xb279f92f046d645, - ])); - assert_eq!(f1 + &f2, f3); -} - -#[test] -fn test_fr_mul() { - let f1 = Fr::from(BigInteger::new([ - 0xc81265fb4130fe0c, - 0xb308836c14e22279, - 0x699e887f96bff372, - 0x84ecc7e76c11ad, - ])); - let f2 = Fr::from(BigInteger::new([ - 0x71875719b422efb8, - 0x43658e68a93612, - 0x9fa756be2011e833, - 0xaa2b2cb08dac497, - ])); - let f3 = Fr::from(BigInteger::new([ - 0x6d6618ac6b4a8381, - 0x5b9eb35d711ee1da, - 0xce83310e6ac4105d, - 0x98032e0f206320a, - ])); - assert_eq!(f1 * &f2, f3); -} - -#[test] -fn test_fr_from_str() { - let f100_from_repr = Fr::from(BigInteger::new([0x64, 0, 0, 0])); - let f100 = Fr::from_str("100").unwrap(); - assert_eq!(f100_from_repr, f100); -} diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/Cargo.toml rename to primitives/arkworks-curves/bls12_377/Cargo.toml diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE b/primitives/arkworks-curves/bls12_377/LICENSE-APACHE similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-APACHE rename to primitives/arkworks-curves/bls12_377/LICENSE-APACHE diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT b/primitives/arkworks-curves/bls12_377/LICENSE-MIT similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/LICENSE-MIT rename to primitives/arkworks-curves/bls12_377/LICENSE-MIT diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs b/primitives/arkworks-curves/bls12_377/benches/bls12_377.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/benches/bls12_377.rs rename to primitives/arkworks-curves/bls12_377/benches/bls12_377.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage b/primitives/arkworks-curves/bls12_377/scripts/base_field.sage similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/scripts/base_field.sage rename to primitives/arkworks-curves/bls12_377/scripts/base_field.sage diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage b/primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/scripts/scalar_field.sage rename to primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/bls12_377/src/constraints/curves.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/curves.rs rename to primitives/arkworks-curves/bls12_377/src/constraints/curves.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/bls12_377/src/constraints/fields.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/fields.rs rename to primitives/arkworks-curves/bls12_377/src/constraints/fields.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs b/primitives/arkworks-curves/bls12_377/src/constraints/mod.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/mod.rs rename to primitives/arkworks-curves/bls12_377/src/constraints/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs b/primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/constraints/pairing.rs rename to primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/bls12_377/src/curves/g1.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g1.rs rename to primitives/arkworks-curves/bls12_377/src/curves/g1.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/bls12_377/src/curves/g2.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/curves/g2.rs rename to primitives/arkworks-curves/bls12_377/src/curves/g2.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/bls12_377/src/curves/mod.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/curves/mod.rs rename to primitives/arkworks-curves/bls12_377/src/curves/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs b/primitives/arkworks-curves/bls12_377/src/curves/tests.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/curves/tests.rs rename to primitives/arkworks-curves/bls12_377/src/curves/tests.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs b/primitives/arkworks-curves/bls12_377/src/lib.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_377/src/lib.rs rename to primitives/arkworks-curves/bls12_377/src/lib.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/Cargo.toml rename to primitives/arkworks-curves/bls12_381/Cargo.toml diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/bls12_381/src/curves/g1.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g1.rs rename to primitives/arkworks-curves/bls12_381/src/curves/g1.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/bls12_381/src/curves/g2.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/g2.rs rename to primitives/arkworks-curves/bls12_381/src/curves/g2.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/bls12_381/src/curves/mod.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/mod.rs rename to primitives/arkworks-curves/bls12_381/src/curves/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat rename to primitives/arkworks-curves/bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat rename to primitives/arkworks-curves/bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat rename to primitives/arkworks-curves/bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat rename to primitives/arkworks-curves/bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs b/primitives/arkworks-curves/bls12_381/src/curves/tests/mod.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/tests/mod.rs rename to primitives/arkworks-curves/bls12_381/src/curves/tests/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs b/primitives/arkworks-curves/bls12_381/src/curves/util.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/curves/util.rs rename to primitives/arkworks-curves/bls12_381/src/curves/util.rs diff --git a/primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs b/primitives/arkworks-curves/bls12_381/src/lib.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_bls12_381/src/lib.rs rename to primitives/arkworks-curves/bls12_381/src/lib.rs diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml similarity index 88% rename from primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml rename to primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index f25954df39fa2..174bf357298e6 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -18,7 +18,8 @@ ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-sub-bls12-381 = { version = "0.4.0-alpha", path = "../ark_sub_bls12_381", default-features = false, features = [ "scalar_field" ] } +ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-sub-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/mod.rs rename to primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs similarity index 100% rename from primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/curves/tests.rs rename to primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs diff --git a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs similarity index 90% rename from primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs rename to primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs index 15ed0441bbfc9..887f67dc4f22a 100644 --- a/primitives/arkworks-curves/ark_sub_ed_on_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs @@ -17,9 +17,8 @@ //! * d = -(10240/10241) #[cfg(feature = "r1cs")] -pub mod constraints; +pub use ark_ed_on_bls12_381::constraints::*; mod curves; -mod fields; pub use curves::*; -pub use fields::*; +pub use ark_ed_on_bls12_381::{Fr, FrConfig, Fq, FqConfig}; From a7b4dc3536e48437c16f390dd7bf501c102cf973 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 06:16:39 +0100 Subject: [PATCH 053/364] fix msm --- Cargo.lock | 368 ++++-------------- .../arkworks-curves/bls12_377/src/lib.rs | 8 +- .../arkworks-curves/bls12_381/Cargo.toml | 1 - .../arkworks-curves/bls12_381/src/lib.rs | 8 +- .../ed_on_bls12_381/Cargo.toml | 9 +- .../ed_on_bls12_381/src/curves/mod.rs | 98 +++-- .../ed_on_bls12_381/src/lib.rs | 7 +- primitives/arkworks/src/ed_on_bls12_381.rs | 9 +- 8 files changed, 140 insertions(+), 368 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3cf76523a8b7..2cce4420ddab0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,12 +111,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - [[package]] name = "ansi_term" version = "0.12.1" @@ -147,47 +141,14 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" -[[package]] -name = "ark-algebra-bench-templates" -version = "0.4.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3d68347402ac48dd29fcf0b3a0cf6e0f7500e585a02113ea8b6c100baee05e" -dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "criterion 0.4.0", - "paste", -] - [[package]] name = "ark-algebra-test-templates" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" -dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "hex", - "num-bigint", - "num-integer", - "num-traits", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.6", -] - -[[package]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "hex", "num-bigint", @@ -204,8 +165,8 @@ name = "ark-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -214,9 +175,9 @@ name = "ark-bls12-381" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", ] @@ -226,8 +187,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -235,38 +196,22 @@ dependencies = [ name = "ark-curve-constraint-tests" version = "0.4.0-alpha.1" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ec" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" -dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ec" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff", + "ark-poly", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -281,8 +226,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -292,8 +237,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -302,28 +247,9 @@ name = "ark-ff" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "derivative", - "digest 0.10.6", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", @@ -344,15 +270,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-ff-asm" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.6" @@ -365,26 +282,14 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-ff-macros" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ark-models" version = "0.4.0-alpha.5" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -397,22 +302,10 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#beaf808ecd8f753cf662ee58fe538f5c666f0230" -dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", -] - -[[package]] -name = "ark-poly" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -423,8 +316,8 @@ name = "ark-r1cs-std" version = "0.4.0-alpha.3" source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", @@ -440,7 +333,7 @@ version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-std 0.4.0-alpha", "tracing", "tracing-subscriber", @@ -451,7 +344,7 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-std 0.4.0-alpha", "tracing", ] @@ -461,18 +354,7 @@ name = "ark-serialize" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "digest 0.10.6", - "num-bigint", -] - -[[package]] -name = "ark-serialize" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize-derive", "ark-std 0.4.0-alpha", "digest 0.10.6", "num-bigint", @@ -488,16 +370,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-serialize-derive" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ark-std" version = "0.3.0" @@ -522,15 +394,15 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-377", "ark-curve-constraint-tests", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", "sp-io", ] @@ -539,12 +411,12 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-models", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -556,9 +428,9 @@ version = "0.4.0" source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.3.0", ] @@ -566,16 +438,15 @@ dependencies = [ name = "ark-sub-ed-on-bls12-381" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-bench-templates", - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-algebra-test-templates", "ark-curve-constraint-tests", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", "ark-ed-on-bls12-381", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-models", "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0", "sp-io", @@ -1268,33 +1139,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "ciborium" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" - -[[package]] -name = "ciborium-ll" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" -dependencies = [ - "ciborium-io", - "half", -] - [[package]] name = "cid" version = "0.8.6" @@ -1344,22 +1188,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "bitflags", - "textwrap 0.11.0", + "textwrap", "unicode-width", ] -[[package]] -name = "clap" -version = "3.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" -dependencies = [ - "bitflags", - "clap_lex 0.2.4", - "indexmap", - "textwrap 0.16.0", -] - [[package]] name = "clap" version = "4.0.32" @@ -1368,7 +1200,7 @@ checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.0", + "clap_lex", "is-terminal", "once_cell", "strsim", @@ -1397,15 +1229,6 @@ dependencies = [ "syn", ] -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - [[package]] name = "clap_lex" version = "0.3.0" @@ -1622,7 +1445,7 @@ dependencies = [ "atty", "cast", "clap 2.34.0", - "criterion-plot 0.4.5", + "criterion-plot", "csv", "futures", "itertools", @@ -1641,32 +1464,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "criterion" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" -dependencies = [ - "anes", - "atty", - "cast", - "ciborium", - "clap 3.2.23", - "criterion-plot 0.5.0", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - [[package]] name = "criterion-plot" version = "0.4.5" @@ -1677,16 +1474,6 @@ dependencies = [ "itertools", ] -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -2718,7 +2505,7 @@ dependencies = [ name = "frame-system" version = "4.0.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "frame-support", "log", "parity-scale-codec", @@ -4860,7 +4647,7 @@ dependencies = [ "assert_cmd", "clap 4.0.32", "clap_complete", - "criterion 0.3.6", + "criterion", "frame-benchmarking-cli", "frame-system", "frame-system-rpc-runtime-api", @@ -4941,7 +4728,7 @@ dependencies = [ name = "node-executor" version = "3.0.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "frame-benchmarking", "frame-support", "frame-system", @@ -7977,7 +7764,7 @@ dependencies = [ name = "sc-client-db" version = "0.10.0-dev" dependencies = [ - "criterion 0.3.6", + "criterion", "hash-db", "kitchensink-runtime", "kvdb", @@ -8256,7 +8043,7 @@ name = "sc-executor" version = "0.10.0-dev" dependencies = [ "array-bytes", - "criterion 0.3.6", + "criterion", "env_logger", "lru", "num_cpus", @@ -9015,7 +8802,7 @@ dependencies = [ "ansi_term", "atty", "chrono", - "criterion 0.3.6", + "criterion", "lazy_static", "libc", "log", @@ -9056,7 +8843,7 @@ dependencies = [ "array-bytes", "assert_matches", "async-trait", - "criterion 0.3.6", + "criterion", "futures", "futures-timer", "linked-hash-map", @@ -9552,7 +9339,7 @@ dependencies = [ name = "sp-api-test" version = "2.0.1" dependencies = [ - "criterion 0.3.6", + "criterion", "futures", "log", "parity-scale-codec", @@ -9597,7 +9384,7 @@ dependencies = [ name = "sp-arithmetic" version = "6.0.0" dependencies = [ - "criterion 0.3.6", + "criterion", "integer-sqrt", "num-traits", "parity-scale-codec", @@ -9625,15 +9412,15 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", @@ -9812,7 +9599,7 @@ dependencies = [ "bitflags", "blake2", "byteorder", - "criterion 0.3.6", + "criterion", "dyn-clonable", "ed25519-zebra", "futures", @@ -10309,7 +10096,7 @@ version = "7.0.0" dependencies = [ "ahash 0.7.6", "array-bytes", - "criterion 0.3.6", + "criterion", "hash-db", "hashbrown 0.12.3", "lazy_static", @@ -10883,12 +10670,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.38" @@ -11233,7 +11014,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5b26bd2cdd7641c5beb476b314c0cb1f629832bf21a6235f545e2d47bc9d05a" dependencies = [ - "criterion 0.3.6", + "criterion", "hash-db", "keccak-hasher", "memory-db", @@ -12308,3 +12089,8 @@ dependencies = [ "cc", "libc", ] + +[[patch.unused]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/primitives/arkworks-curves/bls12_377/src/lib.rs b/primitives/arkworks-curves/bls12_377/src/lib.rs index 87c568c71c5c0..576aacd2eb0c3 100755 --- a/primitives/arkworks-curves/bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/bls12_377/src/lib.rs @@ -1,11 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - // warnings, - // unused, - future_incompatible, - nonstandard_style, - rust_2018_idioms -)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements the BLS12_377 curve generated in [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 063b0af5ae00c..95a36b7f02ab5 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -16,7 +16,6 @@ edition = "2021" ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } diff --git a/primitives/arkworks-curves/bls12_381/src/lib.rs b/primitives/arkworks-curves/bls12_381/src/lib.rs index c78c3f4ca9a4e..3e60fff740c12 100755 --- a/primitives/arkworks-curves/bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/bls12_381/src/lib.rs @@ -1,11 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - // warnings, - // unused, - future_incompatible, - nonstandard_style, - rust_2018_idioms -)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements the BLS12_381 curve generated by [Sean Bowe](https://electriccoin.co/blog/new-snark-curve/). diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index 174bf357298e6..bae0e5f8221a1 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -14,7 +14,6 @@ edition = "2021" [dependencies] ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } ark-serialize = { version = "0.4.0-alpha", default-features = false } @@ -24,12 +23,12 @@ ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] -ark-relations = { version = "0.4.0-alpha", default-features = false } -ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } -ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } +ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "ark-sub-bls12-381/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-sub-bls12-381/std" ] r1cs = ["ark-r1cs-std"] \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index 9718aa732090c..6ed3572b324ff 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -4,7 +4,7 @@ use ark_models::{ short_weierstrass::{self, SWCurveConfig}, twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; -use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{Fq, Fr}; @@ -140,59 +140,55 @@ impl SWCurveConfig for JubjubConfig { .collect(); let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = - sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = ::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - result.into() + SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) } - fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = ::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - result.into() - } + // fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { + // let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + // let mut cursor = Cursor::new(&mut serialized_base[..]); + // base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + // let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + // let mut cursor = Cursor::new(&mut serialized_scalar[..]); + // scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + // let result = + // sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); + + // let cursor = Cursor::new(&result[..]); + + // let result = ::deserialize_with_mode( + // cursor, + // Compress::Yes, + // Validate::No, + // ) + // .unwrap(); + // result.into() + // } + + // fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { + // let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + // let mut cursor = Cursor::new(&mut serialized_base[..]); + // base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + // let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + // let mut cursor = Cursor::new(&mut serialized_scalar[..]); + // scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + // let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); + + // let cursor = Cursor::new(&result[..]); + + // let result = ::deserialize_with_mode( + // cursor, + // Compress::Yes, + // Validate::No, + // ) + // .unwrap(); + // result.into() + // } } /// x coordinate for SW curve generator diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs index 887f67dc4f22a..1d1f884da5a13 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs @@ -1,5 +1,8 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] +#![deny( + // warnings, + // unused, + future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements a twisted Edwards curve whose base field is the @@ -20,5 +23,5 @@ pub use ark_ed_on_bls12_381::constraints::*; mod curves; +pub use ark_ed_on_bls12_381::{Fq, FqConfig, Fr, FrConfig}; pub use curves::*; -pub use ark_ed_on_bls12_381::{Fr, FrConfig, Fq, FqConfig}; diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index eca88ee8b0d31..c7a1bb0810e17 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -20,9 +20,10 @@ #![warn(missing_docs)] use ark_ec::{ - models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, + models::CurveConfig, short_weierstrass, twisted_edwards, twisted_edwards::TECurveConfig, + VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig}; +use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; @@ -69,7 +70,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - twisted_edwards::Affine::::deserialize_with_mode( + short_weierstrass::Affine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -90,7 +91,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { }) .collect(); - let result = ::msm(&bases, &scalars).unwrap(); + let result = ::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); From 23f9521042c72c3f87c75df33c697d336e393fc1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 06:20:16 +0100 Subject: [PATCH 054/364] fix mul_projective --- .../ed_on_bls12_381/src/curves/mod.rs | 36 +++++++++---------- primitives/arkworks/src/ed_on_bls12_381.rs | 8 ++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index 6ed3572b324ff..60af6f5465d58 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -145,28 +145,28 @@ impl SWCurveConfig for JubjubConfig { Ok(result.into()) } - // fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { - // let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - // let mut cursor = Cursor::new(&mut serialized_base[..]); - // base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - // let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - // let mut cursor = Cursor::new(&mut serialized_scalar[..]); - // scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - // let result = - // sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); + let result = + sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); - // let cursor = Cursor::new(&result[..]); + let cursor = Cursor::new(&result[..]); - // let result = ::deserialize_with_mode( - // cursor, - // Compress::Yes, - // Validate::No, - // ) - // .unwrap(); - // result.into() - // } + let result = SWProjective::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + result.into() + } // fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { // let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c7a1bb0810e17..f8e8ffee97369 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -20,10 +20,10 @@ #![warn(missing_docs)] use ark_ec::{ - models::CurveConfig, short_weierstrass, twisted_edwards, twisted_edwards::TECurveConfig, + models::CurveConfig, short_weierstrass::{self, SWCurveConfig}, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; +use ark_ed_on_bls12_381::{JubjubConfig, SWProjective}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; @@ -31,7 +31,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Projective::::deserialize_with_mode( + let base = short_weierstrass::Projective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -39,7 +39,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); From 91f0b4c32cf6b53035d2d6d7638d4b71961cd278 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 06:23:19 +0100 Subject: [PATCH 055/364] fix all tests ed 381 --- .../ed_on_bls12_381/src/curves/mod.rs | 38 ++++++++----------- primitives/arkworks/src/ed_on_bls12_381.rs | 30 +++++---------- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index 60af6f5465d58..ee69c0317edf3 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -159,36 +159,28 @@ impl SWCurveConfig for JubjubConfig { let cursor = Cursor::new(&result[..]); - let result = SWProjective::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); + let result = + SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); result.into() } - // fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { - // let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - // let mut cursor = Cursor::new(&mut serialized_base[..]); - // base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - // let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - // let mut cursor = Cursor::new(&mut serialized_scalar[..]); - // scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - // let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); + let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); - // let cursor = Cursor::new(&result[..]); + let cursor = Cursor::new(&result[..]); - // let result = ::deserialize_with_mode( - // cursor, - // Compress::Yes, - // Validate::No, - // ) - // .unwrap(); - // result.into() - // } + let result = + SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } /// x coordinate for SW curve generator diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index f8e8ffee97369..696baf0a55884 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -20,7 +20,8 @@ #![warn(missing_docs)] use ark_ec::{ - models::CurveConfig, short_weierstrass::{self, SWCurveConfig}, twisted_edwards, twisted_edwards::TECurveConfig, + models::CurveConfig, + short_weierstrass::{self, Affine as SWAffine, Projective as SWProjective, SWCurveConfig}, VariableBaseMSM, }; use ark_ed_on_bls12_381::{JubjubConfig, SWProjective}; @@ -31,12 +32,9 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = short_weierstrass::Projective::::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); + let base = + SWProjective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = ::mul_projective(&base, &scalar); @@ -49,15 +47,11 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = twisted_edwards::Affine::::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); + let base = SWAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -70,12 +64,8 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - short_weierstrass::Affine::::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() + SWAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap() }) .collect(); let scalars: Vec<_> = scalars From 186ce13a5194a69937e88b27f450358210905477 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 06:26:59 +0100 Subject: [PATCH 056/364] project builds --- primitives/arkworks/src/ed_on_bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 696baf0a55884..2c4ef3018ec60 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,7 +21,7 @@ use ark_ec::{ models::CurveConfig, - short_weierstrass::{self, Affine as SWAffine, Projective as SWProjective, SWCurveConfig}, + short_weierstrass::{self, Affine as SWAffine, SWCurveConfig}, VariableBaseMSM, }; use ark_ed_on_bls12_381::{JubjubConfig, SWProjective}; @@ -33,7 +33,7 @@ use sp_std::{vec, vec::Vec}; pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = - SWProjective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + short_weierstrass::Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); From 3a955a8a0325f4ffab1fd0a413af45ec488821c6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 06:39:38 +0100 Subject: [PATCH 057/364] add ed_on_bls12_377 --- Cargo.lock | 237 +++++++++++++----- Cargo.toml | 1 + .../arkworks-curves/bls12_377/src/lib.rs | 2 +- .../ed_on_bls12_377/Cargo.toml | 32 +++ .../ed_on_bls12_377/LICENSE-APACHE | 1 + .../ed_on_bls12_377/LICENSE-MIT | 1 + .../ed_on_bls12_377/scripts/base_field.sage | 28 +++ .../ed_on_bls12_377/scripts/scalar_field.sage | 28 +++ .../ed_on_bls12_377/src/constraints/curves.rs | 11 + .../ed_on_bls12_377/src/constraints/fields.rs | 11 + .../ed_on_bls12_377/src/constraints/mod.rs | 107 ++++++++ .../ed_on_bls12_377/src/curves/mod.rs | 73 ++++++ .../ed_on_bls12_377/src/curves/tests.rs | 4 + .../ed_on_bls12_377/src/lib.rs | 32 +++ 14 files changed, 508 insertions(+), 60 deletions(-) create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml create mode 120000 primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE create mode 120000 primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs create mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs create mode 100755 primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 2cce4420ddab0..b84ecfbc5178d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,9 +146,28 @@ name = "ark-algebra-test-templates" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "hex", "num-bigint", @@ -165,8 +184,8 @@ name = "ark-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -175,9 +194,9 @@ name = "ark-bls12-381" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -187,8 +206,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -196,11 +215,11 @@ dependencies = [ name = "ark-curve-constraint-tests" version = "0.4.0-alpha.1" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -209,9 +228,25 @@ name = "ark-ec" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -220,14 +255,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-curve-constraint-tests", + "ark-ed-on-bls12-377 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "ark-sub-bls12-377", +] + [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -237,8 +288,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", ] @@ -247,9 +298,28 @@ name = "ark-ff" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", + "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "digest 0.10.6", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", @@ -270,6 +340,15 @@ dependencies = [ "syn", ] +[[package]] +name = "ark-ff-asm" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.6" @@ -282,14 +361,26 @@ dependencies = [ "syn", ] +[[package]] +name = "ark-ff-macros" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "ark-models" version = "0.4.0-alpha.5" dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -304,8 +395,20 @@ name = "ark-poly" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", +] + +[[package]] +name = "ark-poly" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -316,8 +419,8 @@ name = "ark-r1cs-std" version = "0.4.0-alpha.3" source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", @@ -333,7 +436,7 @@ version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "tracing", "tracing-subscriber", @@ -344,7 +447,7 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "tracing", ] @@ -354,7 +457,18 @@ name = "ark-serialize" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-std 0.4.0-alpha", + "digest 0.10.6", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", "ark-std 0.4.0-alpha", "digest 0.10.6", "num-bigint", @@ -370,6 +484,16 @@ dependencies = [ "syn", ] +[[package]] +name = "ark-serialize-derive" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -394,15 +518,15 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-377", "ark-curve-constraint-tests", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "sp-io", ] @@ -411,12 +535,12 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -428,9 +552,9 @@ version = "0.4.0" source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.3.0", ] @@ -438,15 +562,15 @@ dependencies = [ name = "ark-sub-ed-on-bls12-381" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-curve-constraint-tests", - "ark-ec", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-ed-on-bls12-381", - "ark-ff", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0", "sp-io", @@ -9412,15 +9536,15 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", - "ark-ec", - "ark-ed-on-bls12-377", + "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ed-on-bls12-377 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves)", "ark-ed-on-bls12-381", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", @@ -12089,8 +12213,3 @@ dependencies = [ "cc", "libc", ] - -[[patch.unused]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/Cargo.toml b/Cargo.toml index 6ac3dbeacc377..d9401d25b0f7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -177,6 +177,7 @@ members = [ "primitives/arkworks-curves/bls12_381", "primitives/arkworks-curves/bls12_377", "primitives/arkworks-curves/ed_on_bls12_381", + "primitives/arkworks-curves/ed_on_bls12_377", "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", diff --git a/primitives/arkworks-curves/bls12_377/src/lib.rs b/primitives/arkworks-curves/bls12_377/src/lib.rs index 576aacd2eb0c3..3ca84637c91a6 100755 --- a/primitives/arkworks-curves/bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/bls12_377/src/lib.rs @@ -25,6 +25,6 @@ mod curves; #[cfg(feature = "r1cs")] pub mod constraints; -pub use ark_bls12_377::{Fq, Fq12Config, Fq2, Fq2Config, Fq6Config, Fr}; +pub use ark_bls12_377::{Fq, Fq12Config, Fq2, Fq2Config, Fq6Config, Fr, FrConfig}; #[cfg(feature = "curve")] pub use curves::*; diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml new file mode 100644 index 0000000000000..aabf71ef0e776 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "ark-ed-on-bls12-377" +version = "0.4.0-alpha.1" +authors = [ "arkworks contributors" ] +description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-ed-on-bls12-377/" +keywords = ["cryptography", "finite-fields", "elliptic-curves" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-ff = { version = "0.4.0-alpha", default-features = false } +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } +ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } +ark-models = { path = "../../arkworks-models" } + +[dev-dependencies] +ark-relations = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } + +[features] +default = [] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-sub-bls12-377/std" ] +r1cs = [ "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE new file mode 120000 index 0000000000000..965b606f331b5 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT new file mode 120000 index 0000000000000..76219eb72e852 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage b/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage new file mode 100644 index 0000000000000..a4d06f0891f59 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage @@ -0,0 +1,28 @@ +modulus = 8444461749428370424248824938781546531375899335154063827935233455917409239041 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 30): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage b/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage new file mode 100644 index 0000000000000..7810c056030ad --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage @@ -0,0 +1,28 @@ +modulus = 2111115437357092606062206234695386632838870926408408195193685246394721360383 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 30): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs new file mode 100644 index 0000000000000..fffc1a3c3a94c --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs @@ -0,0 +1,11 @@ +use ark_r1cs_std::groups::curves::twisted_edwards::AffineVar; + +use crate::{constraints::FqVar, *}; + +/// A variable that is the R1CS equivalent of `crate::EdwardsAffine`. +pub type EdwardsVar = AffineVar; + +#[test] +fn test() { + ark_curve_constraint_tests::curves::te_test::().unwrap(); +} diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs new file mode 100644 index 0000000000000..aa806e3d365d6 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs @@ -0,0 +1,11 @@ +use ark_r1cs_std::fields::fp::FpVar; + +use crate::fq::Fq; + +/// A variable that is the R1CS equivalent of `crate::Fq`. +pub type FqVar = FpVar; + +#[test] +fn test() { + ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); +} diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs new file mode 100644 index 0000000000000..26890595b8242 --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs @@ -0,0 +1,107 @@ +//! This module implements the R1CS equivalent of `ark_ed_on_bls12_377`. +//! +//! It implements field variables for `crate::Fq`, +//! and group variables for `crate::Projective`. +//! +//! The field underlying these constraints is `crate::Fq`. +//! +//! # Examples +//! +//! One can perform standard algebraic operations on `FqVar`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! use ark_std::UniformRand; +//! use ark_relations::r1cs::*; +//! use ark_r1cs_std::prelude::*; +//! use ark_ed_on_bls12_377::{*, constraints::*}; +//! +//! let cs = ConstraintSystem::::new_ref(); +//! // This rng is just for test purposes; do not use it +//! // in real applications. +//! let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `Fq` elements. +//! let a_native = Fq::rand(&mut rng); +//! let b_native = Fq::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; +//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! let one = FqVar::one(); +//! let zero = FqVar::zero(); +//! +//! // Sanity check one + one = two +//! let two = &one + &one + &zero; +//! two.enforce_equal(&one.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that the value of &a * &b is correct. +//! assert_eq!((&a * &b).value()?, a_native * &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` +//! +//! One can also perform standard algebraic operations on `EdwardsVar`: +//! +//! ``` +//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { +//! # use ark_std::UniformRand; +//! # use ark_relations::r1cs::*; +//! # use ark_r1cs_std::prelude::*; +//! # use ark_ed_on_bls12_377::{*, constraints::*}; +//! +//! # let cs = ConstraintSystem::::new_ref(); +//! # let mut rng = ark_std::test_rng(); +//! +//! // Generate some random `Edwards` elements. +//! let a_native = EdwardsProjective::rand(&mut rng); +//! let b_native = EdwardsProjective::rand(&mut rng); +//! +//! // Allocate `a_native` and `b_native` as witness variables in `cs`. +//! let a = EdwardsVar::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; +//! let b = EdwardsVar::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; +//! +//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any +//! // constraints or variables. +//! let a_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; +//! let b_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; +//! +//! // This returns the identity. +//! let zero = EdwardsVar::zero(); +//! +//! // Sanity check one + one = two +//! let two_a = &a + &a + &zero; +//! two_a.enforce_equal(&a.double()?)?; +//! +//! assert!(cs.is_satisfied()?); +//! +//! // Check that the value of &a + &b is correct. +//! assert_eq!((&a + &b).value()?, a_native + &b_native); +//! +//! // Check that operations on variables and constants are equivalent. +//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; +//! assert!(cs.is_satisfied()?); +//! # Ok(()) +//! # } +//! ``` + +mod curves; +mod fields; + +pub use curves::*; +pub use fields::*; diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs new file mode 100644 index 0000000000000..2e4dee308b37b --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs @@ -0,0 +1,73 @@ +use ark_models::{ + models::CurveConfig, + twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, +}; +use ark_ff::MontFp; + +use crate::{fq::Fq, fr::Fr}; + +#[cfg(test)] +mod tests; + +pub type EdwardsAffine = Affine; +pub type EdwardsProjective = Projective; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct EdwardsConfig; + +impl CurveConfig for EdwardsConfig { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = 4 + const COFACTOR: &'static [u64] = &[4]; + + /// COFACTOR_INV = + /// 527778859339273151515551558673846658209717731602102048798421311598680340096 + const COFACTOR_INV: Fr = + MontFp!("527778859339273151515551558673846658209717731602102048798421311598680340096"); +} + +impl TECurveConfig for EdwardsConfig { + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); + + /// COEFF_D = 3021 + const COEFF_D: Fq = MontFp!("3021"); + + /// Generated randomly + const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); + + type MontCurveConfig = EdwardsConfig; + + /// Multiplication by `a` is just negation. + /// Is `a` 1 or -1? + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + -elem + } +} + +impl MontCurveConfig for EdwardsConfig { + /// COEFF_A = 0x8D26E3FADA9010A26949031ECE3971B93952AD84D4753DDEDB748DA37E8F552 + /// = 3990301581132929505568273333084066329187552697088022219156688740916631500114 + const COEFF_A: Fq = + MontFp!("3990301581132929505568273333084066329187552697088022219156688740916631500114"); + + /// COEFF_B = 0x9D8F71EEC83A44C3A1FBCEC6F5418E5C6154C2682B8AC231C5A3725C8170AAD + /// = 4454160168295440918680551605697480202188346638066041608778544715000777738925 + const COEFF_B: Fq = + MontFp!("4454160168295440918680551605697480202188346638066041608778544715000777738925"); + + type TECurveConfig = EdwardsConfig; +} + +/// GENERATOR_X = +/// 4497879464030519973909970603271755437257548612157028181994697785683032656389, +const GENERATOR_X: Fq = + MontFp!("4497879464030519973909970603271755437257548612157028181994697785683032656389"); + +/// GENERATOR_Y = +/// 4357141146396347889246900916607623952598927460421559113092863576544024487809 +const GENERATOR_Y: Fq = + MontFp!("4357141146396347889246900916607623952598927460421559113092863576544024487809"); diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs new file mode 100644 index 0000000000000..7b1ea09555ffb --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs @@ -0,0 +1,4 @@ +use crate::*; +use ark_algebra_test_templates::*; + +test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs new file mode 100755 index 0000000000000..72a4afadeb70f --- /dev/null +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs @@ -0,0 +1,32 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![deny( + warnings, + unused, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +#![forbid(unsafe_code)] + +//! This library implements a twisted Edwards curve whose base field is the +//! scalar field of the curve BLS12-377. This allows defining cryptographic +//! primitives that use elliptic curves over the scalar field of the latter +//! curve. This curve was generated as part of the paper [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). +//! +//! Curve information: +//! * Base field: q = +//! 8444461749428370424248824938781546531375899335154063827935233455917409239041 +//! * Scalar field: r = +//! 2111115437357092606062206234695386632838870926408408195193685246394721360383 +//! * Valuation(q - 1, 2) = 47 +//! * Valuation(r - 1, 2) = 1 +//! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where +//! * a = -1 +//! * d = 3021 + +#[cfg(feature = "r1cs")] +pub mod constraints; +mod curves; + +pub use curves::*; +pub use ark_ed_on_bls12_377::{Fq, FqConfig, Fr, FrConfig, fq, fr}; From 1a80c8658ab67e2d145215ff8017c7a3a542e476 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 07:15:08 +0100 Subject: [PATCH 058/364] ed_on_bls12_377 tests pass --- Cargo.lock | 255 ++++++------------ .../ed_on_bls12_377/Cargo.toml | 10 +- .../ed_on_bls12_377/src/curves/mod.rs | 39 +++ .../ed_on_bls12_377/src/lib.rs | 2 +- 4 files changed, 123 insertions(+), 183 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b84ecfbc5178d..d60d3c58c226d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,28 +146,9 @@ name = "ark-algebra-test-templates" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "hex", - "num-bigint", - "num-integer", - "num-traits", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.6", -] - -[[package]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "hex", "num-bigint", @@ -184,8 +165,8 @@ name = "ark-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -194,9 +175,9 @@ name = "ark-bls12-381" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", ] @@ -206,8 +187,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -215,11 +196,11 @@ dependencies = [ name = "ark-curve-constraint-tests" version = "0.4.0-alpha.1" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", ] @@ -228,9 +209,9 @@ name = "ark-ec" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", + "ark-poly", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -239,46 +220,14 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ark-ec" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ed-on-bls12-377" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-curve-constraint-tests", - "ark-ed-on-bls12-377 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "ark-sub-bls12-377", -] - [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -288,8 +237,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-std 0.4.0-alpha", ] @@ -298,28 +247,9 @@ name = "ark-ff" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "derivative", - "digest 0.10.6", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-ff-asm 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-ff-macros 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", @@ -340,15 +270,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-ff-asm" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.6" @@ -361,26 +282,14 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-ff-macros" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ark-models" version = "0.4.0-alpha.5" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-poly 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -395,20 +304,8 @@ name = "ark-poly" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "derivative", - "hashbrown 0.13.1", -] - -[[package]] -name = "ark-poly" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -419,8 +316,8 @@ name = "ark-r1cs-std" version = "0.4.0-alpha.3" source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", @@ -436,7 +333,7 @@ version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-std 0.4.0-alpha", "tracing", "tracing-subscriber", @@ -447,7 +344,7 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-std 0.4.0-alpha", "tracing", ] @@ -457,18 +354,7 @@ name = "ark-serialize" version = "0.4.0-alpha.6" source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-std 0.4.0-alpha", - "digest 0.10.6", - "num-bigint", -] - -[[package]] -name = "ark-serialize" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "ark-serialize-derive 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/)", + "ark-serialize-derive", "ark-std 0.4.0-alpha", "digest 0.10.6", "num-bigint", @@ -484,16 +370,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-serialize-derive" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ark-std" version = "0.3.0" @@ -518,15 +394,15 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-377", "ark-curve-constraint-tests", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", "sp-io", ] @@ -535,12 +411,12 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", "ark-models", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -552,25 +428,43 @@ version = "0.4.0" source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ "ark-bls12-381", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", + "ark-ff", + "ark-serialize", "ark-std 0.3.0", ] +[[package]] +name = "ark-sub-ed-on-bls12-377" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-curve-constraint-tests", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", + "ark-std 0.4.0-alpha", + "ark-sub-bls12-377", + "sp-io", +] + [[package]] name = "ark-sub-ed-on-bls12-381" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-curve-constraint-tests", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ec", "ark-ed-on-bls12-381", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-serialize", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0", "sp-io", @@ -9536,15 +9430,15 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-algebra-test-templates 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-algebra-test-templates", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", - "ark-ec 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-ed-on-bls12-377 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/curves)", + "ark-ec", + "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", - "ark-ff 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", - "ark-serialize 0.4.0-alpha.6 (git+https://github.com/arkworks-rs/algebra/?branch=release-0.4)", + "ark-ff", + "ark-serialize", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", @@ -12213,3 +12107,8 @@ dependencies = [ "cc", "libc", ] + +[[patch.unused]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.6" +source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index aabf71ef0e776..51b5ce6599492 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-ed-on-bls12-377" +name = "ark-sub-ed-on-bls12-377" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve" @@ -16,15 +16,17 @@ edition = "2021" ark-ff = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } +sp-io = { path = "../../io" } [dev-dependencies] -ark-relations = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] default = [] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs index 2e4dee308b37b..5a388d998e9f5 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs @@ -3,6 +3,8 @@ use ark_models::{ twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; use ark_ff::MontFp; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec}; use crate::{fq::Fq, fr::Fr}; @@ -46,6 +48,43 @@ impl TECurveConfig for EdwardsConfig { fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { -elem } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = + sp_io::crypto::ed_on_bls12_377_mul_projective(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = + Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::ed_on_bls12_377_mul_affine(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = + Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } impl MontCurveConfig for EdwardsConfig { diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs index 72a4afadeb70f..ea7cfbb69792b 100755 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs @@ -25,7 +25,7 @@ //! * d = 3021 #[cfg(feature = "r1cs")] -pub mod constraints; +pub use ark_ed_on_bls12_377::constraints::*; mod curves; pub use curves::*; From 3d66049677ce192ef5ec2fe464ae733ce47255e6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 07:24:45 +0100 Subject: [PATCH 059/364] ed_on_bls12_381 add te host functions --- .../ed_on_bls12_377/src/curves/mod.rs | 76 +++++++++---------- .../ed_on_bls12_377/src/lib.rs | 16 +--- .../ed_on_bls12_381/src/curves/mod.rs | 43 ++++++++++- primitives/arkworks/src/ed_on_bls12_381.rs | 47 ++++++++++-- primitives/io/src/lib.rs | 18 ++++- 5 files changed, 139 insertions(+), 61 deletions(-) diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs index 5a388d998e9f5..7c9fd69f31cb4 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs @@ -1,8 +1,8 @@ +use ark_ff::MontFp; use ark_models::{ - models::CurveConfig, - twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, + models::CurveConfig, + twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; -use ark_ff::MontFp; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec}; @@ -18,38 +18,38 @@ pub type EdwardsProjective = Projective; pub struct EdwardsConfig; impl CurveConfig for EdwardsConfig { - type BaseField = Fq; - type ScalarField = Fr; + type BaseField = Fq; + type ScalarField = Fr; - /// COFACTOR = 4 - const COFACTOR: &'static [u64] = &[4]; + /// COFACTOR = 4 + const COFACTOR: &'static [u64] = &[4]; - /// COFACTOR_INV = - /// 527778859339273151515551558673846658209717731602102048798421311598680340096 - const COFACTOR_INV: Fr = - MontFp!("527778859339273151515551558673846658209717731602102048798421311598680340096"); + /// COFACTOR_INV = + /// 527778859339273151515551558673846658209717731602102048798421311598680340096 + const COFACTOR_INV: Fr = + MontFp!("527778859339273151515551558673846658209717731602102048798421311598680340096"); } impl TECurveConfig for EdwardsConfig { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); + /// COEFF_A = -1 + const COEFF_A: Fq = MontFp!("-1"); - /// COEFF_D = 3021 - const COEFF_D: Fq = MontFp!("3021"); + /// COEFF_D = 3021 + const COEFF_D: Fq = MontFp!("3021"); - /// Generated randomly - const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); + /// Generated randomly + const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); - type MontCurveConfig = EdwardsConfig; + type MontCurveConfig = EdwardsConfig; - /// Multiplication by `a` is just negation. - /// Is `a` 1 or -1? - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - -elem - } + /// Multiplication by `a` is just negation. + /// Is `a` 1 or -1? + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + -elem + } - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -68,7 +68,7 @@ impl TECurveConfig for EdwardsConfig { result.into() } - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -82,31 +82,31 @@ impl TECurveConfig for EdwardsConfig { let cursor = Cursor::new(&result[..]); let result = - Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); result.into() } } impl MontCurveConfig for EdwardsConfig { - /// COEFF_A = 0x8D26E3FADA9010A26949031ECE3971B93952AD84D4753DDEDB748DA37E8F552 - /// = 3990301581132929505568273333084066329187552697088022219156688740916631500114 - const COEFF_A: Fq = - MontFp!("3990301581132929505568273333084066329187552697088022219156688740916631500114"); + /// COEFF_A = 0x8D26E3FADA9010A26949031ECE3971B93952AD84D4753DDEDB748DA37E8F552 + /// = 3990301581132929505568273333084066329187552697088022219156688740916631500114 + const COEFF_A: Fq = + MontFp!("3990301581132929505568273333084066329187552697088022219156688740916631500114"); - /// COEFF_B = 0x9D8F71EEC83A44C3A1FBCEC6F5418E5C6154C2682B8AC231C5A3725C8170AAD - /// = 4454160168295440918680551605697480202188346638066041608778544715000777738925 - const COEFF_B: Fq = - MontFp!("4454160168295440918680551605697480202188346638066041608778544715000777738925"); + /// COEFF_B = 0x9D8F71EEC83A44C3A1FBCEC6F5418E5C6154C2682B8AC231C5A3725C8170AAD + /// = 4454160168295440918680551605697480202188346638066041608778544715000777738925 + const COEFF_B: Fq = + MontFp!("4454160168295440918680551605697480202188346638066041608778544715000777738925"); - type TECurveConfig = EdwardsConfig; + type TECurveConfig = EdwardsConfig; } /// GENERATOR_X = /// 4497879464030519973909970603271755437257548612157028181994697785683032656389, const GENERATOR_X: Fq = - MontFp!("4497879464030519973909970603271755437257548612157028181994697785683032656389"); + MontFp!("4497879464030519973909970603271755437257548612157028181994697785683032656389"); /// GENERATOR_Y = /// 4357141146396347889246900916607623952598927460421559113092863576544024487809 const GENERATOR_Y: Fq = - MontFp!("4357141146396347889246900916607623952598927460421559113092863576544024487809"); + MontFp!("4357141146396347889246900916607623952598927460421559113092863576544024487809"); diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs index ea7cfbb69792b..706a361b5f142 100755 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs @@ -1,11 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - warnings, - unused, - future_incompatible, - nonstandard_style, - rust_2018_idioms -)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements a twisted Edwards curve whose base field is the @@ -14,10 +8,8 @@ //! curve. This curve was generated as part of the paper [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). //! //! Curve information: -//! * Base field: q = -//! 8444461749428370424248824938781546531375899335154063827935233455917409239041 -//! * Scalar field: r = -//! 2111115437357092606062206234695386632838870926408408195193685246394721360383 +//! * Base field: q = 8444461749428370424248824938781546531375899335154063827935233455917409239041 +//! * Scalar field: r = 2111115437357092606062206234695386632838870926408408195193685246394721360383 //! * Valuation(q - 1, 2) = 47 //! * Valuation(r - 1, 2) = 1 //! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where @@ -28,5 +20,5 @@ pub use ark_ed_on_bls12_377::constraints::*; mod curves; +pub use ark_ed_on_bls12_377::{fq, fr, Fq, FqConfig, Fr, FrConfig}; pub use curves::*; -pub use ark_ed_on_bls12_377::{Fq, FqConfig, Fr, FrConfig, fq, fr}; diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index ee69c0317edf3..3367384722d5a 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -86,6 +86,44 @@ impl TECurveConfig for JubjubConfig { fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { -elem } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = + sp_io::crypto::ed_on_bls12_381_te_mul_projective(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = + Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = + sp_io::crypto::ed_on_bls12_381_te_mul_affine(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = + Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } impl MontCurveConfig for JubjubConfig { @@ -155,7 +193,7 @@ impl SWCurveConfig for JubjubConfig { scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); let result = - sp_io::crypto::ed_on_bls12_381_mul_projective(serialized_base, serialized_scalar); + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(serialized_base, serialized_scalar); let cursor = Cursor::new(&result[..]); @@ -173,7 +211,8 @@ impl SWCurveConfig for JubjubConfig { let mut cursor = Cursor::new(&mut serialized_scalar[..]); scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - let result = sp_io::crypto::ed_on_bls12_381_mul_affine(serialized_base, serialized_scalar); + let result = + sp_io::crypto::ed_on_bls12_381_sw_mul_affine(serialized_base, serialized_scalar); let cursor = Cursor::new(&result[..]); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 2c4ef3018ec60..25adc36d8dc0b 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,6 +22,8 @@ use ark_ec::{ models::CurveConfig, short_weierstrass::{self, Affine as SWAffine, SWCurveConfig}, + twisted_edwards, + twisted_edwards::{Affine as TEAffine, TECurveConfig}, VariableBaseMSM, }; use ark_ed_on_bls12_381::{JubjubConfig, SWProjective}; @@ -30,11 +32,14 @@ use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { +pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = - short_weierstrass::Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); + let base = short_weierstrass::Projective::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = ::mul_projective(&base, &scalar); @@ -45,7 +50,7 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { } /// Compute a scalar multiplication through arkworks -pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { +pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = SWAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) .unwrap(); @@ -58,6 +63,38 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { serialized } +/// Compute a scalar multiplication on G2 through arkworks +pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = twisted_edwards::Projective::::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_projective(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a scalar multiplication through arkworks +pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { + let cursor = Cursor::new(base); + let base = TEAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); + let cursor = Cursor::new(scalar); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let res = ::mul_affine(&base, &scalar); + let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 7cb238a031b10..417d2f03a8270 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1257,13 +1257,23 @@ pub trait Crypto { // } /// Compute affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::mul_affine(base, scalar) + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) } /// Compute projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::mul_projective(base, scalar) + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) + } + + /// Compute affine multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) + } + + /// Compute projective multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) } /// Compute msm on ed_on_bls12_381 From 7f8829184e03077526f9a4f20895c8cd1ceee65f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 07:32:14 +0100 Subject: [PATCH 060/364] add bw6_761 --- Cargo.toml | 1 + primitives/arkworks-curves/bw6_761/Cargo.toml | 33 +++++++ .../arkworks-curves/bw6_761/LICENSE-APACHE | 1 + .../arkworks-curves/bw6_761/LICENSE-MIT | 1 + .../bw6_761/scripts/base_field.sage | 28 ++++++ .../bw6_761/scripts/scalar_field.sage | 28 ++++++ .../arkworks-curves/bw6_761/src/curves/g1.rs | 58 ++++++++++++ .../arkworks-curves/bw6_761/src/curves/g2.rs | 59 +++++++++++++ .../arkworks-curves/bw6_761/src/curves/mod.rs | 62 +++++++++++++ .../bw6_761/src/curves/tests.rs | 8 ++ .../arkworks-curves/bw6_761/src/fields/fq.rs | 7 ++ .../arkworks-curves/bw6_761/src/fields/fq3.rs | 88 +++++++++++++++++++ .../arkworks-curves/bw6_761/src/fields/fq6.rs | 26 ++++++ .../arkworks-curves/bw6_761/src/fields/fr.rs | 1 + .../arkworks-curves/bw6_761/src/fields/mod.rs | 14 +++ .../bw6_761/src/fields/tests.rs | 7 ++ primitives/arkworks-curves/bw6_761/src/lib.rs | 35 ++++++++ primitives/io/src/lib.rs | 88 +++++++++---------- 18 files changed, 501 insertions(+), 44 deletions(-) create mode 100644 primitives/arkworks-curves/bw6_761/Cargo.toml create mode 120000 primitives/arkworks-curves/bw6_761/LICENSE-APACHE create mode 120000 primitives/arkworks-curves/bw6_761/LICENSE-MIT create mode 100644 primitives/arkworks-curves/bw6_761/scripts/base_field.sage create mode 100644 primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage create mode 100644 primitives/arkworks-curves/bw6_761/src/curves/g1.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/curves/g2.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/curves/mod.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/curves/tests.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq3.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq6.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fr.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/mod.rs create mode 100644 primitives/arkworks-curves/bw6_761/src/fields/tests.rs create mode 100755 primitives/arkworks-curves/bw6_761/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index d9401d25b0f7f..6ba5d8b8e8138 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -178,6 +178,7 @@ members = [ "primitives/arkworks-curves/bls12_377", "primitives/arkworks-curves/ed_on_bls12_381", "primitives/arkworks-curves/ed_on_bls12_377", + "primitives/arkworks-curves/bw6_761", "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml new file mode 100644 index 0000000000000..0babc63760828 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "ark-bw6-761" +version = "0.4.0-alpha.1" +authors = [ "arkworks contributors" ] +description = "The BW6-761 pairing-friendly elliptic curve" +homepage = "https://arkworks.rs" +repository = "https://github.com/arkworks-rs/curves" +documentation = "https://docs.rs/ark-bw6-761/" +keywords = ["cryptography", "finite-fields", "elliptic-curves" ] +categories = ["cryptography"] +include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] +license = "MIT/Apache-2.0" +edition = "2021" + +[dependencies] +ark-ff = { version="0.4.0-alpha", default-features = false } +ark-ec = { version="0.4.0-alpha", default-features = false } +ark-std = { version = "0.4.0-alpha", default-features = false } +ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } + +[dev-dependencies] +ark-serialize = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } + +[features] +default = [] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "ark-sub-bls12-377/std" ] + +[[bench]] +name = "bw6_761" +path = "benches/bw6_761.rs" +harness = false diff --git a/primitives/arkworks-curves/bw6_761/LICENSE-APACHE b/primitives/arkworks-curves/bw6_761/LICENSE-APACHE new file mode 120000 index 0000000000000..965b606f331b5 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/bw6_761/LICENSE-MIT b/primitives/arkworks-curves/bw6_761/LICENSE-MIT new file mode 120000 index 0000000000000..76219eb72e852 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/bw6_761/scripts/base_field.sage b/primitives/arkworks-curves/bw6_761/scripts/base_field.sage new file mode 100644 index 0000000000000..a44fafbe70e22 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/scripts/base_field.sage @@ -0,0 +1,28 @@ +modulus = 6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 20): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage b/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage new file mode 100644 index 0000000000000..6d9f4a7e71948 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage @@ -0,0 +1,28 @@ +modulus = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 + +assert(modulus.is_prime()) + +Fp = GF(modulus) + +generator = Fp(0); +for i in range(0, 20): + i = Fp(i); + neg_i = Fp(-i) + if not(i.is_primitive_root() or neg_i.is_primitive_root()): + continue + elif i.is_primitive_root(): + assert(i.is_primitive_root()); + print("Generator: %d" % i) + generator = i + break + else: + assert(neg_i.is_primitive_root()); + print("Generator: %d" % neg_i) + generator = neg_i + break + + +two_adicity = valuation(modulus - 1, 2); +trace = (modulus - 1) / 2**two_adicity; +two_adic_root_of_unity = generator^trace +print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs new file mode 100644 index 0000000000000..f3cb3ae63c312 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs @@ -0,0 +1,58 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::{Affine, Projective}, +}; +use ark_ff::{Field, MontFp}; + +use crate::{Fq, Fr}; + +pub type G1Affine = Affine; +pub type G1Projective = Projective; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = + /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194876 + #[rustfmt::skip] + const COFACTOR: &'static [u64] = &[ + 0x3de580000000007c, + 0x832ba4061000003b, + 0xc61c554757551c0c, + 0xc856a0853c9db94c, + 0x2c77d5ac34cb12ef, + 0xad1972339049ce76, + ]; + + /// COFACTOR^(-1) mod r = + /// 91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804 + const COFACTOR_INV: Fr = MontFp!("91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = -1 + const COEFF_B: Fq = MontFp!("-1"); + + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + #[inline(always)] + fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { + use ark_ff::Zero; + Self::BaseField::zero() + } +} + +/// G1_GENERATOR_X = +/// 6238772257594679368032145693622812838779005809760824733138787810501188623461307351759238099287535516224314149266511977132140828635950940021790489507611754366317801811090811367945064510304504157188661901055903167026722666149426237 +pub const G1_GENERATOR_X: Fq = MontFp!("6238772257594679368032145693622812838779005809760824733138787810501188623461307351759238099287535516224314149266511977132140828635950940021790489507611754366317801811090811367945064510304504157188661901055903167026722666149426237"); + +/// G1_GENERATOR_Y = +/// 2101735126520897423911504562215834951148127555913367997162789335052900271653517958562461315794228241561913734371411178226936527683203879553093934185950470971848972085321797958124416462268292467002957525517188485984766314758624099 +pub const G1_GENERATOR_Y: Fq = MontFp!("2101735126520897423911504562215834951148127555913367997162789335052900271653517958562461315794228241561913734371411178226936527683203879553093934185950470971848972085321797958124416462268292467002957525517188485984766314758624099"); diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs new file mode 100644 index 0000000000000..abf83d4235bcf --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs @@ -0,0 +1,59 @@ +use ark_ec::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::{Affine, Projective}, +}; +use ark_ff::{Field, MontFp}; + +use crate::{Fq, Fr}; + +pub type G2Affine = Affine; +pub type G2Projective = Projective; + +#[derive(Clone, Default, PartialEq, Eq)] +pub struct Config; + +impl CurveConfig for Config { + type BaseField = Fq; + type ScalarField = Fr; + + /// COFACTOR = + /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194869 + #[rustfmt::skip] + const COFACTOR: &'static [u64] = &[ + 0x3de5800000000075, + 0x832ba4061000003b, + 0xc61c554757551c0c, + 0xc856a0853c9db94c, + 0x2c77d5ac34cb12ef, + 0xad1972339049ce76, + ]; + + /// COFACTOR^(-1) mod r = + /// 214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124 + const COFACTOR_INV: Fr = MontFp!("214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124"); +} + +impl SWCurveConfig for Config { + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = 4 + const COEFF_B: Fq = MontFp!("4"); + + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + + #[inline(always)] + fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { + use ark_ff::Zero; + Self::BaseField::zero() + } +} + +/// G2_GENERATOR_X = +/// 6445332910596979336035888152774071626898886139774101364933948236926875073754470830732273879639675437155036544153105017729592600560631678554299562762294743927912429096636156401171909259073181112518725201388196280039960074422214428 +pub const G2_GENERATOR_X: Fq = MontFp!("6445332910596979336035888152774071626898886139774101364933948236926875073754470830732273879639675437155036544153105017729592600560631678554299562762294743927912429096636156401171909259073181112518725201388196280039960074422214428"); + +/// G2_GENERATOR_Y = +/// 562923658089539719386922163444547387757586534741080263946953401595155211934630598999300396317104182598044793758153214972605680357108252243146746187917218885078195819486220416605630144001533548163105316661692978285266378674355041 +pub const G2_GENERATOR_Y: Fq = MontFp!("562923658089539719386922163444547387757586534741080263946953401595155211934630598999300396317104182598044793758153214972605680357108252243146746187917218885078195819486220416605630144001533548163105316661692978285266378674355041"); diff --git a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs new file mode 100644 index 0000000000000..cfbbf4f5fe1fa --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs @@ -0,0 +1,62 @@ +use ark_ec::{ + bw6, + bw6::{BW6Config, TwistType, BW6}, +}; +use ark_ff::{biginteger::BigInteger768 as BigInteger, BigInt}; + +use crate::*; + +pub mod g1; +pub mod g2; + +#[cfg(test)] +mod tests; + +#[derive(PartialEq, Eq)] +pub struct Config; + +impl BW6Config for Config { + const X: BigInteger = BigInt::new([ + 0x8508c00000000001, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + 0x0, + ]); + /// `x` is positive. + const X_IS_NEGATIVE: bool = false; + // X+1 + const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000002]; + const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = false; + // X^3-X^2-X + const ATE_LOOP_COUNT_2: &'static [i8] = &[ + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, + 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, + 1, 0, 0, 0, -1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 1, + 0, -1, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, + ]; + const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; + const TWIST_TYPE: TwistType = TwistType::M; + type Fp = Fq; + type Fp3Config = Fq3Config; + type Fp6Config = Fq6Config; + type G1Config = g1::Config; + type G2Config = g2::Config; +} + +pub type BW6_761 = BW6; + +pub type G1Affine = bw6::G1Affine; +pub type G1Projective = bw6::G1Projective; +pub type G2Affine = bw6::G2Affine; +pub type G2Projective = bw6::G2Projective; diff --git a/primitives/arkworks-curves/bw6_761/src/curves/tests.rs b/primitives/arkworks-curves/bw6_761/src/curves/tests.rs new file mode 100644 index 0000000000000..1a8d4ed20694b --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/curves/tests.rs @@ -0,0 +1,8 @@ +use crate::*; +use ark_algebra_test_templates::*; +use ark_ff::Field; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; crate::BW6_761); diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq.rs new file mode 100644 index 0000000000000..e891c555dedf2 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/fq.rs @@ -0,0 +1,7 @@ +use ark_ff::fields::{Fp768, MontBackend, MontConfig}; + +#[derive(MontConfig)] +#[modulus = "6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299"] +#[generator = "2"] +pub struct FqConfig; +pub type Fq = Fp768>; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs new file mode 100644 index 0000000000000..35c4bfc0951f1 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs @@ -0,0 +1,88 @@ +use ark_ff::{ + fields::fp3::{Fp3, Fp3Config}, + Field, MontFp, +}; + +use crate::Fq; + +pub type Fq3 = Fp3; + +pub struct Fq3Config; + +impl Fp3Config for Fq3Config { + type Fp = Fq; + + /// NONRESIDUE = -4 + // Fq3 = Fq\[u\]/u^3+4 + const NONRESIDUE: Fq = MontFp!("-4"); + + // (MODULUS^3 - 1) % 2^TWO_ADICITY == 0 + const TWO_ADICITY: u32 = 1; + + // (T-1)/2 with T = (MODULUS^3-1) / 2^TWO_ADICITY + #[rustfmt::skip] + const TRACE_MINUS_ONE_DIV_TWO: &'static [u64] = &[ + 0xb5e7c000000a3eac, + 0xf79b99dbf41cf4ab, + 0xe9372b1919e55ee5, + 0xbb7bbc4936c1980b, + 0x7c0cb9d4399b36e1, + 0x73304a5507bb1ae0, + 0x92f639be8963936f, + 0x4f574ac2439ba816, + 0x670d9bd389dd29ef, + 0x606ddf900d2124f1, + 0x928fb14985ec3270, + 0x6b2f2428c5f420f3, + 0xac9ade29d5ab5fbe, + 0xec0d0434c4005822, + 0x973f10d7f3c5c108, + 0x6d5e83fc81095979, + 0xdac3e6e4e1647752, + 0x227febf93994603e, + 0x4ab8755d894167d1, + 0x4fd2d3f67d8b537a, + 0x33e196a4d5f4030a, + 0x88b51fb72092df1a, + 0xa67e5b1e8fc48316, + 0xb0855eb2a00d7dab, + 0xe875dd2da6751442, + 0x777594a243e25676, + 0x294e0f70376a85a8, + 0x83f431c7988e4f18, + 0x8e8fb6af3ca2f5f1, + 0x7297896b4b9e90f1, + 0xff38f54664d66123, + 0xb5ecf80bfff41e13, + 0x1662a3666bb8392a, + 0x07a0968e8742d3e1, + 0xf12927e564bcdfdc, + 0x5de9825a0e, + ]; + + // NONRESIDUE^T % q + const QUADRATIC_NONRESIDUE_TO_T: Fq3 = Fq3::new( + MontFp!("6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068298"), + Fq::ZERO, + Fq::ZERO, + ); + + // NQR ^ (MODULUS^i - 1)/3, i=0,1,2 with NQR = u = (0,1,0) + const FROBENIUS_COEFF_FP3_C1: &'static [Fq] = &[ + Fq::ONE, + MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), + MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), + ]; + + // NQR ^ (2*MODULUS^i - 2)/3, i=0,1,2 with NQR = u = (0,1,0) + const FROBENIUS_COEFF_FP3_C2: &'static [Fq] = &[ + Fq::ONE, + MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), + MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), + ]; + + #[inline(always)] + fn mul_fp_by_nonresidue_in_place(fe: &mut Self::Fp) -> &mut Self::Fp { + fe.double_in_place().double_in_place().neg_in_place() + } +} diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs new file mode 100644 index 0000000000000..056dd64af8736 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs @@ -0,0 +1,26 @@ +use ark_ff::{ + fields::fp6_2over3::{Fp6, Fp6Config}, + Field, MontFp, +}; + +use crate::{Fq, Fq3, Fq3Config}; + +pub type Fq6 = Fp6; + +pub struct Fq6Config; + +impl Fp6Config for Fq6Config { + type Fp3Config = Fq3Config; + + /// NONRESIDUE = (0, 1, 0) + const NONRESIDUE: Fq3 = Fq3::new(Fq::ZERO, Fq::ONE, Fq::ZERO); + + const FROBENIUS_COEFF_FP6_C1: &'static [Fq] = &[ + Fq::ONE, + MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775649"), + MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), + MontFp!("-1"), + MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), + MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292651"), + ]; +} diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fr.rs b/primitives/arkworks-curves/bw6_761/src/fields/fr.rs new file mode 100644 index 0000000000000..bc1fc318bf18e --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/fr.rs @@ -0,0 +1 @@ +pub use ark_bls12_377::{Fq as Fr, FqConfig as FrConfig}; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/mod.rs b/primitives/arkworks-curves/bw6_761/src/fields/mod.rs new file mode 100644 index 0000000000000..7bfd333dfc65d --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/mod.rs @@ -0,0 +1,14 @@ +pub mod fr; +pub use self::fr::*; + +pub mod fq; +pub use self::fq::*; + +pub mod fq3; +pub use self::fq3::*; + +pub mod fq6; +pub use self::fq6::*; + +#[cfg(test)] +mod tests; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/tests.rs b/primitives/arkworks-curves/bw6_761/src/fields/tests.rs new file mode 100644 index 0000000000000..d7b1853fd1e80 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/fields/tests.rs @@ -0,0 +1,7 @@ +use crate::*; +use ark_algebra_test_templates::*; + +test_field!(fr; Fr; mont_prime_field); +test_field!(fq; Fq; mont_prime_field); +test_field!(fq3; Fq3); +test_field!(fq6; Fq6); diff --git a/primitives/arkworks-curves/bw6_761/src/lib.rs b/primitives/arkworks-curves/bw6_761/src/lib.rs new file mode 100755 index 0000000000000..a45f46c7412a8 --- /dev/null +++ b/primitives/arkworks-curves/bw6_761/src/lib.rs @@ -0,0 +1,35 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![deny( + warnings, + unused, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +#![forbid(unsafe_code)] + +//! This library implements the BW6_761 curve generated in [\[EG20\]](https://eprint.iacr.org/2020/351). +//! The name denotes that it is a curve generated using the Brezing--Weng +//! method, and that its embedding degree is 6. +//! The main feature of this curve is that the scalar field equals the base +//! field of the BLS12_377 curve. +//! +//! Curve information: +//! * Base field: q = 6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299 +//! * Scalar field: r = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 +//! * valuation(q - 1, 2) = 1 +//! * valuation(r - 1, 2) = 46 +//! +//! G1 curve equation: y^2 = x^3 + ax + b, where +//! * a = 0, +//! * b = -1, +//! +//! G2 curve equation: y^2 = x^3 + Ax + B +//! * A = 0 +//! * B = 4 + +mod curves; +mod fields; + +pub use curves::*; +pub use fields::*; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 417d2f03a8270..43f3e41780455 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1211,50 +1211,50 @@ pub trait Crypto { sp_arkworks::bls12_377::msm_g2(bases, scalars) } - // /// Compute a multi pairing - // fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { - // sp_arkworks::bw6_761::multi_pairing(a, b) - // } - - // /// Compute a multi Miller loop - // fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - // sp_arkworks::bw6_761::multi_miller_loop(a, b) - // } - - // /// Compute a final exponentiation - // fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { - // sp_arkworks::bw6_761::final_exponentiation(f12) - // } - - // /// Compute a bigint_msm on G2 - // fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - // sp_arkworks::bw6_761::mul_projective_g2(base, scalar) - // } - - // /// Compute a bigint_msm on G2 - // fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - // sp_arkworks::bw6_761::mul_affine_g2(base, scalar) - // } - - // /// Compute a bigint_msm on G2 - // fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - // sp_arkworks::bw6_761::mul_projective_g1(base, scalar) - // } - - // /// Compute a bigint_msm on G2 - // fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - // sp_arkworks::bw6_761::mul_affine_g1(base, scalar) - // } - - // /// Compute a bigint_msm on G1 - // fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - // sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) - // } - - // /// Compute a bigint_msm on G2 - // fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - // sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) - // } + /// Compute a multi pairing + fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bw6_761::multi_pairing(a, b) + } + + /// Compute a multi Miller loop + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_arkworks::bw6_761::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation + fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + sp_arkworks::bw6_761::final_exponentiation(f12) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_projective_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g2(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_projective_g1(base, scalar) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g1(base, scalar) + } + + /// Compute a bigint_msm on G1 + fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) + } + + /// Compute a bigint_msm on G2 + fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) + } /// Compute affine multiplication on ed_on_bls12_381 fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { From 01b60c340a70f8322411464a9d60b3a196576b15 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 07:56:32 +0100 Subject: [PATCH 061/364] make bw6_761 build with dl --- Cargo.lock | 14 + primitives/arkworks-curves/bw6_761/Cargo.toml | 13 +- .../bw6_761/scripts/base_field.sage | 28 -- .../bw6_761/scripts/scalar_field.sage | 28 -- .../arkworks-curves/bw6_761/src/curves/g1.rs | 2 +- .../arkworks-curves/bw6_761/src/curves/g2.rs | 2 +- .../arkworks-curves/bw6_761/src/curves/mod.rs | 2 +- .../arkworks-curves/bw6_761/src/fields/fq.rs | 7 - .../arkworks-curves/bw6_761/src/fields/fq3.rs | 88 ----- .../arkworks-curves/bw6_761/src/fields/fq6.rs | 26 -- .../arkworks-curves/bw6_761/src/fields/fr.rs | 1 - .../arkworks-curves/bw6_761/src/fields/mod.rs | 14 - .../bw6_761/src/fields/tests.rs | 7 - primitives/arkworks-curves/bw6_761/src/lib.rs | 7 +- primitives/arkworks-models/src/bw6/g1.rs | 56 +++ primitives/arkworks-models/src/bw6/g2.rs | 174 ++++++++++ primitives/arkworks-models/src/bw6/mod.rs | 319 ++++++++++++++++++ primitives/arkworks-models/src/lib.rs | 3 +- 18 files changed, 576 insertions(+), 215 deletions(-) delete mode 100644 primitives/arkworks-curves/bw6_761/scripts/base_field.sage delete mode 100644 primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq3.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fq6.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/fr.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/mod.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/fields/tests.rs create mode 100644 primitives/arkworks-models/src/bw6/g1.rs create mode 100644 primitives/arkworks-models/src/bw6/g2.rs create mode 100644 primitives/arkworks-models/src/bw6/mod.rs diff --git a/Cargo.lock b/Cargo.lock index d60d3c58c226d..10bc690f4ca14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -434,6 +434,20 @@ dependencies = [ "ark-std 0.3.0", ] +[[package]] +name = "ark-sub-bw6-761" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std 0.4.0-alpha", + "ark-sub-bls12-377", +] + [[package]] name = "ark-sub-ed-on-bls12-377" version = "0.4.0-alpha.1" diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 0babc63760828..4de47b8590b39 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-bw6-761" +name = "ark-sub-bw6-761" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] description = "The BW6-761 pairing-friendly elliptic curve" @@ -14,20 +14,17 @@ edition = "2021" [dependencies] ark-ff = { version="0.4.0-alpha", default-features = false } -ark-ec = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } +ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } +ark-models = { path = "../../arkworks-models" } [dev-dependencies] ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-algebra-test-templates = { version = "0.4.0-alpha", default-features = false } -ark-algebra-bench-templates = { version = "0.4.0-alpha", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] default = [] std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "ark-sub-bls12-377/std" ] -[[bench]] -name = "bw6_761" -path = "benches/bw6_761.rs" -harness = false diff --git a/primitives/arkworks-curves/bw6_761/scripts/base_field.sage b/primitives/arkworks-curves/bw6_761/scripts/base_field.sage deleted file mode 100644 index a44fafbe70e22..0000000000000 --- a/primitives/arkworks-curves/bw6_761/scripts/base_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 20): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage b/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage deleted file mode 100644 index 6d9f4a7e71948..0000000000000 --- a/primitives/arkworks-curves/bw6_761/scripts/scalar_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 20): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs index f3cb3ae63c312..d6cc0a9b7eb1c 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs @@ -1,4 +1,4 @@ -use ark_ec::{ +use ark_models::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::{Affine, Projective}, }; diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs index abf83d4235bcf..9a0ee3893ac83 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs @@ -1,4 +1,4 @@ -use ark_ec::{ +use ark_models::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::{Affine, Projective}, }; diff --git a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs index cfbbf4f5fe1fa..7bea029af1dbe 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs @@ -1,4 +1,4 @@ -use ark_ec::{ +use ark_models::{ bw6, bw6::{BW6Config, TwistType, BW6}, }; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq.rs deleted file mode 100644 index e891c555dedf2..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/fq.rs +++ /dev/null @@ -1,7 +0,0 @@ -use ark_ff::fields::{Fp768, MontBackend, MontConfig}; - -#[derive(MontConfig)] -#[modulus = "6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299"] -#[generator = "2"] -pub struct FqConfig; -pub type Fq = Fp768>; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs deleted file mode 100644 index 35c4bfc0951f1..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/fq3.rs +++ /dev/null @@ -1,88 +0,0 @@ -use ark_ff::{ - fields::fp3::{Fp3, Fp3Config}, - Field, MontFp, -}; - -use crate::Fq; - -pub type Fq3 = Fp3; - -pub struct Fq3Config; - -impl Fp3Config for Fq3Config { - type Fp = Fq; - - /// NONRESIDUE = -4 - // Fq3 = Fq\[u\]/u^3+4 - const NONRESIDUE: Fq = MontFp!("-4"); - - // (MODULUS^3 - 1) % 2^TWO_ADICITY == 0 - const TWO_ADICITY: u32 = 1; - - // (T-1)/2 with T = (MODULUS^3-1) / 2^TWO_ADICITY - #[rustfmt::skip] - const TRACE_MINUS_ONE_DIV_TWO: &'static [u64] = &[ - 0xb5e7c000000a3eac, - 0xf79b99dbf41cf4ab, - 0xe9372b1919e55ee5, - 0xbb7bbc4936c1980b, - 0x7c0cb9d4399b36e1, - 0x73304a5507bb1ae0, - 0x92f639be8963936f, - 0x4f574ac2439ba816, - 0x670d9bd389dd29ef, - 0x606ddf900d2124f1, - 0x928fb14985ec3270, - 0x6b2f2428c5f420f3, - 0xac9ade29d5ab5fbe, - 0xec0d0434c4005822, - 0x973f10d7f3c5c108, - 0x6d5e83fc81095979, - 0xdac3e6e4e1647752, - 0x227febf93994603e, - 0x4ab8755d894167d1, - 0x4fd2d3f67d8b537a, - 0x33e196a4d5f4030a, - 0x88b51fb72092df1a, - 0xa67e5b1e8fc48316, - 0xb0855eb2a00d7dab, - 0xe875dd2da6751442, - 0x777594a243e25676, - 0x294e0f70376a85a8, - 0x83f431c7988e4f18, - 0x8e8fb6af3ca2f5f1, - 0x7297896b4b9e90f1, - 0xff38f54664d66123, - 0xb5ecf80bfff41e13, - 0x1662a3666bb8392a, - 0x07a0968e8742d3e1, - 0xf12927e564bcdfdc, - 0x5de9825a0e, - ]; - - // NONRESIDUE^T % q - const QUADRATIC_NONRESIDUE_TO_T: Fq3 = Fq3::new( - MontFp!("6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068298"), - Fq::ZERO, - Fq::ZERO, - ); - - // NQR ^ (MODULUS^i - 1)/3, i=0,1,2 with NQR = u = (0,1,0) - const FROBENIUS_COEFF_FP3_C1: &'static [Fq] = &[ - Fq::ONE, - MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), - MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), - ]; - - // NQR ^ (2*MODULUS^i - 2)/3, i=0,1,2 with NQR = u = (0,1,0) - const FROBENIUS_COEFF_FP3_C2: &'static [Fq] = &[ - Fq::ONE, - MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), - MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), - ]; - - #[inline(always)] - fn mul_fp_by_nonresidue_in_place(fe: &mut Self::Fp) -> &mut Self::Fp { - fe.double_in_place().double_in_place().neg_in_place() - } -} diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs b/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs deleted file mode 100644 index 056dd64af8736..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/fq6.rs +++ /dev/null @@ -1,26 +0,0 @@ -use ark_ff::{ - fields::fp6_2over3::{Fp6, Fp6Config}, - Field, MontFp, -}; - -use crate::{Fq, Fq3, Fq3Config}; - -pub type Fq6 = Fp6; - -pub struct Fq6Config; - -impl Fp6Config for Fq6Config { - type Fp3Config = Fq3Config; - - /// NONRESIDUE = (0, 1, 0) - const NONRESIDUE: Fq3 = Fq3::new(Fq::ZERO, Fq::ONE, Fq::ZERO); - - const FROBENIUS_COEFF_FP6_C1: &'static [Fq] = &[ - Fq::ONE, - MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775649"), - MontFp!("4922464560225523242118178942575080391082002530232324381063048548642823052024664478336818169867474395270858391911405337707247735739826664939444490469542109391530482826728203582549674992333383150446779312029624171857054392282775648"), - MontFp!("-1"), - MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292650"), - MontFp!("1968985824090209297278610739700577151397666382303825728450741611566800370218827257750865013421937292370006175842381275743914023380727582819905021229583192207421122272650305267822868639090213645505120388400344940985710520836292651"), - ]; -} diff --git a/primitives/arkworks-curves/bw6_761/src/fields/fr.rs b/primitives/arkworks-curves/bw6_761/src/fields/fr.rs deleted file mode 100644 index bc1fc318bf18e..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/fr.rs +++ /dev/null @@ -1 +0,0 @@ -pub use ark_bls12_377::{Fq as Fr, FqConfig as FrConfig}; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/mod.rs b/primitives/arkworks-curves/bw6_761/src/fields/mod.rs deleted file mode 100644 index 7bfd333dfc65d..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub mod fr; -pub use self::fr::*; - -pub mod fq; -pub use self::fq::*; - -pub mod fq3; -pub use self::fq3::*; - -pub mod fq6; -pub use self::fq6::*; - -#[cfg(test)] -mod tests; diff --git a/primitives/arkworks-curves/bw6_761/src/fields/tests.rs b/primitives/arkworks-curves/bw6_761/src/fields/tests.rs deleted file mode 100644 index d7b1853fd1e80..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/fields/tests.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::*; -use ark_algebra_test_templates::*; - -test_field!(fr; Fr; mont_prime_field); -test_field!(fq; Fq; mont_prime_field); -test_field!(fq3; Fq3); -test_field!(fq6; Fq6); diff --git a/primitives/arkworks-curves/bw6_761/src/lib.rs b/primitives/arkworks-curves/bw6_761/src/lib.rs index a45f46c7412a8..834e9143a1a55 100755 --- a/primitives/arkworks-curves/bw6_761/src/lib.rs +++ b/primitives/arkworks-curves/bw6_761/src/lib.rs @@ -1,7 +1,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![deny( - warnings, - unused, + // warnings, + // unused, future_incompatible, nonstandard_style, rust_2018_idioms @@ -29,7 +29,6 @@ //! * B = 4 mod curves; -mod fields; pub use curves::*; -pub use fields::*; +pub use ark_bw6_761::{fr, fq, fq3, fq6, Fq, Fr, Fq3Config, Fq6Config}; diff --git a/primitives/arkworks-models/src/bw6/g1.rs b/primitives/arkworks-models/src/bw6/g1.rs new file mode 100644 index 0000000000000..6960d19d77b33 --- /dev/null +++ b/primitives/arkworks-models/src/bw6/g1.rs @@ -0,0 +1,56 @@ +use crate::{ + bw6::BW6Config, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, +}; +use ark_serialize::*; +use ark_std::vec::Vec; + +pub type G1Affine

= Affine<

::G1Config>; +pub type G1Projective

= Projective<

::G1Config>; + +#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] +#[derivative( + Copy(bound = "P: BW6Config"), + Clone(bound = "P: BW6Config"), + Debug(bound = "P: BW6Config"), + PartialEq(bound = "P: BW6Config"), + Eq(bound = "P: BW6Config") +)] +pub struct G1Prepared(pub G1Affine

); + +impl From> for G1Prepared

{ + fn from(other: G1Affine

) -> Self { + G1Prepared(other) + } +} + +impl From> for G1Prepared

{ + fn from(q: G1Projective

) -> Self { + q.into_affine().into() + } +} + +impl<'a, P: BW6Config> From<&'a G1Affine

> for G1Prepared

{ + fn from(other: &'a G1Affine

) -> Self { + G1Prepared(*other) + } +} + +impl<'a, P: BW6Config> From<&'a G1Projective

> for G1Prepared

{ + fn from(q: &'a G1Projective

) -> Self { + q.into_affine().into() + } +} + +impl G1Prepared

{ + pub fn is_zero(&self) -> bool { + self.0.infinity + } +} + +impl Default for G1Prepared

{ + fn default() -> Self { + G1Prepared(G1Affine::

::generator()) + } +} diff --git a/primitives/arkworks-models/src/bw6/g2.rs b/primitives/arkworks-models/src/bw6/g2.rs new file mode 100644 index 0000000000000..02430bead488b --- /dev/null +++ b/primitives/arkworks-models/src/bw6/g2.rs @@ -0,0 +1,174 @@ +use ark_ff::{BitIteratorBE, Field}; +use ark_serialize::*; +use ark_std::vec::Vec; +use num_traits::One; + +use crate::{ + bw6::{BW6Config, TwistType}, + models::short_weierstrass::SWCurveConfig, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, +}; + +pub type G2Affine

= Affine<

::G2Config>; +pub type G2Projective

= Projective<

::G2Config>; + +#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] +#[derivative( + Clone(bound = "P: BW6Config"), + Debug(bound = "P: BW6Config"), + PartialEq(bound = "P: BW6Config"), + Eq(bound = "P: BW6Config") +)] +pub struct G2Prepared { + // Stores the coefficients of the line evaluations as calculated in + // https://eprint.iacr.org/2013/722.pdf + pub ell_coeffs_1: Vec<(P::Fp, P::Fp, P::Fp)>, + pub ell_coeffs_2: Vec<(P::Fp, P::Fp, P::Fp)>, + pub infinity: bool, +} + +#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] +#[derivative( + Clone(bound = "P: BW6Config"), + Copy(bound = "P: BW6Config"), + Debug(bound = "P: BW6Config") +)] +struct G2HomProjective { + x: P::Fp, + y: P::Fp, + z: P::Fp, +} + +impl Default for G2Prepared

{ + fn default() -> Self { + Self::from(G2Affine::

::generator()) + } +} + +impl From> for G2Prepared

{ + fn from(q: G2Affine

) -> Self { + if q.infinity { + return Self { + ell_coeffs_1: vec![], + ell_coeffs_2: vec![], + infinity: true, + }; + } + + // f_{u+1,Q}(P) + let mut ell_coeffs_1 = vec![]; + let mut r = G2HomProjective::

{ + x: q.x, + y: q.y, + z: P::Fp::one(), + }; + + for i in BitIteratorBE::new(P::ATE_LOOP_COUNT_1).skip(1) { + ell_coeffs_1.push(r.double_in_place()); + + if i { + ell_coeffs_1.push(r.add_in_place(&q)); + } + } + + // f_{u^3-u^2-u,Q}(P) + let mut ell_coeffs_2 = vec![]; + let mut r = G2HomProjective::

{ + x: q.x, + y: q.y, + z: P::Fp::one(), + }; + + let negq = -q; + + for bit in P::ATE_LOOP_COUNT_2.iter().rev().skip(1) { + ell_coeffs_2.push(r.double_in_place()); + + match bit { + 1 => ell_coeffs_2.push(r.add_in_place(&q)), + -1 => ell_coeffs_2.push(r.add_in_place(&negq)), + _ => continue, + } + } + + Self { + ell_coeffs_1, + ell_coeffs_2, + infinity: false, + } + } +} + +impl<'a, P: BW6Config> From<&'a G2Affine

> for G2Prepared

{ + fn from(q: &'a G2Affine

) -> Self { + (*q).into() + } +} + +impl<'a, P: BW6Config> From<&'a G2Projective

> for G2Prepared

{ + fn from(q: &'a G2Projective

) -> Self { + q.into_affine().into() + } +} + +impl From> for G2Prepared

{ + fn from(q: G2Projective

) -> Self { + q.into_affine().into() + } +} + +impl G2Prepared

{ + pub fn is_zero(&self) -> bool { + self.infinity + } +} + +impl G2HomProjective

{ + fn double_in_place(&mut self) -> (P::Fp, P::Fp, P::Fp) { + // Formula for line function when working with + // homogeneous projective coordinates, as described in https://eprint.iacr.org/2013/722.pdf. + + let a = self.x * &self.y; + let b = self.y.square(); + let b4 = b.double().double(); + let c = self.z.square(); + let e = P::G2Config::COEFF_B * &(c.double() + &c); + let f = e.double() + &e; + let g = b + &f; + let h = (self.y + &self.z).square() - &(b + &c); + let i = e - &b; + let j = self.x.square(); + let e2_square = e.double().square(); + + self.x = a.double() * &(b - &f); + self.y = g.square() - &(e2_square.double() + &e2_square); + self.z = b4 * &h; + match P::TWIST_TYPE { + TwistType::M => (i, j.double() + &j, -h), + TwistType::D => (-h, j.double() + &j, i), + } + } + + fn add_in_place(&mut self, q: &G2Affine

) -> (P::Fp, P::Fp, P::Fp) { + // Formula for line function when working with + // homogeneous projective coordinates, as described in https://eprint.iacr.org/2013/722.pdf. + let theta = self.y - &(q.y * &self.z); + let lambda = self.x - &(q.x * &self.z); + let c = theta.square(); + let d = lambda.square(); + let e = lambda * &d; + let f = self.z * &c; + let g = self.x * &d; + let h = e + &f - &g.double(); + self.x = lambda * &h; + self.y = theta * &(g - &h) - &(e * &self.y); + self.z *= &e; + let j = theta * &q.x - &(lambda * &q.y); + + match P::TWIST_TYPE { + TwistType::M => (j, -theta, lambda), + TwistType::D => (lambda, -theta, j), + } + } +} diff --git a/primitives/arkworks-models/src/bw6/mod.rs b/primitives/arkworks-models/src/bw6/mod.rs new file mode 100644 index 0000000000000..1dddd0d294f30 --- /dev/null +++ b/primitives/arkworks-models/src/bw6/mod.rs @@ -0,0 +1,319 @@ +use crate::{ + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, +}; +use ark_ff::{ + fields::{ + fp3::Fp3Config, + fp6_2over3::{Fp6, Fp6Config}, + Field, PrimeField, + }, + BitIteratorBE, CyclotomicMultSubgroup, +}; +use itertools::Itertools; +use num_traits::One; + +use ark_std::{marker::PhantomData, vec::Vec}; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +pub enum TwistType { + M, + D, +} + +pub trait BW6Config: 'static + Eq + Sized { + const X: ::BigInt; + const X_IS_NEGATIVE: bool; + const ATE_LOOP_COUNT_1: &'static [u64]; + const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool; + const ATE_LOOP_COUNT_2: &'static [i8]; + const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool; + const TWIST_TYPE: TwistType; + type Fp: PrimeField + Into<::BigInt>; + type Fp3Config: Fp3Config; + type Fp6Config: Fp6Config; + type G1Config: SWCurveConfig; + type G2Config: SWCurveConfig< + BaseField = Self::Fp, + ScalarField = ::ScalarField, + >; + + fn final_exponentiation(f: MillerLoopOutput>) -> Option>> { + let value = f.0; + let value_inv = value.inverse().unwrap(); + let value_to_first_chunk = + BW6::::final_exponentiation_first_chunk(&value, &value_inv); + Some(BW6::::final_exponentiation_last_chunk( + &value_to_first_chunk, + )) + .map(PairingOutput) + } + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + // Alg.5 in https://eprint.iacr.org/2020/351.pdf + + let (mut pairs_1, mut pairs_2) = a + .into_iter() + .zip_eq(b) + .filter_map(|(p, q)| { + let (p, q): (G1Prepared, G2Prepared) = (p.into(), q.into()); + match !p.is_zero() && !q.is_zero() { + true => Some(( + (p, q.ell_coeffs_1.into_iter()), + (p, q.ell_coeffs_2.into_iter()), + )), + false => None, + } + }) + .unzip::<_, _, Vec<_>, Vec<_>>(); + + let mut f_1 = cfg_chunks_mut!(pairs_1, 4) + .map(|pairs| { + let mut f = as Pairing>::TargetField::one(); + for i in BitIteratorBE::without_leading_zeros(Self::ATE_LOOP_COUNT_1).skip(1) { + f.square_in_place(); + for (p, coeffs) in pairs.iter_mut() { + BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); + } + if i { + for (p, coeffs) in pairs.iter_mut() { + BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); + } + } + } + f + }) + .product::< as Pairing>::TargetField>(); + + if Self::ATE_LOOP_COUNT_1_IS_NEGATIVE { + f_1.cyclotomic_inverse_in_place(); + } + let mut f_2 = cfg_chunks_mut!(pairs_2, 4) + .map(|pairs| { + let mut f = < as Pairing>::TargetField>::one(); + for i in (1..Self::ATE_LOOP_COUNT_2.len()).rev() { + if i != Self::ATE_LOOP_COUNT_2.len() - 1 { + f.square_in_place(); + } + + for (p, ref mut coeffs) in pairs.iter_mut() { + BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); + } + + let bit = Self::ATE_LOOP_COUNT_2[i - 1]; + if bit == 1 || bit == -1 { + for &mut (p, ref mut coeffs) in pairs.iter_mut() { + BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); + } + } + } + f + }) + .product::< as Pairing>::TargetField>(); + + if Self::ATE_LOOP_COUNT_2_IS_NEGATIVE { + f_2.cyclotomic_inverse_in_place(); + } + + f_2.frobenius_map_in_place(1); + + MillerLoopOutput(f_1 * &f_2) + } +} + +pub mod g1; +pub mod g2; + +pub use self::{ + g1::{G1Affine, G1Prepared, G1Projective}, + g2::{G2Affine, G2Prepared, G2Projective}, +}; + +#[derive(Derivative)] +#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] +pub struct BW6(PhantomData P>); + +impl BW6

{ + // Evaluate the line function at point p. + fn ell(f: &mut Fp6, coeffs: &(P::Fp, P::Fp, P::Fp), p: &G1Affine

) { + let mut c0 = coeffs.0; + let mut c1 = coeffs.1; + let mut c2 = coeffs.2; + + match P::TWIST_TYPE { + TwistType::M => { + c2 *= &p.y; + c1 *= &p.x; + f.mul_by_014(&c0, &c1, &c2); + }, + TwistType::D => { + c0 *= &p.y; + c1 *= &p.x; + f.mul_by_034(&c0, &c1, &c2); + }, + } + } + + fn exp_by_x(mut f: Fp6) -> Fp6 { + f = f.cyclotomic_exp(&P::X); + if P::X_IS_NEGATIVE { + f.cyclotomic_inverse_in_place(); + } + f + } + + fn final_exponentiation_first_chunk( + elt: &Fp6, + elt_inv: &Fp6, + ) -> Fp6 { + // (q^3-1)*(q+1) + + // elt_q3 = elt^(q^3) + let mut elt_q3 = *elt; + elt_q3.cyclotomic_inverse_in_place(); + // elt_q3_over_elt = elt^(q^3-1) + let elt_q3_over_elt = elt_q3 * elt_inv; + // alpha = elt^((q^3-1) * q) + let mut alpha = elt_q3_over_elt; + alpha.frobenius_map_in_place(1); + // beta = elt^((q^3-1)*(q+1) + alpha * &elt_q3_over_elt + } + + #[allow(clippy::let_and_return)] + fn final_exponentiation_last_chunk(f: &Fp6) -> Fp6 { + // hard_part + // From https://eprint.iacr.org/2020/351.pdf, Alg.6 + + #[rustfmt::skip] + // R0(x) := (-103*x^7 + 70*x^6 + 269*x^5 - 197*x^4 - 314*x^3 - 73*x^2 - 263*x - 220) + // R1(x) := (103*x^9 - 276*x^8 + 77*x^7 + 492*x^6 - 445*x^5 - 65*x^4 + 452*x^3 - 181*x^2 + 34*x + 229) + // f ^ R0(u) * (f ^ q) ^ R1(u) in a 2-NAF multi-exp fashion. + + // steps 1,2,3 + let f0 = *f; + let mut f0p = f0; + f0p.frobenius_map_in_place(1); + let f1 = Self::exp_by_x(f0); + let mut f1p = f1; + f1p.frobenius_map_in_place(1); + let f2 = Self::exp_by_x(f1); + let mut f2p = f2; + f2p.frobenius_map_in_place(1); + let f3 = Self::exp_by_x(f2); + let mut f3p = f3; + f3p.frobenius_map_in_place(1); + let f4 = Self::exp_by_x(f3); + let mut f4p = f4; + f4p.frobenius_map_in_place(1); + let f5 = Self::exp_by_x(f4); + let mut f5p = f5; + f5p.frobenius_map_in_place(1); + let f6 = Self::exp_by_x(f5); + let mut f6p = f6; + f6p.frobenius_map_in_place(1); + let f7 = Self::exp_by_x(f6); + let mut f7p = f7; + f7p.frobenius_map_in_place(1); + + // step 4 + let f8p = Self::exp_by_x(f7p); + let f9p = Self::exp_by_x(f8p); + + // step 5 + let mut f5p_p3 = f5p; + f5p_p3.cyclotomic_inverse_in_place(); + let result1 = f3p * &f6p * &f5p_p3; + + // step 6 + let result2 = result1.square(); + let f4_2p = f4 * &f2p; + let mut tmp1_p3 = f0 * &f1 * &f3 * &f4_2p * &f8p; + tmp1_p3.cyclotomic_inverse_in_place(); + let result3 = result2 * &f5 * &f0p * &tmp1_p3; + + // step 7 + let result4 = result3.square(); + let mut f7_p3 = f7; + f7_p3.cyclotomic_inverse_in_place(); + let result5 = result4 * &f9p * &f7_p3; + + // step 8 + let result6 = result5.square(); + let f2_4p = f2 * &f4p; + let f4_2p_5p = f4_2p * &f5p; + let mut tmp2_p3 = f2_4p * &f3 * &f3p; + tmp2_p3.cyclotomic_inverse_in_place(); + let result7 = result6 * &f4_2p_5p * &f6 * &f7p * &tmp2_p3; + + // step 9 + let result8 = result7.square(); + let mut tmp3_p3 = f0p * &f9p; + tmp3_p3.cyclotomic_inverse_in_place(); + let result9 = result8 * &f0 * &f7 * &f1p * &tmp3_p3; + + // step 10 + let result10 = result9.square(); + let f6p_8p = f6p * &f8p; + let f5_7p = f5 * &f7p; + let mut tmp4_p3 = f6p_8p; + tmp4_p3.cyclotomic_inverse_in_place(); + let result11 = result10 * &f5_7p * &f2p * &tmp4_p3; + + // step 11 + let result12 = result11.square(); + let f3_6 = f3 * &f6; + let f1_7 = f1 * &f7; + let mut tmp5_p3 = f1_7 * &f2; + tmp5_p3.cyclotomic_inverse_in_place(); + let result13 = result12 * &f3_6 * &f9p * &tmp5_p3; + + // step 12 + let result14 = result13.square(); + let mut tmp6_p3 = f4_2p * &f5_7p * &f6p_8p; + tmp6_p3.cyclotomic_inverse_in_place(); + let result15 = result14 * &f0 * &f0p * &f3p * &f5p * &tmp6_p3; + + // step 13 + let result16 = result15.square(); + let mut tmp7_p3 = f3_6; + tmp7_p3.cyclotomic_inverse_in_place(); + let result17 = result16 * &f1p * &tmp7_p3; + + // step 14 + let result18 = result17.square(); + let mut tmp8_p3 = f2_4p * &f4_2p_5p * &f9p; + tmp8_p3.cyclotomic_inverse_in_place(); + let result19 = result18 * &f1_7 * &f5_7p * &f0p * &tmp8_p3; + + result19 + } +} + +impl Pairing for BW6

{ + type BaseField = ::BaseField; + type ScalarField = ::ScalarField; + type G1 = G1Projective

; + type G1Affine = G1Affine

; + type G1Prepared = G1Prepared

; + type G2 = G2Projective

; + type G2Affine = G2Affine

; + type G2Prepared = G2Prepared

; + type TargetField = Fp6; + + fn final_exponentiation(f: MillerLoopOutput) -> Option> { + P::final_exponentiation(f) + } + + fn multi_miller_loop( + a: impl IntoIterator>, + b: impl IntoIterator>, + ) -> MillerLoopOutput { + P::multi_miller_loop(a, b) + } +} diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 882fa40c8e265..ca82c6d8b2121 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,4 +1,5 @@ pub mod bls12; +// pub mod bw6; pub use ark_ec::{ - models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, + models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, bw6 }; From 3f8172ccc2faf28834fd8b73e087c0c9d9832ec0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 08:06:04 +0100 Subject: [PATCH 062/364] arkworks-models: add bw6 --- primitives/arkworks-models/src/bw6/g1.rs | 1 + primitives/arkworks-models/src/bw6/g2.rs | 1 + primitives/arkworks-models/src/bw6/mod.rs | 2 ++ primitives/arkworks-models/src/lib.rs | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-models/src/bw6/g1.rs b/primitives/arkworks-models/src/bw6/g1.rs index 6960d19d77b33..08fbe611623e7 100644 --- a/primitives/arkworks-models/src/bw6/g1.rs +++ b/primitives/arkworks-models/src/bw6/g1.rs @@ -5,6 +5,7 @@ use crate::{ }; use ark_serialize::*; use ark_std::vec::Vec; +use derivative::Derivative; pub type G1Affine

= Affine<

::G1Config>; pub type G1Projective

= Projective<

::G1Config>; diff --git a/primitives/arkworks-models/src/bw6/g2.rs b/primitives/arkworks-models/src/bw6/g2.rs index 02430bead488b..fac1f029eb22d 100644 --- a/primitives/arkworks-models/src/bw6/g2.rs +++ b/primitives/arkworks-models/src/bw6/g2.rs @@ -2,6 +2,7 @@ use ark_ff::{BitIteratorBE, Field}; use ark_serialize::*; use ark_std::vec::Vec; use num_traits::One; +use derivative::Derivative; use crate::{ bw6::{BW6Config, TwistType}, diff --git a/primitives/arkworks-models/src/bw6/mod.rs b/primitives/arkworks-models/src/bw6/mod.rs index 1dddd0d294f30..8bc0d9a8b2a09 100644 --- a/primitives/arkworks-models/src/bw6/mod.rs +++ b/primitives/arkworks-models/src/bw6/mod.rs @@ -10,8 +10,10 @@ use ark_ff::{ }, BitIteratorBE, CyclotomicMultSubgroup, }; +use ark_std::cfg_chunks_mut; use itertools::Itertools; use num_traits::One; +use derivative::Derivative; use ark_std::{marker::PhantomData, vec::Vec}; diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index ca82c6d8b2121..a293f77a42a88 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,5 +1,5 @@ pub mod bls12; -// pub mod bw6; +pub mod bw6; pub use ark_ec::{ - models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, bw6 + models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, }; From e81854d59e09dde95aa3dc2b16012dd9240f11db Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 08:38:46 +0100 Subject: [PATCH 063/364] add bw6_761 host functions --- Cargo.lock | 1 + primitives/arkworks-curves/bw6_761/Cargo.toml | 3 +- .../arkworks-curves/bw6_761/src/curves/g1.rs | 48 +- .../arkworks-curves/bw6_761/src/curves/g2.rs | 44 +- .../arkworks-curves/bw6_761/src/curves/mod.rs | 120 +++-- primitives/arkworks-curves/bw6_761/src/lib.rs | 2 +- primitives/arkworks-models/src/bw6/g1.rs | 52 +- primitives/arkworks-models/src/bw6/g2.rs | 177 ++----- primitives/arkworks-models/src/bw6/mod.rs | 487 ++++++++---------- primitives/arkworks/src/bls12_381.rs | 16 +- primitives/arkworks/src/bw6_761.rs | 38 +- 11 files changed, 399 insertions(+), 589 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10bc690f4ca14..87090c41ab715 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -446,6 +446,7 @@ dependencies = [ "ark-serialize", "ark-std 0.4.0-alpha", "ark-sub-bls12-377", + "sp-io", ] [[package]] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 4de47b8590b39..2072391a92d21 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -16,11 +16,12 @@ edition = "2021" ark-ff = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } ark-models = { path = "../../arkworks-models" } +sp-io = { path = "../../io" } [dev-dependencies] -ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs index d6cc0a9b7eb1c..042ff3eda090a 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs @@ -1,8 +1,8 @@ +use ark_ff::{Field, MontFp}; use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::{Affine, Projective}, + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::{Affine, Projective}, }; -use ark_ff::{Field, MontFp}; use crate::{Fq, Fr}; @@ -13,13 +13,13 @@ pub type G1Projective = Projective; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; + type BaseField = Fq; + type ScalarField = Fr; - /// COFACTOR = - /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194876 + /// COFACTOR = + /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194876 #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ + const COFACTOR: &'static [u64] = &[ 0x3de580000000007c, 0x832ba4061000003b, 0xc61c554757551c0c, @@ -28,25 +28,25 @@ impl CurveConfig for Config { 0xad1972339049ce76, ]; - /// COFACTOR^(-1) mod r = - /// 91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804 - const COFACTOR_INV: Fr = MontFp!("91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804"); + /// COFACTOR^(-1) mod r = + /// 91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804 + const COFACTOR_INV: Fr = MontFp!("91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804"); } impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = -1 - const COEFF_B: Fq = MontFp!("-1"); - - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - #[inline(always)] - fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { - use ark_ff::Zero; - Self::BaseField::zero() - } + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; + + /// COEFF_B = -1 + const COEFF_B: Fq = MontFp!("-1"); + + /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) + const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); + #[inline(always)] + fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { + use ark_ff::Zero; + Self::BaseField::zero() + } } /// G1_GENERATOR_X = diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs index 9a0ee3893ac83..9a00021cd9ca8 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs @@ -1,8 +1,8 @@ +use ark_ff::{Field, MontFp}; use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::{Affine, Projective}, + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + short_weierstrass::{Affine, Projective}, }; -use ark_ff::{Field, MontFp}; use crate::{Fq, Fr}; @@ -13,13 +13,13 @@ pub type G2Projective = Projective; pub struct Config; impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; + type BaseField = Fq; + type ScalarField = Fr; - /// COFACTOR = - /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194869 + /// COFACTOR = + /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194869 #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ + const COFACTOR: &'static [u64] = &[ 0x3de5800000000075, 0x832ba4061000003b, 0xc61c554757551c0c, @@ -28,26 +28,26 @@ impl CurveConfig for Config { 0xad1972339049ce76, ]; - /// COFACTOR^(-1) mod r = - /// 214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124 - const COFACTOR_INV: Fr = MontFp!("214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124"); + /// COFACTOR^(-1) mod r = + /// 214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124 + const COFACTOR_INV: Fr = MontFp!("214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124"); } impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; + /// COEFF_A = 0 + const COEFF_A: Fq = Fq::ZERO; - /// COEFF_B = 4 - const COEFF_B: Fq = MontFp!("4"); + /// COEFF_B = 4 + const COEFF_B: Fq = MontFp!("4"); - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); + /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) + const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - #[inline(always)] - fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { - use ark_ff::Zero; - Self::BaseField::zero() - } + #[inline(always)] + fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { + use ark_ff::Zero; + Self::BaseField::zero() + } } /// G2_GENERATOR_X = diff --git a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs index 7bea029af1dbe..f4bfd7aaeb97c 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs @@ -1,8 +1,11 @@ +use ark_ff::{biginteger::BigInteger768 as BigInteger, BigInt}; use ark_models::{ - bw6, - bw6::{BW6Config, TwistType, BW6}, + bw6, + bw6::{BW6Config, G1Prepared, G2Prepared, TwistType, BW6}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, }; -use ark_ff::{biginteger::BigInteger768 as BigInteger, BigInt}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::*; @@ -16,42 +19,81 @@ mod tests; pub struct Config; impl BW6Config for Config { - const X: BigInteger = BigInt::new([ - 0x8508c00000000001, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - 0x0, - ]); - /// `x` is positive. - const X_IS_NEGATIVE: bool = false; - // X+1 - const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000002]; - const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = false; - // X^3-X^2-X - const ATE_LOOP_COUNT_2: &'static [i8] = &[ - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, - 1, 0, 0, 0, -1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 1, - 0, -1, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, - ]; - const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; - const TWIST_TYPE: TwistType = TwistType::M; - type Fp = Fq; - type Fp3Config = Fq3Config; - type Fp6Config = Fq6Config; - type G1Config = g1::Config; - type G2Config = g2::Config; + const X: BigInteger = + BigInt::new([0x8508c00000000001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); + /// `x` is positive. + const X_IS_NEGATIVE: bool = false; + // X+1 + const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000002]; + const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = false; + // X^3-X^2-X + const ATE_LOOP_COUNT_2: &'static [i8] = &[ + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, + 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, + 1, 0, 0, 0, -1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 1, + 0, -1, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, + ]; + const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; + const TWIST_TYPE: TwistType = TwistType::M; + type Fp = Fq; + type Fp3Config = Fq3Config; + type Fp6Config = Fq6Config; + type G1Config = g1::Config; + type G2Config = g2::Config; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput> { + let a: Vec> = a + .into_iter() + .map(|elem| { + let elem: as Pairing>::G1Prepared = elem.into(); + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let b = b + .into_iter() + .map(|elem| { + let elem: as Pairing>::G2Prepared = elem.into(); + let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + + let res = sp_io::crypto::bw6_761_multi_miller_loop(a, b); + let cursor = Cursor::new(&res[..]); + let f = as Pairing>::TargetField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + MillerLoopOutput(f) + } + + fn final_exponentiation(f: MillerLoopOutput>) -> Option>> { + let mut out: [u8; 576] = [0; 576]; + let mut cursor = Cursor::new(&mut out[..]); + f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let res = sp_io::crypto::bw6_761_final_exponentiation(&out); + + let cursor = Cursor::new(&res[..]); + let res = + PairingOutput::>::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap(); + + Some(res) + } } pub type BW6_761 = BW6; diff --git a/primitives/arkworks-curves/bw6_761/src/lib.rs b/primitives/arkworks-curves/bw6_761/src/lib.rs index 834e9143a1a55..2199443932874 100755 --- a/primitives/arkworks-curves/bw6_761/src/lib.rs +++ b/primitives/arkworks-curves/bw6_761/src/lib.rs @@ -30,5 +30,5 @@ mod curves; +pub use ark_bw6_761::{fq, fq3, fq6, fr, Fq, Fq3Config, Fq6Config, Fr}; pub use curves::*; -pub use ark_bw6_761::{fr, fq, fq3, fq6, Fq, Fr, Fq3Config, Fq6Config}; diff --git a/primitives/arkworks-models/src/bw6/g1.rs b/primitives/arkworks-models/src/bw6/g1.rs index 08fbe611623e7..768668b2dcd8b 100644 --- a/primitives/arkworks-models/src/bw6/g1.rs +++ b/primitives/arkworks-models/src/bw6/g1.rs @@ -1,7 +1,7 @@ use crate::{ - bw6::BW6Config, - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, + bw6::BW6Config, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, }; use ark_serialize::*; use ark_std::vec::Vec; @@ -12,46 +12,46 @@ pub type G1Projective

= Projective<

::G1Config>; #[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] #[derivative( - Copy(bound = "P: BW6Config"), - Clone(bound = "P: BW6Config"), - Debug(bound = "P: BW6Config"), - PartialEq(bound = "P: BW6Config"), - Eq(bound = "P: BW6Config") + Copy(bound = "P: BW6Config"), + Clone(bound = "P: BW6Config"), + Debug(bound = "P: BW6Config"), + PartialEq(bound = "P: BW6Config"), + Eq(bound = "P: BW6Config") )] pub struct G1Prepared(pub G1Affine

); impl From> for G1Prepared

{ - fn from(other: G1Affine

) -> Self { - G1Prepared(other) - } + fn from(other: G1Affine

) -> Self { + G1Prepared(other) + } } impl From> for G1Prepared

{ - fn from(q: G1Projective

) -> Self { - q.into_affine().into() - } + fn from(q: G1Projective

) -> Self { + q.into_affine().into() + } } impl<'a, P: BW6Config> From<&'a G1Affine

> for G1Prepared

{ - fn from(other: &'a G1Affine

) -> Self { - G1Prepared(*other) - } + fn from(other: &'a G1Affine

) -> Self { + G1Prepared(*other) + } } impl<'a, P: BW6Config> From<&'a G1Projective

> for G1Prepared

{ - fn from(q: &'a G1Projective

) -> Self { - q.into_affine().into() - } + fn from(q: &'a G1Projective

) -> Self { + q.into_affine().into() + } } impl G1Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.infinity - } + pub fn is_zero(&self) -> bool { + self.0.infinity + } } impl Default for G1Prepared

{ - fn default() -> Self { - G1Prepared(G1Affine::

::generator()) - } + fn default() -> Self { + G1Prepared(G1Affine::

::generator()) + } } diff --git a/primitives/arkworks-models/src/bw6/g2.rs b/primitives/arkworks-models/src/bw6/g2.rs index fac1f029eb22d..ce422d1058ff3 100644 --- a/primitives/arkworks-models/src/bw6/g2.rs +++ b/primitives/arkworks-models/src/bw6/g2.rs @@ -1,14 +1,11 @@ -use ark_ff::{BitIteratorBE, Field}; use ark_serialize::*; use ark_std::vec::Vec; -use num_traits::One; use derivative::Derivative; use crate::{ - bw6::{BW6Config, TwistType}, - models::short_weierstrass::SWCurveConfig, - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, + bw6::BW6Config, + short_weierstrass::{Affine, Projective}, + AffineRepr, CurveGroup, }; pub type G2Affine

= Affine<

::G2Config>; @@ -16,160 +13,46 @@ pub type G2Projective

= Projective<

::G2Config>; #[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] #[derivative( - Clone(bound = "P: BW6Config"), - Debug(bound = "P: BW6Config"), - PartialEq(bound = "P: BW6Config"), - Eq(bound = "P: BW6Config") + Copy(bound = "P: BW6Config"), + Clone(bound = "P: BW6Config"), + Debug(bound = "P: BW6Config"), + PartialEq(bound = "P: BW6Config"), + Eq(bound = "P: BW6Config") )] -pub struct G2Prepared { - // Stores the coefficients of the line evaluations as calculated in - // https://eprint.iacr.org/2013/722.pdf - pub ell_coeffs_1: Vec<(P::Fp, P::Fp, P::Fp)>, - pub ell_coeffs_2: Vec<(P::Fp, P::Fp, P::Fp)>, - pub infinity: bool, -} - -#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] -#[derivative( - Clone(bound = "P: BW6Config"), - Copy(bound = "P: BW6Config"), - Debug(bound = "P: BW6Config") -)] -struct G2HomProjective { - x: P::Fp, - y: P::Fp, - z: P::Fp, -} - -impl Default for G2Prepared

{ - fn default() -> Self { - Self::from(G2Affine::

::generator()) - } -} +pub struct G2Prepared(pub G2Affine

); impl From> for G2Prepared

{ - fn from(q: G2Affine

) -> Self { - if q.infinity { - return Self { - ell_coeffs_1: vec![], - ell_coeffs_2: vec![], - infinity: true, - }; - } - - // f_{u+1,Q}(P) - let mut ell_coeffs_1 = vec![]; - let mut r = G2HomProjective::

{ - x: q.x, - y: q.y, - z: P::Fp::one(), - }; - - for i in BitIteratorBE::new(P::ATE_LOOP_COUNT_1).skip(1) { - ell_coeffs_1.push(r.double_in_place()); - - if i { - ell_coeffs_1.push(r.add_in_place(&q)); - } - } - - // f_{u^3-u^2-u,Q}(P) - let mut ell_coeffs_2 = vec![]; - let mut r = G2HomProjective::

{ - x: q.x, - y: q.y, - z: P::Fp::one(), - }; - - let negq = -q; - - for bit in P::ATE_LOOP_COUNT_2.iter().rev().skip(1) { - ell_coeffs_2.push(r.double_in_place()); - - match bit { - 1 => ell_coeffs_2.push(r.add_in_place(&q)), - -1 => ell_coeffs_2.push(r.add_in_place(&negq)), - _ => continue, - } - } + fn from(other: G2Affine

) -> Self { + G2Prepared(other) + } +} - Self { - ell_coeffs_1, - ell_coeffs_2, - infinity: false, - } - } +impl From> for G2Prepared

{ + fn from(q: G2Projective

) -> Self { + q.into_affine().into() + } } impl<'a, P: BW6Config> From<&'a G2Affine

> for G2Prepared

{ - fn from(q: &'a G2Affine

) -> Self { - (*q).into() - } + fn from(other: &'a G2Affine

) -> Self { + G2Prepared(*other) + } } impl<'a, P: BW6Config> From<&'a G2Projective

> for G2Prepared

{ - fn from(q: &'a G2Projective

) -> Self { - q.into_affine().into() - } -} - -impl From> for G2Prepared

{ - fn from(q: G2Projective

) -> Self { - q.into_affine().into() - } + fn from(q: &'a G2Projective

) -> Self { + q.into_affine().into() + } } impl G2Prepared

{ - pub fn is_zero(&self) -> bool { - self.infinity - } + pub fn is_zero(&self) -> bool { + self.0.infinity + } } -impl G2HomProjective

{ - fn double_in_place(&mut self) -> (P::Fp, P::Fp, P::Fp) { - // Formula for line function when working with - // homogeneous projective coordinates, as described in https://eprint.iacr.org/2013/722.pdf. - - let a = self.x * &self.y; - let b = self.y.square(); - let b4 = b.double().double(); - let c = self.z.square(); - let e = P::G2Config::COEFF_B * &(c.double() + &c); - let f = e.double() + &e; - let g = b + &f; - let h = (self.y + &self.z).square() - &(b + &c); - let i = e - &b; - let j = self.x.square(); - let e2_square = e.double().square(); - - self.x = a.double() * &(b - &f); - self.y = g.square() - &(e2_square.double() + &e2_square); - self.z = b4 * &h; - match P::TWIST_TYPE { - TwistType::M => (i, j.double() + &j, -h), - TwistType::D => (-h, j.double() + &j, i), - } - } - - fn add_in_place(&mut self, q: &G2Affine

) -> (P::Fp, P::Fp, P::Fp) { - // Formula for line function when working with - // homogeneous projective coordinates, as described in https://eprint.iacr.org/2013/722.pdf. - let theta = self.y - &(q.y * &self.z); - let lambda = self.x - &(q.x * &self.z); - let c = theta.square(); - let d = lambda.square(); - let e = lambda * &d; - let f = self.z * &c; - let g = self.x * &d; - let h = e + &f - &g.double(); - self.x = lambda * &h; - self.y = theta * &(g - &h) - &(e * &self.y); - self.z *= &e; - let j = theta * &q.x - &(lambda * &q.y); - - match P::TWIST_TYPE { - TwistType::M => (j, -theta, lambda), - TwistType::D => (lambda, -theta, j), - } - } +impl Default for G2Prepared

{ + fn default() -> Self { + G2Prepared(G2Affine::

::generator()) + } } diff --git a/primitives/arkworks-models/src/bw6/mod.rs b/primitives/arkworks-models/src/bw6/mod.rs index 8bc0d9a8b2a09..6f66bc2dfe869 100644 --- a/primitives/arkworks-models/src/bw6/mod.rs +++ b/primitives/arkworks-models/src/bw6/mod.rs @@ -1,139 +1,58 @@ use crate::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, + models::{short_weierstrass::SWCurveConfig, CurveConfig}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, }; use ark_ff::{ - fields::{ - fp3::Fp3Config, - fp6_2over3::{Fp6, Fp6Config}, - Field, PrimeField, - }, - BitIteratorBE, CyclotomicMultSubgroup, + fields::{ + fp3::Fp3Config, + fp6_2over3::{Fp6, Fp6Config}, + Field, PrimeField, + }, + BitIteratorBE, CyclotomicMultSubgroup, }; -use ark_std::cfg_chunks_mut; -use itertools::Itertools; -use num_traits::One; use derivative::Derivative; -use ark_std::{marker::PhantomData, vec::Vec}; +use ark_std::marker::PhantomData; #[cfg(feature = "parallel")] use rayon::prelude::*; pub enum TwistType { - M, - D, + M, + D, } pub trait BW6Config: 'static + Eq + Sized { - const X: ::BigInt; - const X_IS_NEGATIVE: bool; - const ATE_LOOP_COUNT_1: &'static [u64]; - const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool; - const ATE_LOOP_COUNT_2: &'static [i8]; - const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool; - const TWIST_TYPE: TwistType; - type Fp: PrimeField + Into<::BigInt>; - type Fp3Config: Fp3Config; - type Fp6Config: Fp6Config; - type G1Config: SWCurveConfig; - type G2Config: SWCurveConfig< - BaseField = Self::Fp, - ScalarField = ::ScalarField, - >; - - fn final_exponentiation(f: MillerLoopOutput>) -> Option>> { - let value = f.0; - let value_inv = value.inverse().unwrap(); - let value_to_first_chunk = - BW6::::final_exponentiation_first_chunk(&value, &value_inv); - Some(BW6::::final_exponentiation_last_chunk( - &value_to_first_chunk, - )) - .map(PairingOutput) - } - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - // Alg.5 in https://eprint.iacr.org/2020/351.pdf - - let (mut pairs_1, mut pairs_2) = a - .into_iter() - .zip_eq(b) - .filter_map(|(p, q)| { - let (p, q): (G1Prepared, G2Prepared) = (p.into(), q.into()); - match !p.is_zero() && !q.is_zero() { - true => Some(( - (p, q.ell_coeffs_1.into_iter()), - (p, q.ell_coeffs_2.into_iter()), - )), - false => None, - } - }) - .unzip::<_, _, Vec<_>, Vec<_>>(); - - let mut f_1 = cfg_chunks_mut!(pairs_1, 4) - .map(|pairs| { - let mut f = as Pairing>::TargetField::one(); - for i in BitIteratorBE::without_leading_zeros(Self::ATE_LOOP_COUNT_1).skip(1) { - f.square_in_place(); - for (p, coeffs) in pairs.iter_mut() { - BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); - } - if i { - for (p, coeffs) in pairs.iter_mut() { - BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); - } - } - } - f - }) - .product::< as Pairing>::TargetField>(); - - if Self::ATE_LOOP_COUNT_1_IS_NEGATIVE { - f_1.cyclotomic_inverse_in_place(); - } - let mut f_2 = cfg_chunks_mut!(pairs_2, 4) - .map(|pairs| { - let mut f = < as Pairing>::TargetField>::one(); - for i in (1..Self::ATE_LOOP_COUNT_2.len()).rev() { - if i != Self::ATE_LOOP_COUNT_2.len() - 1 { - f.square_in_place(); - } - - for (p, ref mut coeffs) in pairs.iter_mut() { - BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); - } - - let bit = Self::ATE_LOOP_COUNT_2[i - 1]; - if bit == 1 || bit == -1 { - for &mut (p, ref mut coeffs) in pairs.iter_mut() { - BW6::::ell(&mut f, &coeffs.next().unwrap(), &p.0); - } - } - } - f - }) - .product::< as Pairing>::TargetField>(); - - if Self::ATE_LOOP_COUNT_2_IS_NEGATIVE { - f_2.cyclotomic_inverse_in_place(); - } - - f_2.frobenius_map_in_place(1); - - MillerLoopOutput(f_1 * &f_2) - } + const X: ::BigInt; + const X_IS_NEGATIVE: bool; + const ATE_LOOP_COUNT_1: &'static [u64]; + const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool; + const ATE_LOOP_COUNT_2: &'static [i8]; + const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool; + const TWIST_TYPE: TwistType; + type Fp: PrimeField + Into<::BigInt>; + type Fp3Config: Fp3Config; + type Fp6Config: Fp6Config; + type G1Config: SWCurveConfig; + type G2Config: SWCurveConfig< + BaseField = Self::Fp, + ScalarField = ::ScalarField, + >; + + fn final_exponentiation(f: MillerLoopOutput>) -> Option>>; + + fn multi_miller_loop( + a: impl IntoIterator>>, + b: impl IntoIterator>>, + ) -> MillerLoopOutput>; } pub mod g1; pub mod g2; pub use self::{ - g1::{G1Affine, G1Prepared, G1Projective}, - g2::{G2Affine, G2Prepared, G2Projective}, + g1::{G1Affine, G1Prepared, G1Projective}, + g2::{G2Affine, G2Prepared, G2Projective}, }; #[derive(Derivative)] @@ -141,181 +60,181 @@ pub use self::{ pub struct BW6(PhantomData P>); impl BW6

{ - // Evaluate the line function at point p. - fn ell(f: &mut Fp6, coeffs: &(P::Fp, P::Fp, P::Fp), p: &G1Affine

) { - let mut c0 = coeffs.0; - let mut c1 = coeffs.1; - let mut c2 = coeffs.2; - - match P::TWIST_TYPE { - TwistType::M => { - c2 *= &p.y; - c1 *= &p.x; - f.mul_by_014(&c0, &c1, &c2); - }, - TwistType::D => { - c0 *= &p.y; - c1 *= &p.x; - f.mul_by_034(&c0, &c1, &c2); - }, - } - } - - fn exp_by_x(mut f: Fp6) -> Fp6 { - f = f.cyclotomic_exp(&P::X); - if P::X_IS_NEGATIVE { - f.cyclotomic_inverse_in_place(); - } - f - } - - fn final_exponentiation_first_chunk( - elt: &Fp6, - elt_inv: &Fp6, - ) -> Fp6 { - // (q^3-1)*(q+1) - - // elt_q3 = elt^(q^3) - let mut elt_q3 = *elt; - elt_q3.cyclotomic_inverse_in_place(); - // elt_q3_over_elt = elt^(q^3-1) - let elt_q3_over_elt = elt_q3 * elt_inv; - // alpha = elt^((q^3-1) * q) - let mut alpha = elt_q3_over_elt; - alpha.frobenius_map_in_place(1); - // beta = elt^((q^3-1)*(q+1) - alpha * &elt_q3_over_elt - } - - #[allow(clippy::let_and_return)] - fn final_exponentiation_last_chunk(f: &Fp6) -> Fp6 { - // hard_part - // From https://eprint.iacr.org/2020/351.pdf, Alg.6 - - #[rustfmt::skip] + // Evaluate the line function at point p. + fn ell(f: &mut Fp6, coeffs: &(P::Fp, P::Fp, P::Fp), p: &G1Affine

) { + let mut c0 = coeffs.0; + let mut c1 = coeffs.1; + let mut c2 = coeffs.2; + + match P::TWIST_TYPE { + TwistType::M => { + c2 *= &p.y; + c1 *= &p.x; + f.mul_by_014(&c0, &c1, &c2); + }, + TwistType::D => { + c0 *= &p.y; + c1 *= &p.x; + f.mul_by_034(&c0, &c1, &c2); + }, + } + } + + fn exp_by_x(mut f: Fp6) -> Fp6 { + f = f.cyclotomic_exp(&P::X); + if P::X_IS_NEGATIVE { + f.cyclotomic_inverse_in_place(); + } + f + } + + fn final_exponentiation_first_chunk( + elt: &Fp6, + elt_inv: &Fp6, + ) -> Fp6 { + // (q^3-1)*(q+1) + + // elt_q3 = elt^(q^3) + let mut elt_q3 = *elt; + elt_q3.cyclotomic_inverse_in_place(); + // elt_q3_over_elt = elt^(q^3-1) + let elt_q3_over_elt = elt_q3 * elt_inv; + // alpha = elt^((q^3-1) * q) + let mut alpha = elt_q3_over_elt; + alpha.frobenius_map_in_place(1); + // beta = elt^((q^3-1)*(q+1) + alpha * &elt_q3_over_elt + } + + #[allow(clippy::let_and_return)] + fn final_exponentiation_last_chunk(f: &Fp6) -> Fp6 { + // hard_part + // From https://eprint.iacr.org/2020/351.pdf, Alg.6 + + #[rustfmt::skip] // R0(x) := (-103*x^7 + 70*x^6 + 269*x^5 - 197*x^4 - 314*x^3 - 73*x^2 - 263*x - 220) // R1(x) := (103*x^9 - 276*x^8 + 77*x^7 + 492*x^6 - 445*x^5 - 65*x^4 + 452*x^3 - 181*x^2 + 34*x + 229) // f ^ R0(u) * (f ^ q) ^ R1(u) in a 2-NAF multi-exp fashion. // steps 1,2,3 let f0 = *f; - let mut f0p = f0; - f0p.frobenius_map_in_place(1); - let f1 = Self::exp_by_x(f0); - let mut f1p = f1; - f1p.frobenius_map_in_place(1); - let f2 = Self::exp_by_x(f1); - let mut f2p = f2; - f2p.frobenius_map_in_place(1); - let f3 = Self::exp_by_x(f2); - let mut f3p = f3; - f3p.frobenius_map_in_place(1); - let f4 = Self::exp_by_x(f3); - let mut f4p = f4; - f4p.frobenius_map_in_place(1); - let f5 = Self::exp_by_x(f4); - let mut f5p = f5; - f5p.frobenius_map_in_place(1); - let f6 = Self::exp_by_x(f5); - let mut f6p = f6; - f6p.frobenius_map_in_place(1); - let f7 = Self::exp_by_x(f6); - let mut f7p = f7; - f7p.frobenius_map_in_place(1); - - // step 4 - let f8p = Self::exp_by_x(f7p); - let f9p = Self::exp_by_x(f8p); - - // step 5 - let mut f5p_p3 = f5p; - f5p_p3.cyclotomic_inverse_in_place(); - let result1 = f3p * &f6p * &f5p_p3; - - // step 6 - let result2 = result1.square(); - let f4_2p = f4 * &f2p; - let mut tmp1_p3 = f0 * &f1 * &f3 * &f4_2p * &f8p; - tmp1_p3.cyclotomic_inverse_in_place(); - let result3 = result2 * &f5 * &f0p * &tmp1_p3; - - // step 7 - let result4 = result3.square(); - let mut f7_p3 = f7; - f7_p3.cyclotomic_inverse_in_place(); - let result5 = result4 * &f9p * &f7_p3; - - // step 8 - let result6 = result5.square(); - let f2_4p = f2 * &f4p; - let f4_2p_5p = f4_2p * &f5p; - let mut tmp2_p3 = f2_4p * &f3 * &f3p; - tmp2_p3.cyclotomic_inverse_in_place(); - let result7 = result6 * &f4_2p_5p * &f6 * &f7p * &tmp2_p3; - - // step 9 - let result8 = result7.square(); - let mut tmp3_p3 = f0p * &f9p; - tmp3_p3.cyclotomic_inverse_in_place(); - let result9 = result8 * &f0 * &f7 * &f1p * &tmp3_p3; - - // step 10 - let result10 = result9.square(); - let f6p_8p = f6p * &f8p; - let f5_7p = f5 * &f7p; - let mut tmp4_p3 = f6p_8p; - tmp4_p3.cyclotomic_inverse_in_place(); - let result11 = result10 * &f5_7p * &f2p * &tmp4_p3; - - // step 11 - let result12 = result11.square(); - let f3_6 = f3 * &f6; - let f1_7 = f1 * &f7; - let mut tmp5_p3 = f1_7 * &f2; - tmp5_p3.cyclotomic_inverse_in_place(); - let result13 = result12 * &f3_6 * &f9p * &tmp5_p3; - - // step 12 - let result14 = result13.square(); - let mut tmp6_p3 = f4_2p * &f5_7p * &f6p_8p; - tmp6_p3.cyclotomic_inverse_in_place(); - let result15 = result14 * &f0 * &f0p * &f3p * &f5p * &tmp6_p3; - - // step 13 - let result16 = result15.square(); - let mut tmp7_p3 = f3_6; - tmp7_p3.cyclotomic_inverse_in_place(); - let result17 = result16 * &f1p * &tmp7_p3; - - // step 14 - let result18 = result17.square(); - let mut tmp8_p3 = f2_4p * &f4_2p_5p * &f9p; - tmp8_p3.cyclotomic_inverse_in_place(); - let result19 = result18 * &f1_7 * &f5_7p * &f0p * &tmp8_p3; - - result19 - } + let mut f0p = f0; + f0p.frobenius_map_in_place(1); + let f1 = Self::exp_by_x(f0); + let mut f1p = f1; + f1p.frobenius_map_in_place(1); + let f2 = Self::exp_by_x(f1); + let mut f2p = f2; + f2p.frobenius_map_in_place(1); + let f3 = Self::exp_by_x(f2); + let mut f3p = f3; + f3p.frobenius_map_in_place(1); + let f4 = Self::exp_by_x(f3); + let mut f4p = f4; + f4p.frobenius_map_in_place(1); + let f5 = Self::exp_by_x(f4); + let mut f5p = f5; + f5p.frobenius_map_in_place(1); + let f6 = Self::exp_by_x(f5); + let mut f6p = f6; + f6p.frobenius_map_in_place(1); + let f7 = Self::exp_by_x(f6); + let mut f7p = f7; + f7p.frobenius_map_in_place(1); + + // step 4 + let f8p = Self::exp_by_x(f7p); + let f9p = Self::exp_by_x(f8p); + + // step 5 + let mut f5p_p3 = f5p; + f5p_p3.cyclotomic_inverse_in_place(); + let result1 = f3p * &f6p * &f5p_p3; + + // step 6 + let result2 = result1.square(); + let f4_2p = f4 * &f2p; + let mut tmp1_p3 = f0 * &f1 * &f3 * &f4_2p * &f8p; + tmp1_p3.cyclotomic_inverse_in_place(); + let result3 = result2 * &f5 * &f0p * &tmp1_p3; + + // step 7 + let result4 = result3.square(); + let mut f7_p3 = f7; + f7_p3.cyclotomic_inverse_in_place(); + let result5 = result4 * &f9p * &f7_p3; + + // step 8 + let result6 = result5.square(); + let f2_4p = f2 * &f4p; + let f4_2p_5p = f4_2p * &f5p; + let mut tmp2_p3 = f2_4p * &f3 * &f3p; + tmp2_p3.cyclotomic_inverse_in_place(); + let result7 = result6 * &f4_2p_5p * &f6 * &f7p * &tmp2_p3; + + // step 9 + let result8 = result7.square(); + let mut tmp3_p3 = f0p * &f9p; + tmp3_p3.cyclotomic_inverse_in_place(); + let result9 = result8 * &f0 * &f7 * &f1p * &tmp3_p3; + + // step 10 + let result10 = result9.square(); + let f6p_8p = f6p * &f8p; + let f5_7p = f5 * &f7p; + let mut tmp4_p3 = f6p_8p; + tmp4_p3.cyclotomic_inverse_in_place(); + let result11 = result10 * &f5_7p * &f2p * &tmp4_p3; + + // step 11 + let result12 = result11.square(); + let f3_6 = f3 * &f6; + let f1_7 = f1 * &f7; + let mut tmp5_p3 = f1_7 * &f2; + tmp5_p3.cyclotomic_inverse_in_place(); + let result13 = result12 * &f3_6 * &f9p * &tmp5_p3; + + // step 12 + let result14 = result13.square(); + let mut tmp6_p3 = f4_2p * &f5_7p * &f6p_8p; + tmp6_p3.cyclotomic_inverse_in_place(); + let result15 = result14 * &f0 * &f0p * &f3p * &f5p * &tmp6_p3; + + // step 13 + let result16 = result15.square(); + let mut tmp7_p3 = f3_6; + tmp7_p3.cyclotomic_inverse_in_place(); + let result17 = result16 * &f1p * &tmp7_p3; + + // step 14 + let result18 = result17.square(); + let mut tmp8_p3 = f2_4p * &f4_2p_5p * &f9p; + tmp8_p3.cyclotomic_inverse_in_place(); + let result19 = result18 * &f1_7 * &f5_7p * &f0p * &tmp8_p3; + + result19 + } } impl Pairing for BW6

{ - type BaseField = ::BaseField; - type ScalarField = ::ScalarField; - type G1 = G1Projective

; - type G1Affine = G1Affine

; - type G1Prepared = G1Prepared

; - type G2 = G2Projective

; - type G2Affine = G2Affine

; - type G2Prepared = G2Prepared

; - type TargetField = Fp6; - - fn final_exponentiation(f: MillerLoopOutput) -> Option> { - P::final_exponentiation(f) - } - - fn multi_miller_loop( - a: impl IntoIterator>, - b: impl IntoIterator>, - ) -> MillerLoopOutput { - P::multi_miller_loop(a, b) - } + type BaseField = ::BaseField; + type ScalarField = ::ScalarField; + type G1 = G1Projective

; + type G1Affine = G1Affine

; + type G1Prepared = G1Prepared

; + type G2 = G2Projective

; + type G2Affine = G2Affine

; + type G2Prepared = G2Prepared

; + type TargetField = Fp6; + + fn final_exponentiation(f: MillerLoopOutput) -> Option> { + P::final_exponentiation(f) + } + + fn multi_miller_loop( + a: impl IntoIterator>, + b: impl IntoIterator>, + ) -> MillerLoopOutput { + P::multi_miller_loop(a, b) + } } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 0b0fc16896011..c6e7b66ce2041 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -124,13 +124,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -144,13 +138,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bls12::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index c83b9bb71d393..a275f73de70b9 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,14 +19,14 @@ #![warn(missing_docs)] -use ark_bw6_761::{Config, G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; +use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - Group, + short_weierstrass::SWCurveConfig, }; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; +use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute multi pairing through arkworksrk_BW6_761::G2Projective @@ -123,13 +123,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -143,13 +137,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_projective(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -163,13 +151,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G1Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); @@ -183,13 +165,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let mut res = ark_ec::bw6::G2Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } + let res = ::mul_affine(&base, &scalar); let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); From 873e5c9ac8109457bfe7daaa507fc21b0cb64959 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 11:13:55 +0100 Subject: [PATCH 064/364] bw6_761 fix tests --- .../arkworks-curves/bw6_761/src/curves/g1.rs | 65 +++++++ .../arkworks-curves/bw6_761/src/curves/g2.rs | 65 +++++++ primitives/arkworks-models/src/bw6/mod.rs | 168 +----------------- primitives/arkworks/src/bls12_377.rs | 34 ---- primitives/arkworks/src/bls12_381.rs | 39 +--- primitives/arkworks/src/bw6_761.rs | 38 +--- primitives/io/src/lib.rs | 23 +-- 7 files changed, 142 insertions(+), 290 deletions(-) diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs index 042ff3eda090a..69c9aa8f1427a 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs @@ -3,6 +3,8 @@ use ark_models::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::{Affine, Projective}, }; +use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{Fq, Fr}; @@ -47,6 +49,69 @@ impl SWCurveConfig for Config { use ark_ff::Zero; Self::BaseField::zero() } + + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bw6_761_msm_g1(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::bw6_761_mul_projective_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let serialized_result = + sp_io::crypto::bw6_761_mul_affine_g1(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&serialized_result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } /// G1_GENERATOR_X = diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs index 9a00021cd9ca8..0f82f2b830b58 100644 --- a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs +++ b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs @@ -3,6 +3,8 @@ use ark_models::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::{Affine, Projective}, }; +use ark_serialize::{CanonicalSerialize, Compress, Validate}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{Fq, Fr}; @@ -48,6 +50,69 @@ impl SWCurveConfig for Config { use ark_ff::Zero; Self::BaseField::zero() } + + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::bw6_761_msm_g2(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } + + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let result = sp_io::crypto::bw6_761_mul_projective_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } + + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_base[..]); + base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_scalar[..]); + scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + + let serialized_result = + sp_io::crypto::bw6_761_mul_affine_g2(serialized_base, serialized_scalar); + + let cursor = Cursor::new(&serialized_result[..]); + + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + result.into() + } } /// G2_GENERATOR_X = diff --git a/primitives/arkworks-models/src/bw6/mod.rs b/primitives/arkworks-models/src/bw6/mod.rs index 6f66bc2dfe869..c15233b0eebfa 100644 --- a/primitives/arkworks-models/src/bw6/mod.rs +++ b/primitives/arkworks-models/src/bw6/mod.rs @@ -2,13 +2,10 @@ use crate::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, pairing::{MillerLoopOutput, Pairing, PairingOutput}, }; -use ark_ff::{ - fields::{ - fp3::Fp3Config, - fp6_2over3::{Fp6, Fp6Config}, - Field, PrimeField, - }, - BitIteratorBE, CyclotomicMultSubgroup, +use ark_ff::fields::{ + fp3::Fp3Config, + fp6_2over3::{Fp6, Fp6Config}, + PrimeField, }; use derivative::Derivative; @@ -59,163 +56,6 @@ pub use self::{ #[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] pub struct BW6(PhantomData P>); -impl BW6

{ - // Evaluate the line function at point p. - fn ell(f: &mut Fp6, coeffs: &(P::Fp, P::Fp, P::Fp), p: &G1Affine

) { - let mut c0 = coeffs.0; - let mut c1 = coeffs.1; - let mut c2 = coeffs.2; - - match P::TWIST_TYPE { - TwistType::M => { - c2 *= &p.y; - c1 *= &p.x; - f.mul_by_014(&c0, &c1, &c2); - }, - TwistType::D => { - c0 *= &p.y; - c1 *= &p.x; - f.mul_by_034(&c0, &c1, &c2); - }, - } - } - - fn exp_by_x(mut f: Fp6) -> Fp6 { - f = f.cyclotomic_exp(&P::X); - if P::X_IS_NEGATIVE { - f.cyclotomic_inverse_in_place(); - } - f - } - - fn final_exponentiation_first_chunk( - elt: &Fp6, - elt_inv: &Fp6, - ) -> Fp6 { - // (q^3-1)*(q+1) - - // elt_q3 = elt^(q^3) - let mut elt_q3 = *elt; - elt_q3.cyclotomic_inverse_in_place(); - // elt_q3_over_elt = elt^(q^3-1) - let elt_q3_over_elt = elt_q3 * elt_inv; - // alpha = elt^((q^3-1) * q) - let mut alpha = elt_q3_over_elt; - alpha.frobenius_map_in_place(1); - // beta = elt^((q^3-1)*(q+1) - alpha * &elt_q3_over_elt - } - - #[allow(clippy::let_and_return)] - fn final_exponentiation_last_chunk(f: &Fp6) -> Fp6 { - // hard_part - // From https://eprint.iacr.org/2020/351.pdf, Alg.6 - - #[rustfmt::skip] - // R0(x) := (-103*x^7 + 70*x^6 + 269*x^5 - 197*x^4 - 314*x^3 - 73*x^2 - 263*x - 220) - // R1(x) := (103*x^9 - 276*x^8 + 77*x^7 + 492*x^6 - 445*x^5 - 65*x^4 + 452*x^3 - 181*x^2 + 34*x + 229) - // f ^ R0(u) * (f ^ q) ^ R1(u) in a 2-NAF multi-exp fashion. - - // steps 1,2,3 - let f0 = *f; - let mut f0p = f0; - f0p.frobenius_map_in_place(1); - let f1 = Self::exp_by_x(f0); - let mut f1p = f1; - f1p.frobenius_map_in_place(1); - let f2 = Self::exp_by_x(f1); - let mut f2p = f2; - f2p.frobenius_map_in_place(1); - let f3 = Self::exp_by_x(f2); - let mut f3p = f3; - f3p.frobenius_map_in_place(1); - let f4 = Self::exp_by_x(f3); - let mut f4p = f4; - f4p.frobenius_map_in_place(1); - let f5 = Self::exp_by_x(f4); - let mut f5p = f5; - f5p.frobenius_map_in_place(1); - let f6 = Self::exp_by_x(f5); - let mut f6p = f6; - f6p.frobenius_map_in_place(1); - let f7 = Self::exp_by_x(f6); - let mut f7p = f7; - f7p.frobenius_map_in_place(1); - - // step 4 - let f8p = Self::exp_by_x(f7p); - let f9p = Self::exp_by_x(f8p); - - // step 5 - let mut f5p_p3 = f5p; - f5p_p3.cyclotomic_inverse_in_place(); - let result1 = f3p * &f6p * &f5p_p3; - - // step 6 - let result2 = result1.square(); - let f4_2p = f4 * &f2p; - let mut tmp1_p3 = f0 * &f1 * &f3 * &f4_2p * &f8p; - tmp1_p3.cyclotomic_inverse_in_place(); - let result3 = result2 * &f5 * &f0p * &tmp1_p3; - - // step 7 - let result4 = result3.square(); - let mut f7_p3 = f7; - f7_p3.cyclotomic_inverse_in_place(); - let result5 = result4 * &f9p * &f7_p3; - - // step 8 - let result6 = result5.square(); - let f2_4p = f2 * &f4p; - let f4_2p_5p = f4_2p * &f5p; - let mut tmp2_p3 = f2_4p * &f3 * &f3p; - tmp2_p3.cyclotomic_inverse_in_place(); - let result7 = result6 * &f4_2p_5p * &f6 * &f7p * &tmp2_p3; - - // step 9 - let result8 = result7.square(); - let mut tmp3_p3 = f0p * &f9p; - tmp3_p3.cyclotomic_inverse_in_place(); - let result9 = result8 * &f0 * &f7 * &f1p * &tmp3_p3; - - // step 10 - let result10 = result9.square(); - let f6p_8p = f6p * &f8p; - let f5_7p = f5 * &f7p; - let mut tmp4_p3 = f6p_8p; - tmp4_p3.cyclotomic_inverse_in_place(); - let result11 = result10 * &f5_7p * &f2p * &tmp4_p3; - - // step 11 - let result12 = result11.square(); - let f3_6 = f3 * &f6; - let f1_7 = f1 * &f7; - let mut tmp5_p3 = f1_7 * &f2; - tmp5_p3.cyclotomic_inverse_in_place(); - let result13 = result12 * &f3_6 * &f9p * &tmp5_p3; - - // step 12 - let result14 = result13.square(); - let mut tmp6_p3 = f4_2p * &f5_7p * &f6p_8p; - tmp6_p3.cyclotomic_inverse_in_place(); - let result15 = result14 * &f0 * &f0p * &f3p * &f5p * &tmp6_p3; - - // step 13 - let result16 = result15.square(); - let mut tmp7_p3 = f3_6; - tmp7_p3.cyclotomic_inverse_in_place(); - let result17 = result16 * &f1p * &tmp7_p3; - - // step 14 - let result18 = result17.square(); - let mut tmp8_p3 = f2_4p * &f4_2p_5p * &f9p; - tmp8_p3.cyclotomic_inverse_in_place(); - let result19 = result18 * &f1_7 * &f5_7p * &f0p * &tmp8_p3; - - result19 - } -} - impl Pairing for BW6

{ type BaseField = ::BaseField; type ScalarField = ::ScalarField; diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 7454bbb166a90..f35b28e4d1f13 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -29,40 +29,6 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; -/// Compute multi pairing through arkworksrk_Bls12_377::G2Projective -pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { - let g1: Vec<_> = vec_a - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let g2: Vec<_> = vec_b - .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let res = Bls12_377::multi_pairing(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index c6e7b66ce2041..684d8a8ec3c3a 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,51 +19,16 @@ #![warn(missing_docs)] -use ark_bls12_381::{Bls12_381, Config, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, - Group, }; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, Zero}; +use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; -/// Compute multi pairing through arkworksrk_bls12_381::G2Projective -pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { - let g1: Vec<_> = vec_a - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let g2: Vec<_> = vec_b - .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let res = Bls12_381::multi_pairing(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index a275f73de70b9..593c8c9fc521b 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -29,40 +29,6 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; -/// Compute multi pairing through arkworksrk_BW6_761::G2Projective -pub fn multi_pairing(vec_a: Vec>, vec_b: Vec>) -> Vec { - let g1: Vec<_> = vec_a - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let g2: Vec<_> = vec_b - .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap() - }) - .collect(); - let res = BW6_761::multi_pairing(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() -} - /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec @@ -173,7 +139,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g1(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { @@ -207,7 +173,7 @@ pub fn msm_bigint_g1(bases: Vec>, scalars: Vec>) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_bigint_g2(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 43f3e41780455..bf028f716df8f 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1121,11 +1121,6 @@ pub trait Crypto { Ok(pubkey.serialize()) } - /// Compute a multi pairing - fn bls12_381_multi_pairing(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::bls12_381::multi_pairing(a, b) - } - /// Compute a multi Miller loop fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_381::multi_miller_loop(a, b) @@ -1166,11 +1161,6 @@ pub trait Crypto { sp_arkworks::bls12_381::msm_g2(bases, scalars) } - /// Compute a multi pairing - fn bls12_377_multi_pairing(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::bls12_377::multi_pairing(a, b) - } - /// Compute a multi Miller loop fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_377::multi_miller_loop(a, b) @@ -1211,11 +1201,6 @@ pub trait Crypto { sp_arkworks::bls12_377::msm_g2(bases, scalars) } - /// Compute a multi pairing - fn bw6_761_multi_pairing(a: Vec>, b: Vec>) -> Vec { - sp_arkworks::bw6_761::multi_pairing(a, b) - } - /// Compute a multi Miller loop fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bw6_761::multi_miller_loop(a, b) @@ -1247,13 +1232,13 @@ pub trait Crypto { } /// Compute a bigint_msm on G1 - fn bw6_761_bigint_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bw6_761::msm_bigint_g1(bases, bigints) + fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_g1(bases, bigints) } /// Compute a bigint_msm on G2 - fn bw6_761_bigint_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_arkworks::bw6_761::msm_bigint_g2(bases, bigints) + fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_arkworks::bw6_761::msm_g2(bases, bigints) } /// Compute affine multiplication on ed_on_bls12_381 From ce23fe085d6c86b4b3cd371a588cc31e2b21d2f6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 11:50:38 +0100 Subject: [PATCH 065/364] provide custom msm for TwistedEdwards --- .../arkworks-curves/bls12_377/Cargo.toml | 5 +- .../arkworks-curves/bls12_381/Cargo.toml | 7 +- primitives/arkworks-curves/bw6_761/Cargo.toml | 7 +- primitives/arkworks-curves/bw6_761/src/lib.rs | 8 +- .../curve-constraint-tests/src/lib.rs | 4 +- .../ed_on_bls12_377/Cargo.toml | 7 +- .../ed_on_bls12_377/src/curves/mod.rs | 30 +- .../ed_on_bls12_381/Cargo.toml | 7 +- .../ed_on_bls12_381/src/curves/mod.rs | 33 ++ .../ed_on_bls12_381/src/lib.rs | 5 +- primitives/arkworks-models/src/lib.rs | 4 +- .../src/twisted_edwards/affine.rs | 351 +++++++++++++ .../src/twisted_edwards/group.rs | 496 ++++++++++++++++++ .../src/twisted_edwards/mod.rs | 175 ++++++ .../twisted_edwards/serialization_flags.rs | 57 ++ primitives/arkworks/Cargo.toml | 2 - 16 files changed, 1157 insertions(+), 41 deletions(-) create mode 100644 primitives/arkworks-models/src/twisted_edwards/affine.rs create mode 100644 primitives/arkworks-models/src/twisted_edwards/group.rs create mode 100644 primitives/arkworks-models/src/twisted_edwards/mod.rs create mode 100644 primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 104cf7514e222..0d8a1d48299ba 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -2,10 +2,7 @@ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] -description = "The BLS12-377 pairing-friendly elliptic curve" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-bls12-377/" +description = "The BLS12-377 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 95a36b7f02ab5..adf251ba26435 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -1,11 +1,8 @@ [package] name = "ark-sub-bls12-381" version = "0.4.0" -authors = [ "arkworks contributors" ] -description = "The BLS12-381 pairing-friendly elliptic curve" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-bls12-381/" +authors = [ "achimcc, arkworks contributors" ] +description = "The BLS12-381 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 2072391a92d21..873fe783b889f 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -1,11 +1,8 @@ [package] name = "ark-sub-bw6-761" version = "0.4.0-alpha.1" -authors = [ "arkworks contributors" ] -description = "The BW6-761 pairing-friendly elliptic curve" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-bw6-761/" +authors = [ "achimcc, arkworks contributors" ] +description = "The BW6-761 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] diff --git a/primitives/arkworks-curves/bw6_761/src/lib.rs b/primitives/arkworks-curves/bw6_761/src/lib.rs index 2199443932874..13e7f36990b8a 100755 --- a/primitives/arkworks-curves/bw6_761/src/lib.rs +++ b/primitives/arkworks-curves/bw6_761/src/lib.rs @@ -1,11 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - // warnings, - // unused, - future_incompatible, - nonstandard_style, - rust_2018_idioms -)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements the BW6_761 curve generated in [\[EG20\]](https://eprint.iacr.org/2020/351). diff --git a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs index 336f933c4da29..56d2169c528ec 100644 --- a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs +++ b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs @@ -184,10 +184,10 @@ pub mod fields { let cs = ConstraintSystem::::new_ref(); let mut rng = test_rng(); for i in 0..=maxpower { - let mut a = F::rand(&mut rng); + let a = F::rand(&mut rng); let mut a_gadget = AF::new_variable(ark_relations::ns!(cs, "a"), || Ok(a), mode)?; a_gadget.frobenius_map_in_place(i)?; - a.frobenius_map(i); + let _ = a.frobenius_map(i); assert_eq!(a_gadget.value()?, a); } diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 51b5ce6599492..2c89031fbc224 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -1,11 +1,8 @@ [package] name = "ark-sub-ed-on-bls12-377" version = "0.4.0-alpha.1" -authors = [ "arkworks contributors" ] -description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-ed-on-bls12-377/" +authors = [ "achimcc, arkworks contributors" ] +description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs index 7c9fd69f31cb4..3e13bbccabaeb 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs @@ -4,7 +4,7 @@ use ark_models::{ twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, }; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec}; +use ark_std::{io::Cursor, vec, vec::Vec}; use crate::{fq::Fq, fr::Fr}; @@ -49,6 +49,34 @@ impl TECurveConfig for EdwardsConfig { -elem } + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::ed_on_bls12_377_msm(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + Ok(result.into()) + } + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index bae0e5f8221a1..334ec7e146789 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -1,11 +1,8 @@ [package] name = "ark-sub-ed-on-bls12-381" version = "0.4.0-alpha.1" -authors = [ "arkworks contributors" ] -description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-ed-on-bls12-381/" +authors = [ "achimcc, arkworks contributors" ] +description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index 3367384722d5a..1b1e4fb532ffa 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -87,6 +87,39 @@ impl TECurveConfig for JubjubConfig { -elem } + fn msm( + bases: &[Affine], + scalars: &[::ScalarField], + ) -> Result, usize> { + let bases: Vec> = bases + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let scalars: Vec> = scalars + .into_iter() + .map(|elem| { + let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized + }) + .collect(); + let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); + let cursor = Cursor::new(&result[..]); + let result = ::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap(); + Ok(result.into()) + } + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_base[..]); diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs index 1d1f884da5a13..388870f72f08d 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs @@ -1,8 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -#![deny( - // warnings, - // unused, - future_incompatible, nonstandard_style, rust_2018_idioms)] +#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] #![forbid(unsafe_code)] //! This library implements a twisted Edwards curve whose base field is the diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index a293f77a42a88..0b79439c85fee 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,5 +1,7 @@ pub mod bls12; pub mod bw6; +pub mod twisted_edwards; pub use ark_ec::{ - models, models::short_weierstrass, pairing, twisted_edwards, AffineRepr, CurveGroup, Group, + models, models::short_weierstrass, pairing, scalar_mul, AffineRepr, CurveConfig, CurveGroup, + Group, }; diff --git a/primitives/arkworks-models/src/twisted_edwards/affine.rs b/primitives/arkworks-models/src/twisted_edwards/affine.rs new file mode 100644 index 0000000000000..52f249331bba5 --- /dev/null +++ b/primitives/arkworks-models/src/twisted_edwards/affine.rs @@ -0,0 +1,351 @@ +use ark_serialize::{ + CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Valid, Validate, +}; +use ark_std::{ + borrow::Borrow, + fmt::{Debug, Display, Formatter, Result as FmtResult}, + io::{Read, Write}, + ops::{Add, Mul, Neg, Sub}, + rand::{ + distributions::{Distribution, Standard}, + Rng, + }, + vec::Vec, +}; +use derivative::Derivative; +use num_traits::{One, Zero}; +use zeroize::Zeroize; + +use ark_ff::{fields::Field, PrimeField, ToConstraintField, UniformRand}; + +use super::{Projective, TECurveConfig, TEFlags}; +use crate::AffineRepr; + +/// Affine coordinates for a point on a twisted Edwards curve, over the +/// base field `P::BaseField`. +#[derive(Derivative)] +#[derivative( + Copy(bound = "P: TECurveConfig"), + Clone(bound = "P: TECurveConfig"), + PartialEq(bound = "P: TECurveConfig"), + Eq(bound = "P: TECurveConfig"), + Hash(bound = "P: TECurveConfig") +)] +#[must_use] +pub struct Affine { + /// X coordinate of the point represented as a field element + pub x: P::BaseField, + /// Y coordinate of the point represented as a field element + pub y: P::BaseField, +} + +impl Display for Affine

{ + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + match self.is_zero() { + true => write!(f, "infinity"), + false => write!(f, "({}, {})", self.x, self.y), + } + } +} + +impl Debug for Affine

{ + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + match self.is_zero() { + true => write!(f, "infinity"), + false => write!(f, "({}, {})", self.x, self.y), + } + } +} + +impl PartialEq> for Affine

{ + fn eq(&self, other: &Projective

) -> bool { + self.into_group() == *other + } +} + +impl Affine

{ + /// Construct a new group element without checking whether the coordinates + /// specify a point in the subgroup. + pub const fn new_unchecked(x: P::BaseField, y: P::BaseField) -> Self { + Self { x, y } + } + + /// Construct a new group element in a way while enforcing that points are in + /// the prime-order subgroup. + pub fn new(x: P::BaseField, y: P::BaseField) -> Self { + let p = Self::new_unchecked(x, y); + assert!(p.is_on_curve()); + assert!(p.is_in_correct_subgroup_assuming_on_curve()); + p + } + + /// Construct the identity of the group + pub const fn zero() -> Self { + Self::new_unchecked(P::BaseField::ZERO, P::BaseField::ONE) + } + + /// Is this point the identity? + pub fn is_zero(&self) -> bool { + self.x.is_zero() && self.y.is_one() + } + + /// Attempts to construct an affine point given an y-coordinate. The + /// point is not guaranteed to be in the prime order subgroup. + /// + /// If and only if `greatest` is set will the lexicographically + /// largest x-coordinate be selected. + /// + /// a * X^2 + Y^2 = 1 + d * X^2 * Y^2 + /// a * X^2 - d * X^2 * Y^2 = 1 - Y^2 + /// X^2 * (a - d * Y^2) = 1 - Y^2 + /// X^2 = (1 - Y^2) / (a - d * Y^2) + #[allow(dead_code)] + pub fn get_point_from_y_unchecked(y: P::BaseField, greatest: bool) -> Option { + Self::get_xs_from_y_unchecked(y).map(|(x, neg_x)| { + if greatest { + Self::new_unchecked(neg_x, y) + } else { + Self::new_unchecked(x, y) + } + }) + } + + /// Attempts to recover the x-coordinate given an y-coordinate. The + /// resulting point is not guaranteed to be in the prime order subgroup. + /// + /// If and only if `greatest` is set will the lexicographically + /// largest x-coordinate be selected. + /// + /// a * X^2 + Y^2 = 1 + d * X^2 * Y^2 + /// a * X^2 - d * X^2 * Y^2 = 1 - Y^2 + /// X^2 * (a - d * Y^2) = 1 - Y^2 + /// X^2 = (1 - Y^2) / (a - d * Y^2) + #[allow(dead_code)] + pub fn get_xs_from_y_unchecked(y: P::BaseField) -> Option<(P::BaseField, P::BaseField)> { + let y2 = y.square(); + + let numerator = P::BaseField::one() - y2; + let denominator = P::COEFF_A - (y2 * P::COEFF_D); + + denominator + .inverse() + .map(|denom| denom * &numerator) + .and_then(|x2| x2.sqrt()) + .map(|x| { + let neg_x = -x; + if x <= neg_x { + (x, neg_x) + } else { + (neg_x, x) + } + }) + } + + /// Checks that the current point is on the elliptic curve. + pub fn is_on_curve(&self) -> bool { + let x2 = self.x.square(); + let y2 = self.y.square(); + + let lhs = y2 + P::mul_by_a(x2); + let rhs = P::BaseField::one() + &(P::COEFF_D * &(x2 * &y2)); + + lhs == rhs + } +} + +impl Affine

{ + /// Checks if `self` is in the subgroup having order equaling that of + /// `P::ScalarField` given it is on the curve. + pub fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool { + P::is_in_correct_subgroup_assuming_on_curve(self) + } +} + +impl AffineRepr for Affine

{ + type Config = P; + type BaseField = P::BaseField; + type ScalarField = P::ScalarField; + type Group = Projective

; + + fn xy(&self) -> Option<(&Self::BaseField, &Self::BaseField)> { + (!self.is_zero()).then(|| (&self.x, &self.y)) + } + + fn generator() -> Self { + P::GENERATOR + } + + fn zero() -> Self { + Self::new_unchecked(P::BaseField::ZERO, P::BaseField::ONE) + } + + fn from_random_bytes(bytes: &[u8]) -> Option { + P::BaseField::from_random_bytes_with_flags::(bytes) + .and_then(|(y, flags)| Self::get_point_from_y_unchecked(y, flags.is_negative())) + } + + fn mul_bigint(&self, by: impl AsRef<[u64]>) -> Self::Group { + P::mul_affine(self, by.as_ref()) + } + + /// Multiplies this element by the cofactor and output the + /// resulting projective element. + #[must_use] + fn mul_by_cofactor_to_group(&self) -> Self::Group { + P::mul_affine(self, Self::Config::COFACTOR) + } + + /// Performs cofactor clearing. + /// The default method is simply to multiply by the cofactor. + /// Some curves can implement a more efficient algorithm. + fn clear_cofactor(&self) -> Self { + P::clear_cofactor(self) + } +} + +impl Zeroize for Affine

{ + // The phantom data does not contain element-specific data + // and thus does not need to be zeroized. + fn zeroize(&mut self) { + self.x.zeroize(); + self.y.zeroize(); + } +} + +impl Neg for Affine

{ + type Output = Self; + + fn neg(self) -> Self { + Self::new_unchecked(-self.x, self.y) + } +} + +impl> Add for Affine

{ + type Output = Projective

; + fn add(self, other: T) -> Self::Output { + let mut copy = self.into_group(); + copy += other.borrow(); + copy + } +} + +impl Add> for Affine

{ + type Output = Projective

; + fn add(self, other: Projective

) -> Projective

{ + other + self + } +} + +impl<'a, P: TECurveConfig> Add<&'a Projective

> for Affine

{ + type Output = Projective

; + fn add(self, other: &'a Projective

) -> Projective

{ + *other + self + } +} + +impl> Sub for Affine

{ + type Output = Projective

; + fn sub(self, other: T) -> Self::Output { + let mut copy = self.into_group(); + copy -= other.borrow(); + copy + } +} + +impl Default for Affine

{ + #[inline] + fn default() -> Self { + Self::zero() + } +} + +impl Distribution> for Standard { + /// Generates a uniformly random instance of the curve. + #[inline] + fn sample(&self, rng: &mut R) -> Affine

{ + loop { + let y = P::BaseField::rand(rng); + let greatest = rng.gen(); + + if let Some(p) = Affine::get_point_from_y_unchecked(y, greatest) { + return p.mul_by_cofactor() + } + } + } +} + +impl> Mul for Affine

{ + type Output = Projective

; + + #[inline] + fn mul(self, other: T) -> Self::Output { + self.mul_bigint(other.borrow().into_bigint()) + } +} + +// The projective point X, Y, T, Z is represented in the affine +// coordinates as X/Z, Y/Z. +impl From> for Affine

{ + fn from(p: Projective

) -> Affine

{ + if p.is_zero() { + Affine::zero() + } else if p.z.is_one() { + // If Z is one, the point is already normalized. + Affine::new_unchecked(p.x, p.y) + } else { + // Z is nonzero, so it must have an inverse in a field. + let z_inv = p.z.inverse().unwrap(); + let x = p.x * &z_inv; + let y = p.y * &z_inv; + Affine::new_unchecked(x, y) + } + } +} +impl CanonicalSerialize for Affine

{ + #[inline] + fn serialize_with_mode( + &self, + writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + P::serialize_with_mode(self, writer, compress) + } + + #[inline] + fn serialized_size(&self, compress: Compress) -> usize { + P::serialized_size(compress) + } +} + +impl Valid for Affine

{ + fn check(&self) -> Result<(), SerializationError> { + if self.is_on_curve() && self.is_in_correct_subgroup_assuming_on_curve() { + Ok(()) + } else { + Err(SerializationError::InvalidData) + } + } +} + +impl CanonicalDeserialize for Affine

{ + fn deserialize_with_mode( + reader: R, + compress: Compress, + validate: Validate, + ) -> Result { + P::deserialize_with_mode(reader, compress, validate) + } +} + +impl ToConstraintField for Affine +where + M::BaseField: ToConstraintField, +{ + #[inline] + fn to_field_elements(&self) -> Option> { + let mut x_fe = self.x.to_field_elements()?; + let y_fe = self.y.to_field_elements()?; + x_fe.extend_from_slice(&y_fe); + Some(x_fe) + } +} diff --git a/primitives/arkworks-models/src/twisted_edwards/group.rs b/primitives/arkworks-models/src/twisted_edwards/group.rs new file mode 100644 index 0000000000000..ca346c8fa413b --- /dev/null +++ b/primitives/arkworks-models/src/twisted_edwards/group.rs @@ -0,0 +1,496 @@ +use ark_serialize::{ + CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Valid, Validate, +}; +use ark_std::{ + borrow::Borrow, + fmt::{Display, Formatter, Result as FmtResult}, + hash::{Hash, Hasher}, + io::{Read, Write}, + ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}, + rand::{ + distributions::{Distribution, Standard}, + Rng, + }, + vec::Vec, + One, Zero, +}; +use derivative::Derivative; + +use ark_ff::{fields::Field, PrimeField, ToConstraintField, UniformRand}; + +use zeroize::Zeroize; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +use super::{Affine, MontCurveConfig, TECurveConfig}; +use crate::{ + scalar_mul::{variable_base::VariableBaseMSM, ScalarMul}, + AffineRepr, CurveGroup, Group, +}; + +/// `Projective` implements Extended Twisted Edwards Coordinates +/// as described in [\[HKCD08\]](https://eprint.iacr.org/2008/522.pdf). +/// +/// This implementation uses the unified addition formulae from that paper (see +/// Section 3.1). +#[derive(Derivative)] +#[derivative( + Copy(bound = "P: TECurveConfig"), + Clone(bound = "P: TECurveConfig"), + Eq(bound = "P: TECurveConfig"), + Debug(bound = "P: TECurveConfig") +)] +#[must_use] +pub struct Projective { + pub x: P::BaseField, + pub y: P::BaseField, + pub t: P::BaseField, + pub z: P::BaseField, +} + +impl PartialEq> for Projective

{ + fn eq(&self, other: &Affine

) -> bool { + *self == other.into_group() + } +} + +impl Display for Projective

{ + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + write!(f, "{}", Affine::from(*self)) + } +} + +impl PartialEq for Projective

{ + fn eq(&self, other: &Self) -> bool { + if self.is_zero() { + return other.is_zero() + } + + if other.is_zero() { + return false + } + + // x1/z1 == x2/z2 <==> x1 * z2 == x2 * z1 + (self.x * &other.z) == (other.x * &self.z) && (self.y * &other.z) == (other.y * &self.z) + } +} + +impl Hash for Projective

{ + fn hash(&self, state: &mut H) { + self.into_affine().hash(state) + } +} + +impl Distribution> for Standard { + /// Generates a uniformly random instance of the curve. + #[inline] + fn sample(&self, rng: &mut R) -> Projective

{ + loop { + let y = P::BaseField::rand(rng); + let greatest = rng.gen(); + + if let Some(p) = Affine::get_point_from_y_unchecked(y, greatest) { + return p.mul_by_cofactor_to_group() + } + } + } +} + +impl Default for Projective

{ + #[inline] + fn default() -> Self { + Self::zero() + } +} + +impl Projective

{ + /// Construct a new group element without checking whether the coordinates + /// specify a point in the subgroup. + pub const fn new_unchecked( + x: P::BaseField, + y: P::BaseField, + t: P::BaseField, + z: P::BaseField, + ) -> Self { + Self { x, y, t, z } + } + + /// Construct a new group element in a way while enforcing that points are in + /// the prime-order subgroup. + pub fn new(x: P::BaseField, y: P::BaseField, t: P::BaseField, z: P::BaseField) -> Self { + let p = Self::new_unchecked(x, y, t, z).into_affine(); + assert!(p.is_on_curve()); + assert!(p.is_in_correct_subgroup_assuming_on_curve()); + p.into() + } +} +impl Zeroize for Projective

{ + // The phantom data does not contain element-specific data + // and thus does not need to be zeroized. + fn zeroize(&mut self) { + self.x.zeroize(); + self.y.zeroize(); + self.t.zeroize(); + self.z.zeroize(); + } +} + +impl Zero for Projective

{ + fn zero() -> Self { + Self::new_unchecked( + P::BaseField::zero(), + P::BaseField::one(), + P::BaseField::zero(), + P::BaseField::one(), + ) + } + + fn is_zero(&self) -> bool { + self.x.is_zero() && self.y == self.z && !self.y.is_zero() && self.t.is_zero() + } +} + +impl Group for Projective

{ + type ScalarField = P::ScalarField; + + fn generator() -> Self { + Affine::generator().into() + } + + fn double_in_place(&mut self) -> &mut Self { + // See "Twisted Edwards Curves Revisited" + // Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson + // 3.3 Doubling in E^e + // Source: https://www.hyperelliptic.org/EFD/g1p/data/twisted/extended/doubling/dbl-2008-hwcd + + // A = X1^2 + let a = self.x.square(); + // B = Y1^2 + let b = self.y.square(); + // C = 2 * Z1^2 + let c = self.z.square().double(); + // D = a * A + let d = P::mul_by_a(a); + // E = (X1 + Y1)^2 - A - B + let e = (self.x + &self.y).square() - &a - &b; + // G = D + B + let g = d + &b; + // F = G - C + let f = g - &c; + // H = D - B + let h = d - &b; + // X3 = E * F + self.x = e * &f; + // Y3 = G * H + self.y = g * &h; + // T3 = E * H + self.t = e * &h; + // Z3 = F * G + self.z = f * &g; + + self + } + + #[inline] + fn mul_bigint(&self, other: impl AsRef<[u64]>) -> Self { + P::mul_projective(self, other.as_ref()) + } +} + +impl CurveGroup for Projective

{ + type Config = P; + type BaseField = P::BaseField; + type Affine = Affine

; + type FullGroup = Affine

; + + fn normalize_batch(v: &[Self]) -> Vec { + // A projective curve element (x, y, t, z) is normalized + // to its affine representation, by the conversion + // (x, y, t, z) -> (x/z, y/z, t/z, 1) + // Batch normalizing N twisted edwards curve elements costs: + // 1 inversion + 6N field multiplications + // (batch inversion requires 3N multiplications + 1 inversion) + let mut z_s = v.iter().map(|g| g.z).collect::>(); + ark_ff::batch_inversion(&mut z_s); + + // Perform affine transformations + ark_std::cfg_iter!(v) + .zip(z_s) + .map(|(g, z)| match g.is_zero() { + true => Affine::zero(), + false => { + let x = g.x * &z; + let y = g.y * &z; + Affine::new_unchecked(x, y) + }, + }) + .collect() + } +} + +impl Neg for Projective

{ + type Output = Self; + fn neg(mut self) -> Self { + self.x = -self.x; + self.t = -self.t; + self + } +} + +impl>> AddAssign for Projective

{ + fn add_assign(&mut self, other: T) { + let other = other.borrow(); + // See "Twisted Edwards Curves Revisited" + // Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson + // 3.1 Unified Addition in E^e + // Source: https://www.hyperelliptic.org/EFD/g1p/data/twisted/extended/addition/madd-2008-hwcd + + // A = X1*X2 + let a = self.x * &other.x; + // B = Y1*Y2 + let b = self.y * &other.y; + // C = T1*d*T2 + let c = P::COEFF_D * &self.t * &other.x * &other.y; + + // D = Z1 + let d = self.z; + // E = (X1+Y1)*(X2+Y2)-A-B + let e = (self.x + &self.y) * &(other.x + &other.y) - &a - &b; + // F = D-C + let f = d - &c; + // G = D+C + let g = d + &c; + // H = B-a*A + let h = b - &P::mul_by_a(a); + // X3 = E*F + self.x = e * &f; + // Y3 = G*H + self.y = g * &h; + // T3 = E*H + self.t = e * &h; + // Z3 = F*G + self.z = f * &g; + } +} + +impl>> Add for Projective

{ + type Output = Self; + fn add(mut self, other: T) -> Self { + let other = other.borrow(); + self += other; + self + } +} + +impl>> SubAssign for Projective

{ + fn sub_assign(&mut self, other: T) { + *self += -(*other.borrow()); + } +} + +impl>> Sub for Projective

{ + type Output = Self; + fn sub(mut self, other: T) -> Self { + self -= other.borrow(); + self + } +} +ark_ff::impl_additive_ops_from_ref!(Projective, TECurveConfig); + +impl<'a, P: TECurveConfig> Add<&'a Self> for Projective

{ + type Output = Self; + fn add(mut self, other: &'a Self) -> Self { + self += other; + self + } +} + +impl<'a, P: TECurveConfig> Sub<&'a Self> for Projective

{ + type Output = Self; + fn sub(mut self, other: &'a Self) -> Self { + self -= other; + self + } +} + +impl<'a, P: TECurveConfig> AddAssign<&'a Self> for Projective

{ + fn add_assign(&mut self, other: &'a Self) { + // See "Twisted Edwards Curves Revisited" (https://eprint.iacr.org/2008/522.pdf) + // by Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson + // 3.1 Unified Addition in E^e + + // A = x1 * x2 + let a = self.x * &other.x; + + // B = y1 * y2 + let b = self.y * &other.y; + + // C = d * t1 * t2 + let c = P::COEFF_D * &self.t * &other.t; + + // D = z1 * z2 + let d = self.z * &other.z; + + // H = B - aA + let h = b - &P::mul_by_a(a); + + // E = (x1 + y1) * (x2 + y2) - A - B + let e = (self.x + &self.y) * &(other.x + &other.y) - &a - &b; + + // F = D - C + let f = d - &c; + + // G = D + C + let g = d + &c; + + // x3 = E * F + self.x = e * &f; + + // y3 = G * H + self.y = g * &h; + + // t3 = E * H + self.t = e * &h; + + // z3 = F * G + self.z = f * &g; + } +} + +impl<'a, P: TECurveConfig> SubAssign<&'a Self> for Projective

{ + fn sub_assign(&mut self, other: &'a Self) { + *self += -(*other); + } +} + +impl> MulAssign for Projective

{ + fn mul_assign(&mut self, other: T) { + *self = self.mul_bigint(other.borrow().into_bigint()) + } +} + +impl> Mul for Projective

{ + type Output = Self; + + #[inline] + fn mul(mut self, other: T) -> Self { + self *= other; + self + } +} + +impl>> ark_std::iter::Sum for Projective

{ + fn sum(iter: I) -> Self + where + I: Iterator, + { + iter.fold(Self::zero(), |acc, x| acc + x.borrow()) + } +} + +// The affine point (X, Y) is represented in the Extended Projective coordinates +// with Z = 1. +impl From> for Projective

{ + fn from(p: Affine

) -> Projective

{ + Self::new_unchecked(p.x, p.y, p.x * &p.y, P::BaseField::one()) + } +} + +#[derive(Derivative)] +#[derivative( + Copy(bound = "P: MontCurveConfig"), + Clone(bound = "P: MontCurveConfig"), + PartialEq(bound = "P: MontCurveConfig"), + Eq(bound = "P: MontCurveConfig"), + Debug(bound = "P: MontCurveConfig"), + Hash(bound = "P: MontCurveConfig") +)] +pub struct MontgomeryAffine { + pub x: P::BaseField, + pub y: P::BaseField, +} + +impl Display for MontgomeryAffine

{ + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + write!(f, "MontgomeryAffine(x={}, y={})", self.x, self.y) + } +} + +impl MontgomeryAffine

{ + pub fn new(x: P::BaseField, y: P::BaseField) -> Self { + Self { x, y } + } +} + +impl CanonicalSerialize for Projective

{ + #[allow(unused_qualifications)] + #[inline] + fn serialize_with_mode( + &self, + writer: W, + compress: Compress, + ) -> Result<(), SerializationError> { + let aff = Affine::

::from(*self); + P::serialize_with_mode(&aff, writer, compress) + } + + #[inline] + fn serialized_size(&self, compress: Compress) -> usize { + P::serialized_size(compress) + } +} + +impl Valid for Projective

{ + fn check(&self) -> Result<(), SerializationError> { + self.into_affine().check() + } + + fn batch_check<'a>( + batch: impl Iterator + Send, + ) -> Result<(), SerializationError> + where + Self: 'a, + { + let batch = batch.copied().collect::>(); + let batch = Self::normalize_batch(&batch); + Affine::batch_check(batch.iter()) + } +} + +impl CanonicalDeserialize for Projective

{ + #[allow(unused_qualifications)] + fn deserialize_with_mode( + reader: R, + compress: Compress, + validate: Validate, + ) -> Result { + let aff = P::deserialize_with_mode(reader, compress, validate)?; + Ok(aff.into()) + } +} + +impl ToConstraintField for Projective +where + M::BaseField: ToConstraintField, +{ + #[inline] + fn to_field_elements(&self) -> Option> { + Affine::from(*self).to_field_elements() + } +} + +impl ScalarMul for Projective

{ + type MulBase = Affine

; + const NEGATION_IS_CHEAP: bool = true; + + fn batch_convert_to_mul_base(bases: &[Self]) -> Vec { + Self::normalize_batch(bases) + } +} + +impl VariableBaseMSM for Projective

{ + fn msm(bases: &[Self::MulBase], bigints: &[Self::ScalarField]) -> Result { + P::msm(bases, bigints) + } +} diff --git a/primitives/arkworks-models/src/twisted_edwards/mod.rs b/primitives/arkworks-models/src/twisted_edwards/mod.rs new file mode 100644 index 0000000000000..a73253d042067 --- /dev/null +++ b/primitives/arkworks-models/src/twisted_edwards/mod.rs @@ -0,0 +1,175 @@ +use ark_serialize::{ + CanonicalDeserialize, CanonicalDeserializeWithFlags, CanonicalSerialize, + CanonicalSerializeWithFlags, Compress, SerializationError, Valid, Validate, +}; +use ark_std::io::{Read, Write}; + +use crate::{scalar_mul::variable_base::VariableBaseMSM, AffineRepr, Group}; +use num_traits::Zero; + +use ark_ff::fields::Field; + +mod affine; +pub use affine::*; + +mod group; +pub use group::*; + +mod serialization_flags; +pub use serialization_flags::*; + +/// Constants and convenience functions that collectively define the [Twisted Edwards model](https://www.hyperelliptic.org/EFD/g1p/auto-twisted.html) +/// of the curve. In this model, the curve equation is +/// `a * x² + y² = 1 + d * x² * y²`, for constants `a` and `d`. +pub trait TECurveConfig: super::CurveConfig { + /// Coefficient `a` of the curve equation. + const COEFF_A: Self::BaseField; + /// Coefficient `d` of the curve equation. + const COEFF_D: Self::BaseField; + /// Generator of the prime-order subgroup. + const GENERATOR: Affine; + + /// Model parameters for the Montgomery curve that is birationally + /// equivalent to this curve. + type MontCurveConfig: MontCurveConfig; + + /// Helper method for computing `elem * Self::COEFF_A`. + /// + /// The default implementation should be overridden only if + /// the product can be computed faster than standard field multiplication + /// (eg: via doubling if `COEFF_A == 2`, or if `COEFF_A.is_zero()`). + #[inline(always)] + fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { + elem * Self::COEFF_A + } + + /// Checks that the current point is in the prime order subgroup given + /// the point on the curve. + fn is_in_correct_subgroup_assuming_on_curve(item: &Affine) -> bool { + Self::mul_affine(item, Self::ScalarField::characteristic()).is_zero() + } + + /// Performs cofactor clearing. + /// The default method is simply to multiply by the cofactor. + /// For some curve families though, it is sufficient to multiply + /// by a smaller scalar. + fn clear_cofactor(item: &Affine) -> Affine { + item.mul_by_cofactor() + } + + /// Default implementation of group multiplication for projective + /// coordinates + fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base; + } + } + + res + } + + /// Default implementation of group multiplication for affine + /// coordinates + fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { + let mut res = Projective::::zero(); + for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { + res.double_in_place(); + if b { + res += base + } + } + + res + } + + /// Default implementation for multi scalar multiplication + fn msm( + bases: &[Affine], + scalars: &[Self::ScalarField], + ) -> Result, usize> { + (bases.len() == scalars.len()) + .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) + .ok_or(usize::min(bases.len(), scalars.len())) + } + + /// If uncompressed, serializes both x and y coordinates. + /// If compressed, serializes y coordinate with a bit to encode whether x is positive. + #[inline] + fn serialize_with_mode( + item: &Affine, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), SerializationError> { + let flags = TEFlags::from_x_coordinate(item.x); + match compress { + Compress::Yes => item.y.serialize_with_flags(writer, flags), + Compress::No => { + item.x.serialize_uncompressed(&mut writer)?; + item.y.serialize_uncompressed(&mut writer) + }, + } + } + + /// If `validate` is `Yes`, calls `check()` to make sure the element is valid. + /// + /// Uses `Affine::get_xs_from_y_unchecked()` for the compressed version. + fn deserialize_with_mode( + mut reader: R, + compress: Compress, + validate: Validate, + ) -> Result, SerializationError> { + let (x, y) = match compress { + Compress::Yes => { + let (y, flags): (_, TEFlags) = + CanonicalDeserializeWithFlags::deserialize_with_flags(reader)?; + let (x, neg_x) = Affine::::get_xs_from_y_unchecked(y) + .ok_or(SerializationError::InvalidData)?; + if flags.is_negative() { + (neg_x, y) + } else { + (x, y) + } + }, + Compress::No => { + let x: Self::BaseField = + CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; + let y: Self::BaseField = + CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; + (x, y) + }, + }; + let point = Affine::::new_unchecked(x, y); + if let Validate::Yes = validate { + point.check()?; + } + Ok(point) + } + + #[inline] + fn serialized_size(compress: Compress) -> usize { + let zero = Self::BaseField::zero(); + match compress { + Compress::Yes => zero.serialized_size_with_flags::(), + Compress::No => zero.uncompressed_size() + zero.uncompressed_size(), + } + } +} + +/// Constants and convenience functions that collectively define the [Montgomery model](https://www.hyperelliptic.org/EFD/g1p/auto-montgom.html) +/// of the curve. In this model, the curve equation is +/// `b * y² = x³ + a * x² + x`, for constants `a` and `b`. +pub trait MontCurveConfig: super::CurveConfig { + /// Coefficient `a` of the curve equation. + const COEFF_A: Self::BaseField; + /// Coefficient `b` of the curve equation. + const COEFF_B: Self::BaseField; + + /// Model parameters for the Twisted Edwards curve that is birationally + /// equivalent to this curve. + type TECurveConfig: TECurveConfig; +} + +////////////////////////////////////////////////////////////////////////////// diff --git a/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs b/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs new file mode 100644 index 0000000000000..21117b6c29873 --- /dev/null +++ b/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs @@ -0,0 +1,57 @@ +use ark_ff::Field; +use ark_serialize::Flags; + +/// Flags to be encoded into the serialization. +/// The default flags (empty) should not change the binary representation. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum TEFlags { + XIsPositive = 0, + XIsNegative = 1, +} + +impl TEFlags { + #[inline] + pub fn from_x_coordinate(x: impl Field) -> Self { + if x <= -x { + TEFlags::XIsPositive + } else { + TEFlags::XIsNegative + } + } + + #[inline] + pub fn is_negative(&self) -> bool { + matches!(*self, TEFlags::XIsNegative) + } +} + +impl Default for TEFlags { + #[inline] + fn default() -> Self { + // XIsPositive doesn't change the serialization + TEFlags::XIsPositive + } +} + +impl Flags for TEFlags { + const BIT_SIZE: usize = 1; + + #[inline] + fn u8_bitmask(&self) -> u8 { + let mut mask = 0; + if let Self::XIsNegative = self { + mask |= 1 << 7; + } + mask + } + + #[inline] + fn from_u8(value: u8) -> Option { + let x_sign = (value >> 7) & 1 == 1; + if x_sign { + Some(Self::XIsNegative) + } else { + Some(Self::XIsPositive) + } + } +} diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 58750c1f47529..2e9e8d4456e02 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -6,8 +6,6 @@ edition = "2021" license = "Apache-2.0" homepage = "https://substrate.io" repository = "https://github.com/paritytech/substrate/" -description = "Primitive core crate hashing implementation." -documentation = "https://docs.rs/sp-core-hashing" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] From 360b339419ee274bc0b68351c3bc75e55f935754 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 16:35:34 +0100 Subject: [PATCH 066/364] msm for Twisted Edwards --- Cargo.lock | 251 ++++++--- Cargo.toml | 10 +- .../arkworks-curves/bls12_377/Cargo.toml | 4 +- .../arkworks-curves/bls12_381/Cargo.toml | 2 +- primitives/arkworks-curves/bw6_761/Cargo.toml | 2 +- .../ed_on_bls12_377/Cargo.toml | 4 +- .../ed_on_bls12_381/Cargo.toml | 4 +- .../ed_on_bls12_381/src/curves/mod.rs | 4 +- primitives/arkworks-models/src/lib.rs | 5 +- .../src/twisted_edwards/affine.rs | 351 ------------- .../src/twisted_edwards/group.rs | 496 ------------------ .../src/twisted_edwards/mod.rs | 175 ------ .../twisted_edwards/serialization_flags.rs | 57 -- primitives/arkworks/src/ed_on_bls12_381.rs | 34 +- primitives/io/src/lib.rs | 9 +- 15 files changed, 233 insertions(+), 1175 deletions(-) delete mode 100644 primitives/arkworks-models/src/twisted_edwards/affine.rs delete mode 100644 primitives/arkworks-models/src/twisted_edwards/group.rs delete mode 100644 primitives/arkworks-models/src/twisted_edwards/mod.rs delete mode 100644 primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs diff --git a/Cargo.lock b/Cargo.lock index 87090c41ab715..bd6b8e1462394 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,11 +144,30 @@ checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" [[package]] name = "ark-algebra-test-templates" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6", + "ark-ff 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.6", + "ark-std 0.4.0-alpha", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +dependencies = [ + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "hex", "num-bigint", @@ -165,8 +184,8 @@ name = "ark-bls12-377" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] @@ -175,9 +194,9 @@ name = "ark-bls12-381" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] @@ -187,8 +206,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] @@ -196,22 +215,38 @@ dependencies = [ name = "ark-curve-constraint-tests" version = "0.4.0-alpha.1" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ec" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "ark-ff 0.4.0-alpha.6", + "ark-poly 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.6", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ff 0.4.0-alpha.7", + "ark-poly 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -226,8 +261,8 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-377", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] @@ -237,19 +272,38 @@ version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", ] [[package]] name = "ark-ff" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", + "ark-ff-asm 0.4.0-alpha.6", + "ark-ff-macros 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.6", + "ark-std 0.4.0-alpha", + "derivative", + "digest 0.10.6", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +dependencies = [ + "ark-ff-asm 0.4.0-alpha.7", + "ark-ff-macros 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "derivative", "digest 0.10.6", @@ -264,7 +318,16 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" dependencies = [ "quote", "syn", @@ -273,7 +336,19 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" dependencies = [ "num-bigint", "num-traits", @@ -286,10 +361,10 @@ dependencies = [ name = "ark-models" version = "0.4.0-alpha.5" dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", + "ark-poly 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -302,10 +377,22 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" dependencies = [ - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.6", + "ark-std 0.4.0-alpha", + "derivative", + "hashbrown 0.13.1", +] + +[[package]] +name = "ark-poly" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +dependencies = [ + "ark-ff 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "derivative", "hashbrown 0.13.1", @@ -316,8 +403,8 @@ name = "ark-r1cs-std" version = "0.4.0-alpha.3" source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" dependencies = [ - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", "ark-std 0.4.0-alpha", "derivative", @@ -333,7 +420,7 @@ version = "0.4.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "tracing", "tracing-subscriber", @@ -344,7 +431,7 @@ name = "ark-relations" version = "0.4.0-alpha.1" source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" dependencies = [ - "ark-ff", + "ark-ff 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "tracing", ] @@ -352,9 +439,20 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "ark-serialize-derive 0.4.0-alpha.6", + "ark-std 0.4.0-alpha", + "digest 0.10.6", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "digest 0.10.6", "num-bigint", @@ -363,7 +461,17 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +source = "git+https://github.com/arkworks-rs/algebra?branch=release-0.4#ca06b2ba0edd5bad0fa8d1e24eb295948c6cfdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" dependencies = [ "proc-macro2", "quote", @@ -394,15 +502,15 @@ dependencies = [ name = "ark-sub-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.7", "ark-bls12-377", "ark-curve-constraint-tests", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "sp-io", ] @@ -411,12 +519,12 @@ dependencies = [ name = "ark-sub-bls12-381" version = "0.4.0" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.7", "ark-bls12-381", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6", + "ark-ff 0.4.0-alpha.6", "ark-models", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -428,9 +536,9 @@ version = "0.4.0" source = "git+https://github.com/achimcc/ark-sub-curves#2f9e5dbbf97680e9e041dd2978f3b3653e80eb29" dependencies = [ "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ec 0.4.0-alpha.6", + "ark-ff 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.6", "ark-std 0.3.0", ] @@ -438,12 +546,12 @@ dependencies = [ name = "ark-sub-bw6-761" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.7", "ark-bw6-761", - "ark-ec", - "ark-ff", + "ark-ec 0.4.0-alpha.6", + "ark-ff 0.4.0-alpha.7", "ark-models", - "ark-serialize", + "ark-serialize 0.4.0-alpha.6", "ark-std 0.4.0-alpha", "ark-sub-bls12-377", "sp-io", @@ -453,15 +561,15 @@ dependencies = [ name = "ark-sub-ed-on-bls12-377" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.7", "ark-curve-constraint-tests", - "ark-ec", + "ark-ec 0.4.0-alpha.7", "ark-ed-on-bls12-377", - "ark-ff", + "ark-ff 0.4.0-alpha.7", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "ark-sub-bls12-377", "sp-io", @@ -471,15 +579,15 @@ dependencies = [ name = "ark-sub-ed-on-bls12-381" version = "0.4.0-alpha.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.7", "ark-curve-constraint-tests", - "ark-ec", + "ark-ec 0.4.0-alpha.7", "ark-ed-on-bls12-381", - "ark-ff", + "ark-ff 0.4.0-alpha.7", "ark-models", "ark-r1cs-std", "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0", "sp-io", @@ -9445,15 +9553,15 @@ dependencies = [ name = "sp-arkworks" version = "0.0.1" dependencies = [ - "ark-algebra-test-templates", + "ark-algebra-test-templates 0.4.0-alpha.6", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", - "ark-ec", + "ark-ec 0.4.0-alpha.7", "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.0-alpha.7", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "ark-sub-bls12-381 0.4.0 (git+https://github.com/achimcc/ark-sub-curves)", "better_any", @@ -12122,8 +12230,3 @@ dependencies = [ "cc", "libc", ] - -[[patch.unused]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.6" -source = "git+https://github.com/arkworks-rs/algebra/#32201cb5d223af7a63375a641c10c018ac1a67a9" diff --git a/Cargo.toml b/Cargo.toml index 6ba5d8b8e8138..48dec67bbce8f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,11 +329,11 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "release-0.4" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/" } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 0d8a1d48299ba..ad25ad63190d2 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -21,8 +21,8 @@ sp-io = { path = "../../io" } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index adf251ba26435..f30e92dc881a2 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -18,7 +18,7 @@ ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } hex = "^0.4.0" diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 873fe783b889f..bac9c712a2cd1 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -19,7 +19,7 @@ ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } [features] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 2c89031fbc224..1a788faa3058e 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -21,9 +21,9 @@ sp-io = { path = "../../io" } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } [features] default = [] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index 334ec7e146789..e663bea2a6cc1 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -21,9 +21,9 @@ sp-io = { path = "../../io" } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } [features] default = [] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs index 1b1e4fb532ffa..9343f3597e3f1 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs @@ -109,7 +109,7 @@ impl TECurveConfig for JubjubConfig { serialized }) .collect(); - let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); + let result = sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars); let cursor = Cursor::new(&result[..]); let result = ::deserialize_with_mode( cursor, @@ -209,7 +209,7 @@ impl SWCurveConfig for JubjubConfig { serialized }) .collect(); - let result = sp_io::crypto::ed_on_bls12_381_msm(bases, scalars); + let result = sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars); let cursor = Cursor::new(&result[..]); let result = SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 0b79439c85fee..97b60f36bf8af 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,7 +1,6 @@ pub mod bls12; pub mod bw6; -pub mod twisted_edwards; pub use ark_ec::{ - models, models::short_weierstrass, pairing, scalar_mul, AffineRepr, CurveConfig, CurveGroup, - Group, + models, models::short_weierstrass, pairing, scalar_mul, twisted_edwards, AffineRepr, + CurveConfig, CurveGroup, Group, }; diff --git a/primitives/arkworks-models/src/twisted_edwards/affine.rs b/primitives/arkworks-models/src/twisted_edwards/affine.rs deleted file mode 100644 index 52f249331bba5..0000000000000 --- a/primitives/arkworks-models/src/twisted_edwards/affine.rs +++ /dev/null @@ -1,351 +0,0 @@ -use ark_serialize::{ - CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Valid, Validate, -}; -use ark_std::{ - borrow::Borrow, - fmt::{Debug, Display, Formatter, Result as FmtResult}, - io::{Read, Write}, - ops::{Add, Mul, Neg, Sub}, - rand::{ - distributions::{Distribution, Standard}, - Rng, - }, - vec::Vec, -}; -use derivative::Derivative; -use num_traits::{One, Zero}; -use zeroize::Zeroize; - -use ark_ff::{fields::Field, PrimeField, ToConstraintField, UniformRand}; - -use super::{Projective, TECurveConfig, TEFlags}; -use crate::AffineRepr; - -/// Affine coordinates for a point on a twisted Edwards curve, over the -/// base field `P::BaseField`. -#[derive(Derivative)] -#[derivative( - Copy(bound = "P: TECurveConfig"), - Clone(bound = "P: TECurveConfig"), - PartialEq(bound = "P: TECurveConfig"), - Eq(bound = "P: TECurveConfig"), - Hash(bound = "P: TECurveConfig") -)] -#[must_use] -pub struct Affine { - /// X coordinate of the point represented as a field element - pub x: P::BaseField, - /// Y coordinate of the point represented as a field element - pub y: P::BaseField, -} - -impl Display for Affine

{ - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - match self.is_zero() { - true => write!(f, "infinity"), - false => write!(f, "({}, {})", self.x, self.y), - } - } -} - -impl Debug for Affine

{ - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - match self.is_zero() { - true => write!(f, "infinity"), - false => write!(f, "({}, {})", self.x, self.y), - } - } -} - -impl PartialEq> for Affine

{ - fn eq(&self, other: &Projective

) -> bool { - self.into_group() == *other - } -} - -impl Affine

{ - /// Construct a new group element without checking whether the coordinates - /// specify a point in the subgroup. - pub const fn new_unchecked(x: P::BaseField, y: P::BaseField) -> Self { - Self { x, y } - } - - /// Construct a new group element in a way while enforcing that points are in - /// the prime-order subgroup. - pub fn new(x: P::BaseField, y: P::BaseField) -> Self { - let p = Self::new_unchecked(x, y); - assert!(p.is_on_curve()); - assert!(p.is_in_correct_subgroup_assuming_on_curve()); - p - } - - /// Construct the identity of the group - pub const fn zero() -> Self { - Self::new_unchecked(P::BaseField::ZERO, P::BaseField::ONE) - } - - /// Is this point the identity? - pub fn is_zero(&self) -> bool { - self.x.is_zero() && self.y.is_one() - } - - /// Attempts to construct an affine point given an y-coordinate. The - /// point is not guaranteed to be in the prime order subgroup. - /// - /// If and only if `greatest` is set will the lexicographically - /// largest x-coordinate be selected. - /// - /// a * X^2 + Y^2 = 1 + d * X^2 * Y^2 - /// a * X^2 - d * X^2 * Y^2 = 1 - Y^2 - /// X^2 * (a - d * Y^2) = 1 - Y^2 - /// X^2 = (1 - Y^2) / (a - d * Y^2) - #[allow(dead_code)] - pub fn get_point_from_y_unchecked(y: P::BaseField, greatest: bool) -> Option { - Self::get_xs_from_y_unchecked(y).map(|(x, neg_x)| { - if greatest { - Self::new_unchecked(neg_x, y) - } else { - Self::new_unchecked(x, y) - } - }) - } - - /// Attempts to recover the x-coordinate given an y-coordinate. The - /// resulting point is not guaranteed to be in the prime order subgroup. - /// - /// If and only if `greatest` is set will the lexicographically - /// largest x-coordinate be selected. - /// - /// a * X^2 + Y^2 = 1 + d * X^2 * Y^2 - /// a * X^2 - d * X^2 * Y^2 = 1 - Y^2 - /// X^2 * (a - d * Y^2) = 1 - Y^2 - /// X^2 = (1 - Y^2) / (a - d * Y^2) - #[allow(dead_code)] - pub fn get_xs_from_y_unchecked(y: P::BaseField) -> Option<(P::BaseField, P::BaseField)> { - let y2 = y.square(); - - let numerator = P::BaseField::one() - y2; - let denominator = P::COEFF_A - (y2 * P::COEFF_D); - - denominator - .inverse() - .map(|denom| denom * &numerator) - .and_then(|x2| x2.sqrt()) - .map(|x| { - let neg_x = -x; - if x <= neg_x { - (x, neg_x) - } else { - (neg_x, x) - } - }) - } - - /// Checks that the current point is on the elliptic curve. - pub fn is_on_curve(&self) -> bool { - let x2 = self.x.square(); - let y2 = self.y.square(); - - let lhs = y2 + P::mul_by_a(x2); - let rhs = P::BaseField::one() + &(P::COEFF_D * &(x2 * &y2)); - - lhs == rhs - } -} - -impl Affine

{ - /// Checks if `self` is in the subgroup having order equaling that of - /// `P::ScalarField` given it is on the curve. - pub fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool { - P::is_in_correct_subgroup_assuming_on_curve(self) - } -} - -impl AffineRepr for Affine

{ - type Config = P; - type BaseField = P::BaseField; - type ScalarField = P::ScalarField; - type Group = Projective

; - - fn xy(&self) -> Option<(&Self::BaseField, &Self::BaseField)> { - (!self.is_zero()).then(|| (&self.x, &self.y)) - } - - fn generator() -> Self { - P::GENERATOR - } - - fn zero() -> Self { - Self::new_unchecked(P::BaseField::ZERO, P::BaseField::ONE) - } - - fn from_random_bytes(bytes: &[u8]) -> Option { - P::BaseField::from_random_bytes_with_flags::(bytes) - .and_then(|(y, flags)| Self::get_point_from_y_unchecked(y, flags.is_negative())) - } - - fn mul_bigint(&self, by: impl AsRef<[u64]>) -> Self::Group { - P::mul_affine(self, by.as_ref()) - } - - /// Multiplies this element by the cofactor and output the - /// resulting projective element. - #[must_use] - fn mul_by_cofactor_to_group(&self) -> Self::Group { - P::mul_affine(self, Self::Config::COFACTOR) - } - - /// Performs cofactor clearing. - /// The default method is simply to multiply by the cofactor. - /// Some curves can implement a more efficient algorithm. - fn clear_cofactor(&self) -> Self { - P::clear_cofactor(self) - } -} - -impl Zeroize for Affine

{ - // The phantom data does not contain element-specific data - // and thus does not need to be zeroized. - fn zeroize(&mut self) { - self.x.zeroize(); - self.y.zeroize(); - } -} - -impl Neg for Affine

{ - type Output = Self; - - fn neg(self) -> Self { - Self::new_unchecked(-self.x, self.y) - } -} - -impl> Add for Affine

{ - type Output = Projective

; - fn add(self, other: T) -> Self::Output { - let mut copy = self.into_group(); - copy += other.borrow(); - copy - } -} - -impl Add> for Affine

{ - type Output = Projective

; - fn add(self, other: Projective

) -> Projective

{ - other + self - } -} - -impl<'a, P: TECurveConfig> Add<&'a Projective

> for Affine

{ - type Output = Projective

; - fn add(self, other: &'a Projective

) -> Projective

{ - *other + self - } -} - -impl> Sub for Affine

{ - type Output = Projective

; - fn sub(self, other: T) -> Self::Output { - let mut copy = self.into_group(); - copy -= other.borrow(); - copy - } -} - -impl Default for Affine

{ - #[inline] - fn default() -> Self { - Self::zero() - } -} - -impl Distribution> for Standard { - /// Generates a uniformly random instance of the curve. - #[inline] - fn sample(&self, rng: &mut R) -> Affine

{ - loop { - let y = P::BaseField::rand(rng); - let greatest = rng.gen(); - - if let Some(p) = Affine::get_point_from_y_unchecked(y, greatest) { - return p.mul_by_cofactor() - } - } - } -} - -impl> Mul for Affine

{ - type Output = Projective

; - - #[inline] - fn mul(self, other: T) -> Self::Output { - self.mul_bigint(other.borrow().into_bigint()) - } -} - -// The projective point X, Y, T, Z is represented in the affine -// coordinates as X/Z, Y/Z. -impl From> for Affine

{ - fn from(p: Projective

) -> Affine

{ - if p.is_zero() { - Affine::zero() - } else if p.z.is_one() { - // If Z is one, the point is already normalized. - Affine::new_unchecked(p.x, p.y) - } else { - // Z is nonzero, so it must have an inverse in a field. - let z_inv = p.z.inverse().unwrap(); - let x = p.x * &z_inv; - let y = p.y * &z_inv; - Affine::new_unchecked(x, y) - } - } -} -impl CanonicalSerialize for Affine

{ - #[inline] - fn serialize_with_mode( - &self, - writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - P::serialize_with_mode(self, writer, compress) - } - - #[inline] - fn serialized_size(&self, compress: Compress) -> usize { - P::serialized_size(compress) - } -} - -impl Valid for Affine

{ - fn check(&self) -> Result<(), SerializationError> { - if self.is_on_curve() && self.is_in_correct_subgroup_assuming_on_curve() { - Ok(()) - } else { - Err(SerializationError::InvalidData) - } - } -} - -impl CanonicalDeserialize for Affine

{ - fn deserialize_with_mode( - reader: R, - compress: Compress, - validate: Validate, - ) -> Result { - P::deserialize_with_mode(reader, compress, validate) - } -} - -impl ToConstraintField for Affine -where - M::BaseField: ToConstraintField, -{ - #[inline] - fn to_field_elements(&self) -> Option> { - let mut x_fe = self.x.to_field_elements()?; - let y_fe = self.y.to_field_elements()?; - x_fe.extend_from_slice(&y_fe); - Some(x_fe) - } -} diff --git a/primitives/arkworks-models/src/twisted_edwards/group.rs b/primitives/arkworks-models/src/twisted_edwards/group.rs deleted file mode 100644 index ca346c8fa413b..0000000000000 --- a/primitives/arkworks-models/src/twisted_edwards/group.rs +++ /dev/null @@ -1,496 +0,0 @@ -use ark_serialize::{ - CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Valid, Validate, -}; -use ark_std::{ - borrow::Borrow, - fmt::{Display, Formatter, Result as FmtResult}, - hash::{Hash, Hasher}, - io::{Read, Write}, - ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}, - rand::{ - distributions::{Distribution, Standard}, - Rng, - }, - vec::Vec, - One, Zero, -}; -use derivative::Derivative; - -use ark_ff::{fields::Field, PrimeField, ToConstraintField, UniformRand}; - -use zeroize::Zeroize; - -#[cfg(feature = "parallel")] -use rayon::prelude::*; - -use super::{Affine, MontCurveConfig, TECurveConfig}; -use crate::{ - scalar_mul::{variable_base::VariableBaseMSM, ScalarMul}, - AffineRepr, CurveGroup, Group, -}; - -/// `Projective` implements Extended Twisted Edwards Coordinates -/// as described in [\[HKCD08\]](https://eprint.iacr.org/2008/522.pdf). -/// -/// This implementation uses the unified addition formulae from that paper (see -/// Section 3.1). -#[derive(Derivative)] -#[derivative( - Copy(bound = "P: TECurveConfig"), - Clone(bound = "P: TECurveConfig"), - Eq(bound = "P: TECurveConfig"), - Debug(bound = "P: TECurveConfig") -)] -#[must_use] -pub struct Projective { - pub x: P::BaseField, - pub y: P::BaseField, - pub t: P::BaseField, - pub z: P::BaseField, -} - -impl PartialEq> for Projective

{ - fn eq(&self, other: &Affine

) -> bool { - *self == other.into_group() - } -} - -impl Display for Projective

{ - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!(f, "{}", Affine::from(*self)) - } -} - -impl PartialEq for Projective

{ - fn eq(&self, other: &Self) -> bool { - if self.is_zero() { - return other.is_zero() - } - - if other.is_zero() { - return false - } - - // x1/z1 == x2/z2 <==> x1 * z2 == x2 * z1 - (self.x * &other.z) == (other.x * &self.z) && (self.y * &other.z) == (other.y * &self.z) - } -} - -impl Hash for Projective

{ - fn hash(&self, state: &mut H) { - self.into_affine().hash(state) - } -} - -impl Distribution> for Standard { - /// Generates a uniformly random instance of the curve. - #[inline] - fn sample(&self, rng: &mut R) -> Projective

{ - loop { - let y = P::BaseField::rand(rng); - let greatest = rng.gen(); - - if let Some(p) = Affine::get_point_from_y_unchecked(y, greatest) { - return p.mul_by_cofactor_to_group() - } - } - } -} - -impl Default for Projective

{ - #[inline] - fn default() -> Self { - Self::zero() - } -} - -impl Projective

{ - /// Construct a new group element without checking whether the coordinates - /// specify a point in the subgroup. - pub const fn new_unchecked( - x: P::BaseField, - y: P::BaseField, - t: P::BaseField, - z: P::BaseField, - ) -> Self { - Self { x, y, t, z } - } - - /// Construct a new group element in a way while enforcing that points are in - /// the prime-order subgroup. - pub fn new(x: P::BaseField, y: P::BaseField, t: P::BaseField, z: P::BaseField) -> Self { - let p = Self::new_unchecked(x, y, t, z).into_affine(); - assert!(p.is_on_curve()); - assert!(p.is_in_correct_subgroup_assuming_on_curve()); - p.into() - } -} -impl Zeroize for Projective

{ - // The phantom data does not contain element-specific data - // and thus does not need to be zeroized. - fn zeroize(&mut self) { - self.x.zeroize(); - self.y.zeroize(); - self.t.zeroize(); - self.z.zeroize(); - } -} - -impl Zero for Projective

{ - fn zero() -> Self { - Self::new_unchecked( - P::BaseField::zero(), - P::BaseField::one(), - P::BaseField::zero(), - P::BaseField::one(), - ) - } - - fn is_zero(&self) -> bool { - self.x.is_zero() && self.y == self.z && !self.y.is_zero() && self.t.is_zero() - } -} - -impl Group for Projective

{ - type ScalarField = P::ScalarField; - - fn generator() -> Self { - Affine::generator().into() - } - - fn double_in_place(&mut self) -> &mut Self { - // See "Twisted Edwards Curves Revisited" - // Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson - // 3.3 Doubling in E^e - // Source: https://www.hyperelliptic.org/EFD/g1p/data/twisted/extended/doubling/dbl-2008-hwcd - - // A = X1^2 - let a = self.x.square(); - // B = Y1^2 - let b = self.y.square(); - // C = 2 * Z1^2 - let c = self.z.square().double(); - // D = a * A - let d = P::mul_by_a(a); - // E = (X1 + Y1)^2 - A - B - let e = (self.x + &self.y).square() - &a - &b; - // G = D + B - let g = d + &b; - // F = G - C - let f = g - &c; - // H = D - B - let h = d - &b; - // X3 = E * F - self.x = e * &f; - // Y3 = G * H - self.y = g * &h; - // T3 = E * H - self.t = e * &h; - // Z3 = F * G - self.z = f * &g; - - self - } - - #[inline] - fn mul_bigint(&self, other: impl AsRef<[u64]>) -> Self { - P::mul_projective(self, other.as_ref()) - } -} - -impl CurveGroup for Projective

{ - type Config = P; - type BaseField = P::BaseField; - type Affine = Affine

; - type FullGroup = Affine

; - - fn normalize_batch(v: &[Self]) -> Vec { - // A projective curve element (x, y, t, z) is normalized - // to its affine representation, by the conversion - // (x, y, t, z) -> (x/z, y/z, t/z, 1) - // Batch normalizing N twisted edwards curve elements costs: - // 1 inversion + 6N field multiplications - // (batch inversion requires 3N multiplications + 1 inversion) - let mut z_s = v.iter().map(|g| g.z).collect::>(); - ark_ff::batch_inversion(&mut z_s); - - // Perform affine transformations - ark_std::cfg_iter!(v) - .zip(z_s) - .map(|(g, z)| match g.is_zero() { - true => Affine::zero(), - false => { - let x = g.x * &z; - let y = g.y * &z; - Affine::new_unchecked(x, y) - }, - }) - .collect() - } -} - -impl Neg for Projective

{ - type Output = Self; - fn neg(mut self) -> Self { - self.x = -self.x; - self.t = -self.t; - self - } -} - -impl>> AddAssign for Projective

{ - fn add_assign(&mut self, other: T) { - let other = other.borrow(); - // See "Twisted Edwards Curves Revisited" - // Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson - // 3.1 Unified Addition in E^e - // Source: https://www.hyperelliptic.org/EFD/g1p/data/twisted/extended/addition/madd-2008-hwcd - - // A = X1*X2 - let a = self.x * &other.x; - // B = Y1*Y2 - let b = self.y * &other.y; - // C = T1*d*T2 - let c = P::COEFF_D * &self.t * &other.x * &other.y; - - // D = Z1 - let d = self.z; - // E = (X1+Y1)*(X2+Y2)-A-B - let e = (self.x + &self.y) * &(other.x + &other.y) - &a - &b; - // F = D-C - let f = d - &c; - // G = D+C - let g = d + &c; - // H = B-a*A - let h = b - &P::mul_by_a(a); - // X3 = E*F - self.x = e * &f; - // Y3 = G*H - self.y = g * &h; - // T3 = E*H - self.t = e * &h; - // Z3 = F*G - self.z = f * &g; - } -} - -impl>> Add for Projective

{ - type Output = Self; - fn add(mut self, other: T) -> Self { - let other = other.borrow(); - self += other; - self - } -} - -impl>> SubAssign for Projective

{ - fn sub_assign(&mut self, other: T) { - *self += -(*other.borrow()); - } -} - -impl>> Sub for Projective

{ - type Output = Self; - fn sub(mut self, other: T) -> Self { - self -= other.borrow(); - self - } -} -ark_ff::impl_additive_ops_from_ref!(Projective, TECurveConfig); - -impl<'a, P: TECurveConfig> Add<&'a Self> for Projective

{ - type Output = Self; - fn add(mut self, other: &'a Self) -> Self { - self += other; - self - } -} - -impl<'a, P: TECurveConfig> Sub<&'a Self> for Projective

{ - type Output = Self; - fn sub(mut self, other: &'a Self) -> Self { - self -= other; - self - } -} - -impl<'a, P: TECurveConfig> AddAssign<&'a Self> for Projective

{ - fn add_assign(&mut self, other: &'a Self) { - // See "Twisted Edwards Curves Revisited" (https://eprint.iacr.org/2008/522.pdf) - // by Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, and Ed Dawson - // 3.1 Unified Addition in E^e - - // A = x1 * x2 - let a = self.x * &other.x; - - // B = y1 * y2 - let b = self.y * &other.y; - - // C = d * t1 * t2 - let c = P::COEFF_D * &self.t * &other.t; - - // D = z1 * z2 - let d = self.z * &other.z; - - // H = B - aA - let h = b - &P::mul_by_a(a); - - // E = (x1 + y1) * (x2 + y2) - A - B - let e = (self.x + &self.y) * &(other.x + &other.y) - &a - &b; - - // F = D - C - let f = d - &c; - - // G = D + C - let g = d + &c; - - // x3 = E * F - self.x = e * &f; - - // y3 = G * H - self.y = g * &h; - - // t3 = E * H - self.t = e * &h; - - // z3 = F * G - self.z = f * &g; - } -} - -impl<'a, P: TECurveConfig> SubAssign<&'a Self> for Projective

{ - fn sub_assign(&mut self, other: &'a Self) { - *self += -(*other); - } -} - -impl> MulAssign for Projective

{ - fn mul_assign(&mut self, other: T) { - *self = self.mul_bigint(other.borrow().into_bigint()) - } -} - -impl> Mul for Projective

{ - type Output = Self; - - #[inline] - fn mul(mut self, other: T) -> Self { - self *= other; - self - } -} - -impl>> ark_std::iter::Sum for Projective

{ - fn sum(iter: I) -> Self - where - I: Iterator, - { - iter.fold(Self::zero(), |acc, x| acc + x.borrow()) - } -} - -// The affine point (X, Y) is represented in the Extended Projective coordinates -// with Z = 1. -impl From> for Projective

{ - fn from(p: Affine

) -> Projective

{ - Self::new_unchecked(p.x, p.y, p.x * &p.y, P::BaseField::one()) - } -} - -#[derive(Derivative)] -#[derivative( - Copy(bound = "P: MontCurveConfig"), - Clone(bound = "P: MontCurveConfig"), - PartialEq(bound = "P: MontCurveConfig"), - Eq(bound = "P: MontCurveConfig"), - Debug(bound = "P: MontCurveConfig"), - Hash(bound = "P: MontCurveConfig") -)] -pub struct MontgomeryAffine { - pub x: P::BaseField, - pub y: P::BaseField, -} - -impl Display for MontgomeryAffine

{ - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!(f, "MontgomeryAffine(x={}, y={})", self.x, self.y) - } -} - -impl MontgomeryAffine

{ - pub fn new(x: P::BaseField, y: P::BaseField) -> Self { - Self { x, y } - } -} - -impl CanonicalSerialize for Projective

{ - #[allow(unused_qualifications)] - #[inline] - fn serialize_with_mode( - &self, - writer: W, - compress: Compress, - ) -> Result<(), SerializationError> { - let aff = Affine::

::from(*self); - P::serialize_with_mode(&aff, writer, compress) - } - - #[inline] - fn serialized_size(&self, compress: Compress) -> usize { - P::serialized_size(compress) - } -} - -impl Valid for Projective

{ - fn check(&self) -> Result<(), SerializationError> { - self.into_affine().check() - } - - fn batch_check<'a>( - batch: impl Iterator + Send, - ) -> Result<(), SerializationError> - where - Self: 'a, - { - let batch = batch.copied().collect::>(); - let batch = Self::normalize_batch(&batch); - Affine::batch_check(batch.iter()) - } -} - -impl CanonicalDeserialize for Projective

{ - #[allow(unused_qualifications)] - fn deserialize_with_mode( - reader: R, - compress: Compress, - validate: Validate, - ) -> Result { - let aff = P::deserialize_with_mode(reader, compress, validate)?; - Ok(aff.into()) - } -} - -impl ToConstraintField for Projective -where - M::BaseField: ToConstraintField, -{ - #[inline] - fn to_field_elements(&self) -> Option> { - Affine::from(*self).to_field_elements() - } -} - -impl ScalarMul for Projective

{ - type MulBase = Affine

; - const NEGATION_IS_CHEAP: bool = true; - - fn batch_convert_to_mul_base(bases: &[Self]) -> Vec { - Self::normalize_batch(bases) - } -} - -impl VariableBaseMSM for Projective

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 diff --git a/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat deleted file mode 100644 index 92e4bc528e8937a311b502e4940e5e363a1f7c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192000 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�uc*gWwz@d=S2~bA~LrFNXzUL(>hGG#V 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%0DJH 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�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 msm); -test_pairing!(pairing; crate::Bls12_381); - -#[test] -fn test_g1_endomorphism_beta() { - assert!(crate::g1::BETA.pow(&[3u64]).is_one()); -} - -#[test] -fn test_g1_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G1Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g1_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !p.mul_bigint(Fr::characteristic()).is_zero() { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return - } - } - } -} - -#[test] -fn test_g2_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G2Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g2_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq2::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !p.mul_bigint(Fr::characteristic()).is_zero() { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return - } - } - } -} - -// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs -macro_rules! test_vectors { - ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { - let mut e = $projective::zero(); - - let mut v = vec![]; - { - let mut expected = $expected; - for _ in 0..1000 { - let e_affine = $affine::from(e); - let mut serialized = vec![0u8; e.serialized_size($compress)]; - e_affine.serialize_with_mode(serialized.as_mut_slice(), $compress).unwrap(); - v.extend_from_slice(&serialized[..]); - - let mut decoded = serialized; - let len_of_encoding = decoded.len(); - (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); - expected = &expected[len_of_encoding..]; - let decoded = - $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); - assert_eq!(e_affine, decoded); - - e += &$projective::generator(); - } - } - - assert_eq!(&v[..], $expected); - }; -} - -#[test] -fn g1_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); -} - -#[test] -fn g1_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::No, bytes); -} - -#[test] -fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); -} - -#[test] -fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); -} diff --git a/primitives/arkworks-curves/bls12_381/src/curves/util.rs b/primitives/arkworks-curves/bls12_381/src/curves/util.rs deleted file mode 100644 index e1d4b388bc5c8..0000000000000 --- a/primitives/arkworks-curves/bls12_381/src/curves/util.rs +++ /dev/null @@ -1,207 +0,0 @@ -use ark_ff::{BigInteger384, PrimeField}; -use ark_models::{short_weierstrass::Affine, AffineRepr}; -use ark_serialize::SerializationError; - -use crate::{g1::Config as G1Config, g2::Config as G2Config, G1Affine, G2Affine}; -use ark_bls12_381::{Fq, Fq2}; - -pub const G1_SERIALIZED_SIZE: usize = 48; -pub const G2_SERIALIZED_SIZE: usize = 96; - -pub struct EncodingFlags { - pub is_compressed: bool, - pub is_infinity: bool, - pub is_lexographically_largest: bool, -} - -impl EncodingFlags { - pub fn get_flags(bytes: &[u8]) -> Self { - let compression_flag_set = (bytes[0] >> 7) & 1; - let infinity_flag_set = (bytes[0] >> 6) & 1; - let sort_flag_set = (bytes[0] >> 5) & 1; - - Self { - is_compressed: compression_flag_set == 1, - is_infinity: infinity_flag_set == 1, - is_lexographically_largest: sort_flag_set == 1, - } - } - pub fn encode_flags(&self, bytes: &mut [u8]) { - if self.is_compressed { - bytes[0] |= 1 << 7; - } - - if self.is_infinity { - bytes[0] |= 1 << 6; - } - - if self.is_compressed && !self.is_infinity && self.is_lexographically_largest { - bytes[0] |= 1 << 5; - } - } -} - -pub(crate) fn deserialize_fq(bytes: [u8; 48]) -> Option { - let mut tmp = BigInteger384::new([0, 0, 0, 0, 0, 0]); - - // Note: The following unwraps are if the compiler cannot convert - // the byte slice into [u8;8], we know this is infallible since we - // are providing the indices at compile time and bytes has a fixed size - tmp.0[5] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[0..8]).unwrap()); - tmp.0[4] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[8..16]).unwrap()); - tmp.0[3] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[16..24]).unwrap()); - tmp.0[2] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[24..32]).unwrap()); - tmp.0[1] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[32..40]).unwrap()); - tmp.0[0] = u64::from_be_bytes(<[u8; 8]>::try_from(&bytes[40..48]).unwrap()); - - Fq::from_bigint(tmp) -} - -pub(crate) fn serialize_fq(field: Fq) -> [u8; 48] { - let mut result = [0u8; 48]; - - let rep = field.into_bigint(); - - result[0..8].copy_from_slice(&rep.0[5].to_be_bytes()); - result[8..16].copy_from_slice(&rep.0[4].to_be_bytes()); - result[16..24].copy_from_slice(&rep.0[3].to_be_bytes()); - result[24..32].copy_from_slice(&rep.0[2].to_be_bytes()); - result[32..40].copy_from_slice(&rep.0[1].to_be_bytes()); - result[40..48].copy_from_slice(&rep.0[0].to_be_bytes()); - - result -} - -pub(crate) fn read_fq_with_offset( - bytes: &[u8], - offset: usize, - mask: bool, -) -> Result { - let mut tmp = [0; G1_SERIALIZED_SIZE]; - // read `G1_SERIALIZED_SIZE` bytes - tmp.copy_from_slice(&bytes[offset * G1_SERIALIZED_SIZE..G1_SERIALIZED_SIZE * (offset + 1)]); - - if mask { - // Mask away the flag bits - tmp[0] &= 0b0001_1111; - } - deserialize_fq(tmp).ok_or(SerializationError::InvalidData) -} - -pub(crate) fn read_g1_compressed( - mut reader: R, -) -> Result, ark_serialize::SerializationError> { - let mut bytes = [0u8; G1_SERIALIZED_SIZE]; - reader.read_exact(&mut bytes).ok().ok_or(SerializationError::InvalidData)?; - - // Obtain the three flags from the start of the byte sequence - let flags = EncodingFlags::get_flags(&bytes[..]); - - // we expect to be deserializing a compressed point - if !flags.is_compressed { - return Err(SerializationError::UnexpectedFlags) - } - - if flags.is_infinity { - return Ok(G1Affine::zero()) - } - - // Attempt to obtain the x-coordinate - let x = read_fq_with_offset(&bytes, 0, true)?; - - let p = G1Affine::get_point_from_x_unchecked(x, flags.is_lexographically_largest) - .ok_or(SerializationError::InvalidData)?; - - Ok(p) -} - -pub(crate) fn read_g1_uncompressed( - mut reader: R, -) -> Result, ark_serialize::SerializationError> { - let mut bytes = [0u8; 2 * G1_SERIALIZED_SIZE]; - reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; - - // Obtain the three flags from the start of the byte sequence - let flags = EncodingFlags::get_flags(&bytes[..]); - - // we expect to be deserializing an uncompressed point - if flags.is_compressed { - return Err(SerializationError::UnexpectedFlags) - } - - if flags.is_infinity { - return Ok(G1Affine::zero()) - } - - // Attempt to obtain the x-coordinate - let x = read_fq_with_offset(&bytes, 0, true)?; - // Attempt to obtain the y-coordinate - let y = read_fq_with_offset(&bytes, 1, false)?; - - let p = G1Affine::new_unchecked(x, y); - - Ok(p) -} - -pub(crate) fn read_g2_compressed( - mut reader: R, -) -> Result, ark_serialize::SerializationError> { - let mut bytes = [0u8; G2_SERIALIZED_SIZE]; - reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; - - // Obtain the three flags from the start of the byte sequence - let flags = EncodingFlags::get_flags(&bytes); - - // we expect to be deserializing a compressed point - if !flags.is_compressed { - return Err(SerializationError::UnexpectedFlags) - } - - if flags.is_infinity { - return Ok(G2Affine::zero()) - } - - // Attempt to obtain the x-coordinate - let xc1 = read_fq_with_offset(&bytes, 0, true)?; - let xc0 = read_fq_with_offset(&bytes, 1, false)?; - - let x = Fq2::new(xc0, xc1); - - let p = G2Affine::get_point_from_x_unchecked(x, flags.is_lexographically_largest) - .ok_or(SerializationError::InvalidData)?; - - Ok(p) -} - -pub(crate) fn read_g2_uncompressed( - mut reader: R, -) -> Result, ark_serialize::SerializationError> { - let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; - reader.read_exact(&mut bytes).map_err(|_| SerializationError::InvalidData)?; - - // Obtain the three flags from the start of the byte sequence - let flags = EncodingFlags::get_flags(&bytes); - - // we expect to be deserializing an uncompressed point - if flags.is_compressed { - return Err(SerializationError::UnexpectedFlags) - } - - if flags.is_infinity { - return Ok(G2Affine::zero()) - } - - // Attempt to obtain the x-coordinate - let xc1 = read_fq_with_offset(&bytes, 0, true)?; - let xc0 = read_fq_with_offset(&bytes, 1, false)?; - let x = Fq2::new(xc0, xc1); - - // Attempt to obtain the y-coordinate - let yc1 = read_fq_with_offset(&bytes, 2, false)?; - let yc0 = read_fq_with_offset(&bytes, 3, false)?; - let y = Fq2::new(yc0, yc1); - - let p = G2Affine::new_unchecked(x, y); - - Ok(p) -} diff --git a/primitives/arkworks-curves/bls12_381/src/lib.rs b/primitives/arkworks-curves/bls12_381/src/lib.rs deleted file mode 100755 index 3e60fff740c12..0000000000000 --- a/primitives/arkworks-curves/bls12_381/src/lib.rs +++ /dev/null @@ -1,26 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements the BLS12_381 curve generated by [Sean Bowe](https://electriccoin.co/blog/new-snark-curve/). -//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree -//! 12, defined over a 381-bit (prime) field. -//! This curve was intended to replace the BN254 curve to provide a higher -//! security level without incurring a large performance overhead. -//! -//! -//! Curve information: -//! * Base field: q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 -//! * Scalar field: r = -//! 52435875175126190479447740508185965837690552500527637822603658699938581184513 -//! * valuation(q - 1, 2) = 1 -//! * valuation(r - 1, 2) = 32 -//! * G1 curve equation: y^2 = x^3 + 4 -//! * G2 curve equation: y^2 = x^3 + Fq2(4, 4) - -#[cfg(feature = "curve")] -mod curves; - -pub use ark_bls12_381::{fq, fq12, fq2, fq6, fr, Fq, Fq2, Fr, FrConfig}; -#[cfg(feature = "curve")] -pub use curves::*; diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml deleted file mode 100644 index a9039dadb12d2..0000000000000 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -name = "sp-ark-bw6-761" -version = "0.4.0-alpha.1" -authors = [ "achimcc, arkworks contributors" ] -repository = "https://github.com/paritytech/substrate/" -description = "The BW6-761 pairing-friendly elliptic curve, optimized for Substrate" -keywords = ["cryptography", "finite-fields", "elliptic-curves" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-ff = { version="0.4.0-alpha", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } -ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } - -[dev-dependencies] -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } - -[features] -default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std", "ark-bw6-761/std", "ark-models/std", "sp-io/std" ] - diff --git a/primitives/arkworks-curves/bw6_761/LICENSE-APACHE b/primitives/arkworks-curves/bw6_761/LICENSE-APACHE deleted file mode 120000 index 965b606f331b5..0000000000000 --- a/primitives/arkworks-curves/bw6_761/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/bw6_761/LICENSE-MIT b/primitives/arkworks-curves/bw6_761/LICENSE-MIT deleted file mode 120000 index 76219eb72e852..0000000000000 --- a/primitives/arkworks-curves/bw6_761/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs b/primitives/arkworks-curves/bw6_761/src/curves/g1.rs deleted file mode 100644 index 69c9aa8f1427a..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/curves/g1.rs +++ /dev/null @@ -1,123 +0,0 @@ -use ark_ff::{Field, MontFp}; -use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::{Affine, Projective}, -}; -use ark_serialize::{CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::{Fq, Fr}; - -pub type G1Affine = Affine; -pub type G1Projective = Projective; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = - /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194876 - #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ - 0x3de580000000007c, - 0x832ba4061000003b, - 0xc61c554757551c0c, - 0xc856a0853c9db94c, - 0x2c77d5ac34cb12ef, - 0xad1972339049ce76, - ]; - - /// COFACTOR^(-1) mod r = - /// 91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804 - const COFACTOR_INV: Fr = MontFp!("91141326767669940707819291241958318717982251277713150053234367522357946997763584490607453720072232540829942217804"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = -1 - const COEFF_B: Fq = MontFp!("-1"); - - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - #[inline(always)] - fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { - use ark_ff::Zero; - Self::BaseField::zero() - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bw6_761_msm_g1(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bw6_761_mul_projective_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let serialized_result = - sp_io::crypto::bw6_761_mul_affine_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&serialized_result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -/// G1_GENERATOR_X = -/// 6238772257594679368032145693622812838779005809760824733138787810501188623461307351759238099287535516224314149266511977132140828635950940021790489507611754366317801811090811367945064510304504157188661901055903167026722666149426237 -pub const G1_GENERATOR_X: Fq = MontFp!("6238772257594679368032145693622812838779005809760824733138787810501188623461307351759238099287535516224314149266511977132140828635950940021790489507611754366317801811090811367945064510304504157188661901055903167026722666149426237"); - -/// G1_GENERATOR_Y = -/// 2101735126520897423911504562215834951148127555913367997162789335052900271653517958562461315794228241561913734371411178226936527683203879553093934185950470971848972085321797958124416462268292467002957525517188485984766314758624099 -pub const G1_GENERATOR_Y: Fq = MontFp!("2101735126520897423911504562215834951148127555913367997162789335052900271653517958562461315794228241561913734371411178226936527683203879553093934185950470971848972085321797958124416462268292467002957525517188485984766314758624099"); diff --git a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs b/primitives/arkworks-curves/bw6_761/src/curves/g2.rs deleted file mode 100644 index 0f82f2b830b58..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/curves/g2.rs +++ /dev/null @@ -1,124 +0,0 @@ -use ark_ff::{Field, MontFp}; -use ark_models::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - short_weierstrass::{Affine, Projective}, -}; -use ark_serialize::{CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::{Fq, Fr}; - -pub type G2Affine = Affine; -pub type G2Projective = Projective; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = - /// 26642435879335816683987677701488073867751118270052650655942102502312977592501693353047140953112195348280268661194869 - #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ - 0x3de5800000000075, - 0x832ba4061000003b, - 0xc61c554757551c0c, - 0xc856a0853c9db94c, - 0x2c77d5ac34cb12ef, - 0xad1972339049ce76, - ]; - - /// COFACTOR^(-1) mod r = - /// 214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124 - const COFACTOR_INV: Fr = MontFp!("214911522365886453591244899095480747723790054550866810551297776298664428889000553861210287833206024638187939842124"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = 4 - const COEFF_B: Fq = MontFp!("4"); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { - use ark_ff::Zero; - Self::BaseField::zero() - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bw6_761_msm_g2(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bw6_761_mul_projective_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let serialized_result = - sp_io::crypto::bw6_761_mul_affine_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&serialized_result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -/// G2_GENERATOR_X = -/// 6445332910596979336035888152774071626898886139774101364933948236926875073754470830732273879639675437155036544153105017729592600560631678554299562762294743927912429096636156401171909259073181112518725201388196280039960074422214428 -pub const G2_GENERATOR_X: Fq = MontFp!("6445332910596979336035888152774071626898886139774101364933948236926875073754470830732273879639675437155036544153105017729592600560631678554299562762294743927912429096636156401171909259073181112518725201388196280039960074422214428"); - -/// G2_GENERATOR_Y = -/// 562923658089539719386922163444547387757586534741080263946953401595155211934630598999300396317104182598044793758153214972605680357108252243146746187917218885078195819486220416605630144001533548163105316661692978285266378674355041 -pub const G2_GENERATOR_Y: Fq = MontFp!("562923658089539719386922163444547387757586534741080263946953401595155211934630598999300396317104182598044793758153214972605680357108252243146746187917218885078195819486220416605630144001533548163105316661692978285266378674355041"); diff --git a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs b/primitives/arkworks-curves/bw6_761/src/curves/mod.rs deleted file mode 100644 index f4bfd7aaeb97c..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/curves/mod.rs +++ /dev/null @@ -1,104 +0,0 @@ -use ark_ff::{biginteger::BigInteger768 as BigInteger, BigInt}; -use ark_models::{ - bw6, - bw6::{BW6Config, G1Prepared, G2Prepared, TwistType, BW6}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::*; - -pub mod g1; -pub mod g2; - -#[cfg(test)] -mod tests; - -#[derive(PartialEq, Eq)] -pub struct Config; - -impl BW6Config for Config { - const X: BigInteger = - BigInt::new([0x8508c00000000001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); - /// `x` is positive. - const X_IS_NEGATIVE: bool = false; - // X+1 - const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000002]; - const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = false; - // X^3-X^2-X - const ATE_LOOP_COUNT_2: &'static [i8] = &[ - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, - 1, 0, 0, 0, -1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 1, - 0, -1, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, - ]; - const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; - const TWIST_TYPE: TwistType = TwistType::M; - type Fp = Fq; - type Fp3Config = Fq3Config; - type Fp6Config = Fq6Config; - type G1Config = g1::Config; - type G2Config = g2::Config; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - let a: Vec> = a - .into_iter() - .map(|elem| { - let elem: as Pairing>::G1Prepared = elem.into(); - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let b = b - .into_iter() - .map(|elem| { - let elem: as Pairing>::G2Prepared = elem.into(); - let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - - let res = sp_io::crypto::bw6_761_multi_miller_loop(a, b); - let cursor = Cursor::new(&res[..]); - let f = as Pairing>::TargetField::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - MillerLoopOutput(f) - } - - fn final_exponentiation(f: MillerLoopOutput>) -> Option>> { - let mut out: [u8; 576] = [0; 576]; - let mut cursor = Cursor::new(&mut out[..]); - f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let res = sp_io::crypto::bw6_761_final_exponentiation(&out); - - let cursor = Cursor::new(&res[..]); - let res = - PairingOutput::>::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); - - Some(res) - } -} - -pub type BW6_761 = BW6; - -pub type G1Affine = bw6::G1Affine; -pub type G1Projective = bw6::G1Projective; -pub type G2Affine = bw6::G2Affine; -pub type G2Projective = bw6::G2Projective; diff --git a/primitives/arkworks-curves/bw6_761/src/curves/tests.rs b/primitives/arkworks-curves/bw6_761/src/curves/tests.rs deleted file mode 100644 index 1a8d4ed20694b..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/curves/tests.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::*; -use ark_algebra_test_templates::*; -use ark_ff::Field; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; crate::BW6_761); diff --git a/primitives/arkworks-curves/bw6_761/src/lib.rs b/primitives/arkworks-curves/bw6_761/src/lib.rs deleted file mode 100755 index 13e7f36990b8a..0000000000000 --- a/primitives/arkworks-curves/bw6_761/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements the BW6_761 curve generated in [\[EG20\]](https://eprint.iacr.org/2020/351). -//! The name denotes that it is a curve generated using the Brezing--Weng -//! method, and that its embedding degree is 6. -//! The main feature of this curve is that the scalar field equals the base -//! field of the BLS12_377 curve. -//! -//! Curve information: -//! * Base field: q = 6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299 -//! * Scalar field: r = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 -//! * valuation(q - 1, 2) = 1 -//! * valuation(r - 1, 2) = 46 -//! -//! G1 curve equation: y^2 = x^3 + ax + b, where -//! * a = 0, -//! * b = -1, -//! -//! G2 curve equation: y^2 = x^3 + Ax + B -//! * A = 0 -//! * B = 4 - -mod curves; - -pub use ark_bw6_761::{fq, fq3, fq6, fr, Fq, Fq3Config, Fq6Config, Fr}; -pub use curves::*; diff --git a/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml b/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml deleted file mode 100644 index c411d170cf0e3..0000000000000 --- a/primitives/arkworks-curves/curve-constraint-tests/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "ark-curve-constraint-tests" -version = "0.4.0-alpha.1" -authors = [ "arkworks contributors" ] -description = "A library for testing constraints for finite fields, elliptic curves, and pairings" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/curves" -documentation = "https://docs.rs/ark-curve-constraint-tests/" -keywords = ["cryptography", "finite-fields", "elliptic-curves", "r1cs" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-relations = { version = "0.4.0-alpha", default-features = false } -ark-r1cs-std = { version = "0.4.0-alpha", default-features = false } -ark-ec = { version = "0.4.0-alpha", default-features = false } - -[features] -default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-relations/std", "ark-r1cs-std/std" ] diff --git a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE deleted file mode 120000 index 965b606f331b5..0000000000000 --- a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT b/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT deleted file mode 120000 index 76219eb72e852..0000000000000 --- a/primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs b/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs deleted file mode 100644 index 56d2169c528ec..0000000000000 --- a/primitives/arkworks-curves/curve-constraint-tests/src/lib.rs +++ /dev/null @@ -1,580 +0,0 @@ -#![macro_use] -extern crate ark_relations; - -pub mod fields { - use ark_ff::{BitIteratorLE, Field, PrimeField, UniformRand}; - use ark_r1cs_std::prelude::*; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec}; - - pub fn field_test() -> Result<(), SynthesisError> - where - F: Field, - ConstraintF: PrimeField, - AF: FieldVar, - AF: TwoBitLookupGadget, - for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, - { - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - - let mut rng = test_rng(); - let a_native = F::rand(&mut rng); - let b_native = F::rand(&mut rng); - let a = AF::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode)?; - let b = AF::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode)?; - let b_const = AF::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; - - let zero = AF::zero(); - let zero_native = zero.value()?; - zero.enforce_equal(&zero)?; - - let one = AF::one(); - let one_native = one.value()?; - one.enforce_equal(&one)?; - - one.enforce_not_equal(&zero)?; - - let one_dup = &zero + &one; - one_dup.enforce_equal(&one)?; - - let two = &one + &one; - two.enforce_equal(&two)?; - two.enforce_equal(&one.double()?)?; - two.enforce_not_equal(&one)?; - two.enforce_not_equal(&zero)?; - - // a + 0 = a - let a_plus_zero = &a + &zero; - assert_eq!(a_plus_zero.value()?, a_native); - a_plus_zero.enforce_equal(&a)?; - a_plus_zero.enforce_not_equal(&a.double()?)?; - - // a - 0 = a - let a_minus_zero = &a - &zero; - assert_eq!(a_minus_zero.value()?, a_native); - a_minus_zero.enforce_equal(&a)?; - - // a - a = 0 - let a_minus_a = &a - &a; - assert_eq!(a_minus_a.value()?, zero_native); - a_minus_a.enforce_equal(&zero)?; - - // a + b = b + a - let a_b = &a + &b; - let b_a = &b + &a; - assert_eq!(a_b.value()?, a_native + &b_native); - a_b.enforce_equal(&b_a)?; - - // (a + b) + a = a + (b + a) - let ab_a = &a_b + &a; - let a_ba = &a + &b_a; - assert_eq!(ab_a.value()?, a_native + &b_native + &a_native); - ab_a.enforce_equal(&a_ba)?; - - let b_times_a_plus_b = &a_b * &b; - let b_times_b_plus_a = &b_a * &b; - assert_eq!(b_times_a_plus_b.value()?, b_native * &(b_native + &a_native)); - assert_eq!(b_times_a_plus_b.value()?, (b_native + &a_native) * &b_native); - assert_eq!(b_times_a_plus_b.value()?, (a_native + &b_native) * &b_native); - b_times_b_plus_a.enforce_equal(&b_times_a_plus_b)?; - - // a * 1 = a - assert_eq!((&a * &one).value()?, a_native * &one_native); - - // a * b = b * a - let ab = &a * &b; - let ba = &b * &a; - assert_eq!(ab.value()?, ba.value()?); - assert_eq!(ab.value()?, a_native * &b_native); - - let ab_const = &a * &b_const; - let b_const_a = &b_const * &a; - assert_eq!(ab_const.value()?, b_const_a.value()?); - assert_eq!(ab_const.value()?, ab.value()?); - assert_eq!(ab_const.value()?, a_native * &b_native); - - // (a * b) * a = a * (b * a) - let ab_a = &ab * &a; - let a_ba = &a * &ba; - assert_eq!(ab_a.value()?, a_ba.value()?); - assert_eq!(ab_a.value()?, a_native * &b_native * &a_native); - - let aa = &a * &a; - let a_squared = a.square()?; - a_squared.enforce_equal(&aa)?; - assert_eq!(aa.value()?, a_squared.value()?); - assert_eq!(aa.value()?, a_native.square()); - - let aa = &a * a_native; - a_squared.enforce_equal(&aa)?; - assert_eq!(aa.value()?, a_squared.value()?); - assert_eq!(aa.value()?, a_native.square()); - - let a_b2 = &a + b_native; - a_b.enforce_equal(&a_b2)?; - assert_eq!(a_b.value()?, a_b2.value()?); - - let a_inv = a.inverse()?; - a_inv.mul_equals(&a, &one)?; - assert_eq!(a_inv.value()?, a.value()?.inverse().unwrap()); - assert_eq!(a_inv.value()?, a_native.inverse().unwrap()); - - let a_b_inv = a.mul_by_inverse(&b)?; - a_b_inv.mul_equals(&b, &a)?; - assert_eq!(a_b_inv.value()?, a_native * b_native.inverse().unwrap()); - - // a * a * a = a^3 - let bits = BitIteratorLE::without_trailing_zeros([3u64]) - .map(Boolean::constant) - .collect::>(); - assert_eq!(a_native.pow([0x3]), a.pow_le(&bits)?.value()?); - - // a * a * a = a^3 - assert_eq!(a_native.pow([0x3]), a.pow_by_constant(&[0x3])?.value()?); - assert!(cs.is_satisfied().unwrap()); - - let mut constants = [F::zero(); 4]; - for c in &mut constants { - *c = UniformRand::rand(&mut test_rng()); - } - let bits = [Boolean::::constant(false), Boolean::constant(true)]; - let lookup_result = AF::two_bit_lookup(&bits, constants.as_ref())?; - assert_eq!(lookup_result.value()?, constants[2]); - assert!(cs.is_satisfied().unwrap()); - - let f = F::from(1u128 << 64); - let f_bits = ark_ff::BitIteratorLE::new(&[0u64, 1u64]).collect::>(); - let fv = AF::new_variable(ark_relations::ns!(cs, "alloc u128"), || Ok(f), mode)?; - assert_eq!(fv.to_bits_le()?.value().unwrap()[..128], f_bits[..128]); - assert!(cs.is_satisfied().unwrap()); - - let r_native: F = UniformRand::rand(&mut test_rng()); - - let r = AF::new_variable(ark_relations::ns!(cs, "r_native"), || Ok(r_native), mode) - .unwrap(); - let _ = r.to_non_unique_bits_le()?; - assert!(cs.is_satisfied().unwrap()); - let _ = r.to_bits_le()?; - assert!(cs.is_satisfied().unwrap()); - - let ab_false = &a + (AF::from(Boolean::Constant(false)) * b_native); - let ab_true = &a + (AF::from(Boolean::Constant(true)) * b_native); - assert_eq!(ab_false.value()?, a_native); - assert_eq!(ab_true.value()?, a_native + &b_native); - - if !cs.is_satisfied().unwrap() { - panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); - } - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn frobenius_tests(maxpower: usize) -> Result<(), SynthesisError> - where - F: Field, - ConstraintF: Field, - AF: FieldVar, - for<'a> &'a AF: FieldOpsBounds<'a, F, AF>, - { - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - let mut rng = test_rng(); - for i in 0..=maxpower { - let a = F::rand(&mut rng); - let mut a_gadget = AF::new_variable(ark_relations::ns!(cs, "a"), || Ok(a), mode)?; - a_gadget.frobenius_map_in_place(i)?; - let _ = a.frobenius_map(i); - - assert_eq!(a_gadget.value()?, a); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } -} - -pub mod curves { - use ark_ec::{ - short_weierstrass::Projective as SWProjective, twisted_edwards::Projective as TEProjective, - CurveGroup, Group, - }; - use ark_ff::{BitIteratorLE, Field, One, PrimeField}; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec, UniformRand}; - - use ark_r1cs_std::prelude::*; - - pub fn group_test() -> Result<(), SynthesisError> - where - C: CurveGroup, - ConstraintF: Field, - GG: CurveVar, - for<'a> &'a GG: GroupOpsBounds<'a, C, GG>, - { - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let cs = ConstraintSystem::::new_ref(); - - let mut rng = test_rng(); - let a_native = C::rand(&mut rng); - let b_native = C::rand(&mut rng); - let a = GG::new_variable(ark_relations::ns!(cs, "generate_a"), || Ok(a_native), mode) - .unwrap(); - let b = GG::new_variable(ark_relations::ns!(cs, "generate_b"), || Ok(b_native), mode) - .unwrap(); - - let zero = GG::zero(); - assert_eq!(zero.value()?, zero.value()?); - - // a == a - assert_eq!(a.value()?, a.value()?); - // a + 0 = a - assert_eq!((&a + &zero).value()?, a.value()?); - // a - 0 = a - assert_eq!((&a - &zero).value()?, a.value()?); - // a - a = 0 - assert_eq!((&a - &a).value()?, zero.value()?); - // a + b = b + a - let a_b = &a + &b; - let b_a = &b + &a; - assert_eq!(a_b.value()?, b_a.value()?); - a_b.enforce_equal(&b_a)?; - assert!(cs.is_satisfied().unwrap()); - - // (a + b) + a = a + (b + a) - let ab_a = &a_b + &a; - let a_ba = &a + &b_a; - assert_eq!(ab_a.value()?, a_ba.value()?); - ab_a.enforce_equal(&a_ba)?; - assert!(cs.is_satisfied().unwrap()); - - // a.double() = a + a - let a_a = &a + &a; - let mut a2 = a.clone(); - a2.double_in_place()?; - a2.enforce_equal(&a_a)?; - assert_eq!(a2.value()?, a_native.double()); - assert_eq!(a_a.value()?, a_native.double()); - assert_eq!(a2.value()?, a_a.value()?); - assert!(cs.is_satisfied().unwrap()); - - // b.double() = b + b - let mut b2 = b.clone(); - b2.double_in_place()?; - let b_b = &b + &b; - b2.enforce_equal(&b_b)?; - assert!(cs.is_satisfied().unwrap()); - assert_eq!(b2.value()?, b_b.value()?); - - let _ = a.to_bytes()?; - assert!(cs.is_satisfied().unwrap()); - let _ = a.to_non_unique_bytes()?; - assert!(cs.is_satisfied().unwrap()); - - let _ = b.to_bytes()?; - let _ = b.to_non_unique_bytes()?; - if !cs.is_satisfied().unwrap() { - panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); - } - assert!(cs.is_satisfied().unwrap()); - - let modulus = ::MODULUS.as_ref().to_vec(); - let mut max = modulus.clone(); - for limb in &mut max { - *limb = u64::MAX; - } - - let modulus_num_bits_mod_64 = ::MODULUS_BIT_SIZE % 64; - if modulus_num_bits_mod_64 != 0 { - *max.last_mut().unwrap() >>= 64 - modulus_num_bits_mod_64; - } - let scalars = [ - C::ScalarField::rand(&mut rng).into_bigint().as_ref().to_vec(), - vec![u64::rand(&mut rng)], - (-C::ScalarField::one()).into_bigint().as_ref().to_vec(), - ::MODULUS.as_ref().to_vec(), - max, - vec![0; 50], - vec![1000012341233u64; 36], - ]; - - let mut input = vec![]; - - // Check scalar mul with edge cases - for scalar in scalars.iter() { - let native_result = a_native.mul_bigint(scalar); - let native_result = native_result.into_affine(); - - let scalar_bits: Vec = BitIteratorLE::new(&scalar).collect(); - input = - Vec::new_witness(ark_relations::ns!(cs, "bits"), || Ok(scalar_bits)).unwrap(); - let result = a.scalar_mul_le(input.iter()).expect(&format!("Mode: {:?}", mode)); - let result_val = result.value()?.into_affine(); - assert_eq!( - result_val, native_result, - "gadget & native values are diff. after scalar mul {:?}", - scalar, - ); - assert!(cs.is_satisfied().unwrap()); - } - - let result = zero.scalar_mul_le(input.iter())?; - let result_val = result.value()?.into_affine(); - result.enforce_equal(&zero)?; - assert_eq!( - result_val, - C::zero().into_affine(), - "gadget & native values are diff. after scalar mul of zero" - ); - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn sw_test() -> Result<(), SynthesisError> - where - P: ark_ec::models::short_weierstrass::SWCurveConfig, - GG: CurveVar, ::BasePrimeField>, - for<'a> &'a GG: GroupOpsBounds<'a, SWProjective

, GG>, - { - group_test::, _, GG>()?; - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let mut rng = test_rng(); - - let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); - - let a = SWProjective::

::rand(&mut rng); - let b = SWProjective::

::rand(&mut rng); - let a_affine = a.into_affine(); - let b_affine = b.into_affine(); - - let ns = ark_relations::ns!(cs, "allocating variables"); - let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; - let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; - let zero = GG::zero(); - drop(ns); - assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); - assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); - assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); - assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); - assert_eq!(cs.which_is_unsatisfied().unwrap(), None); - - // Check addition - let ab = a + &b; - let ab_affine = ab.into_affine(); - let gadget_ab = &gadget_a + &gadget_b; - let gadget_ba = &gadget_b + &gadget_a; - gadget_ba.enforce_equal(&gadget_ab)?; - - let ab_val = gadget_ab.value()?.into_affine(); - assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); - assert!(cs.is_satisfied().unwrap()); - - let gadget_a_zero = &gadget_a + &zero; - gadget_a_zero.enforce_equal(&gadget_a)?; - - // Check doubling - let aa = &a.double(); - let aa_affine = aa.into_affine(); - gadget_a.double_in_place()?; - let aa_val = gadget_a.value()?.into_affine(); - assert_eq!(aa_val, aa_affine, "Gadget and native values are unequal after double."); - assert!(cs.is_satisfied().unwrap()); - - if !cs.is_satisfied().unwrap() { - panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } - - pub fn te_test() -> Result<(), SynthesisError> - where - P: ark_ec::twisted_edwards::TECurveConfig, - GG: CurveVar, ::BasePrimeField>, - for<'a> &'a GG: GroupOpsBounds<'a, TEProjective

, GG>, - { - group_test::, _, GG>()?; - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let mut rng = test_rng(); - - let cs = ConstraintSystem::<::BasePrimeField>::new_ref(); - - let a = TEProjective::

::rand(&mut rng); - let b = TEProjective::

::rand(&mut rng); - let a_affine = a.into_affine(); - let b_affine = b.into_affine(); - - let ns = ark_relations::ns!(cs, "allocating variables"); - let mut gadget_a = GG::new_variable(cs.clone(), || Ok(a), mode)?; - let gadget_b = GG::new_variable(cs.clone(), || Ok(b), mode)?; - drop(ns); - - assert_eq!(gadget_a.value()?.into_affine().x, a_affine.x); - assert_eq!(gadget_a.value()?.into_affine().y, a_affine.y); - assert_eq!(gadget_b.value()?.into_affine().x, b_affine.x); - assert_eq!(gadget_b.value()?.into_affine().y, b_affine.y); - assert_eq!(cs.which_is_unsatisfied()?, None); - - // Check addition - let ab = a + &b; - let ab_affine = ab.into_affine(); - let gadget_ab = &gadget_a + &gadget_b; - let gadget_ba = &gadget_b + &gadget_a; - gadget_ba.enforce_equal(&gadget_ab)?; - - let ab_val = gadget_ab.value()?.into_affine(); - assert_eq!(ab_val, ab_affine, "Result of addition is unequal"); - assert!(cs.is_satisfied().unwrap()); - - // Check doubling - let aa = &a.double(); - let aa_affine = aa.into_affine(); - gadget_a.double_in_place()?; - let aa_val = gadget_a.value()?.into_affine(); - assert_eq!(aa_val, aa_affine, "Gadget and native values are unequal after double."); - assert!(cs.is_satisfied().unwrap()); - - if !cs.is_satisfied().unwrap() { - panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); - } - - assert!(cs.is_satisfied().unwrap()); - } - Ok(()) - } -} - -pub mod pairing { - use ark_ec::{ - pairing::{Pairing, PairingOutput}, - AffineRepr, CurveGroup, - }; - use ark_ff::{BitIteratorLE, Field, PrimeField}; - use ark_r1cs_std::prelude::*; - use ark_relations::r1cs::{ConstraintSystem, SynthesisError}; - use ark_std::{test_rng, vec::Vec, UniformRand}; - - #[allow(dead_code)] - pub fn bilinearity_test>() -> Result<(), SynthesisError> - where - for<'a> &'a P::G1Var: GroupOpsBounds<'a, E::G1, P::G1Var>, - for<'a> &'a P::G2Var: GroupOpsBounds<'a, E::G2, P::G2Var>, - for<'a> &'a P::GTVar: FieldOpsBounds<'a, E::TargetField, P::GTVar>, - { - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let cs = ConstraintSystem::<::BaseField>::new_ref(); - - let mut rng = test_rng(); - let a = E::G1::rand(&mut rng); - let b = E::G2::rand(&mut rng); - let s = E::ScalarField::rand(&mut rng); - - let mut sa = a; - sa *= s; - let mut sb = b; - sb *= s; - - let a_g = P::G1Var::new_variable(cs.clone(), || Ok(a.into_affine()), mode)?; - let b_g = P::G2Var::new_variable(cs.clone(), || Ok(b.into_affine()), mode)?; - let sa_g = P::G1Var::new_variable(cs.clone(), || Ok(sa.into_affine()), mode)?; - let sb_g = P::G2Var::new_variable(cs.clone(), || Ok(sb.into_affine()), mode)?; - - let mut _preparation_num_constraints = cs.num_constraints(); - let a_prep_g = P::prepare_g1(&a_g)?; - let b_prep_g = P::prepare_g2(&b_g)?; - _preparation_num_constraints = cs.num_constraints() - _preparation_num_constraints; - - let sa_prep_g = P::prepare_g1(&sa_g)?; - let sb_prep_g = P::prepare_g2(&sb_g)?; - - let (ans1_g, ans1_n) = { - let _ml_constraints = cs.num_constraints(); - let ml_g = P::miller_loop(&[sa_prep_g], &[b_prep_g.clone()])?; - let _fe_constraints = cs.num_constraints(); - let ans_g = P::final_exponentiation(&ml_g)?; - let ans_n = E::pairing(sa, b); - (ans_g, ans_n) - }; - - let (ans2_g, ans2_n) = { - let ans_g = P::pairing(a_prep_g.clone(), sb_prep_g)?; - let ans_n = E::pairing(a, sb); - (ans_g, ans_n) - }; - - let (ans3_g, ans3_n) = { - let s_iter = BitIteratorLE::without_trailing_zeros(s.into_bigint()) - .map(Boolean::constant) - .collect::>(); - - let mut ans_g = P::pairing(a_prep_g, b_prep_g)?; - let mut ans_n = E::pairing(a, b); - ans_n = PairingOutput(ans_n.0.pow(s.into_bigint())); - ans_g = ans_g.pow_le(&s_iter)?; - - (ans_g, ans_n) - }; - - ans1_g.enforce_equal(&ans2_g)?; - ans2_g.enforce_equal(&ans3_g)?; - - assert_eq!(ans1_g.value()?, ans1_n.0, "Failed native test 1"); - assert_eq!(ans2_g.value()?, ans2_n.0, "Failed native test 2"); - assert_eq!(ans3_g.value()?, ans3_n.0, "Failed native test 3"); - - assert_eq!(ans1_n.0, ans2_n.0, "Failed ans1_native == ans2_native"); - assert_eq!(ans2_n.0, ans3_n.0, "Failed ans2_native == ans3_native"); - assert_eq!(ans1_g.value()?, ans3_g.value()?, "Failed ans1 == ans3"); - assert_eq!(ans1_g.value()?, ans2_g.value()?, "Failed ans1 == ans2"); - assert_eq!(ans2_g.value()?, ans3_g.value()?, "Failed ans2 == ans3"); - - if !cs.is_satisfied().unwrap() { - panic!("Unsatisfied in mode {:?}.\n{:?}", mode, cs.which_is_unsatisfied().unwrap()); - } - - assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); - } - Ok(()) - } - - #[allow(dead_code)] - pub fn g2_prepare_consistency_test>() -> Result<(), SynthesisError> - { - let test_g2_elem = E::G2Affine::generator(); - let test_g2_prepared = E::G2Prepared::from(test_g2_elem.clone()); - - let modes = [AllocationMode::Input, AllocationMode::Witness, AllocationMode::Constant]; - for &mode in &modes { - let cs = ConstraintSystem::new_ref(); - - let test_g2_gadget = - P::G2Var::new_witness(cs.clone(), || Ok(test_g2_elem.clone())).unwrap(); - - let prepared_test_g2_gadget = P::prepare_g2(&test_g2_gadget).unwrap(); - let allocated_test_g2_gadget = - P::G2PreparedVar::new_variable(cs.clone(), || Ok(test_g2_prepared.clone()), mode) - .unwrap(); - - let prepared_test_g2_gadget_bytes = prepared_test_g2_gadget.to_bytes().unwrap(); - let allocated_test_g2_gadget_bytes = allocated_test_g2_gadget.to_bytes().unwrap(); - - prepared_test_g2_gadget_bytes - .enforce_equal(&allocated_test_g2_gadget_bytes) - .unwrap(); - - assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); - } - Ok(()) - } -} diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml deleted file mode 100644 index 61f908d4824bf..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "sp-ark-ed-on-bls12-377" -version = "0.4.0-alpha.1" -authors = [ "achimcc, arkworks contributors" ] -repository = "https://github.com/paritytech/substrate/" -description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve, optimized for Substrate" -keywords = ["cryptography", "finite-fields", "elliptic-curves" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } -sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } -ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } - -[dev-dependencies] -ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } - -[features] -default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std", "ark-ed-on-bls12-377/std", "ark-models/std", "sp-io/std" ] -r1cs = [ "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE deleted file mode 120000 index 965b606f331b5..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT b/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT deleted file mode 120000 index 76219eb72e852..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage b/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage deleted file mode 100644 index a4d06f0891f59..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 8444461749428370424248824938781546531375899335154063827935233455917409239041 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 30): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage b/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage deleted file mode 100644 index 7810c056030ad..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 2111115437357092606062206234695386632838870926408408195193685246394721360383 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 30): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs deleted file mode 100644 index fffc1a3c3a94c..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs +++ /dev/null @@ -1,11 +0,0 @@ -use ark_r1cs_std::groups::curves::twisted_edwards::AffineVar; - -use crate::{constraints::FqVar, *}; - -/// A variable that is the R1CS equivalent of `crate::EdwardsAffine`. -pub type EdwardsVar = AffineVar; - -#[test] -fn test() { - ark_curve_constraint_tests::curves::te_test::().unwrap(); -} diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs deleted file mode 100644 index aa806e3d365d6..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs +++ /dev/null @@ -1,11 +0,0 @@ -use ark_r1cs_std::fields::fp::FpVar; - -use crate::fq::Fq; - -/// A variable that is the R1CS equivalent of `crate::Fq`. -pub type FqVar = FpVar; - -#[test] -fn test() { - ark_curve_constraint_tests::fields::field_test::<_, _, FqVar>().unwrap(); -} diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs deleted file mode 100644 index 26890595b8242..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs +++ /dev/null @@ -1,107 +0,0 @@ -//! This module implements the R1CS equivalent of `ark_ed_on_bls12_377`. -//! -//! It implements field variables for `crate::Fq`, -//! and group variables for `crate::Projective`. -//! -//! The field underlying these constraints is `crate::Fq`. -//! -//! # Examples -//! -//! One can perform standard algebraic operations on `FqVar`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! use ark_std::UniformRand; -//! use ark_relations::r1cs::*; -//! use ark_r1cs_std::prelude::*; -//! use ark_ed_on_bls12_377::{*, constraints::*}; -//! -//! let cs = ConstraintSystem::::new_ref(); -//! // This rng is just for test purposes; do not use it -//! // in real applications. -//! let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `Fq` elements. -//! let a_native = Fq::rand(&mut rng); -//! let b_native = Fq::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; -//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! let one = FqVar::one(); -//! let zero = FqVar::zero(); -//! -//! // Sanity check one + one = two -//! let two = &one + &one + &zero; -//! two.enforce_equal(&one.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that the value of &a * &b is correct. -//! assert_eq!((&a * &b).value()?, a_native * &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` -//! -//! One can also perform standard algebraic operations on `EdwardsVar`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! # use ark_std::UniformRand; -//! # use ark_relations::r1cs::*; -//! # use ark_r1cs_std::prelude::*; -//! # use ark_ed_on_bls12_377::{*, constraints::*}; -//! -//! # let cs = ConstraintSystem::::new_ref(); -//! # let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `Edwards` elements. -//! let a_native = EdwardsProjective::rand(&mut rng); -//! let b_native = EdwardsProjective::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = EdwardsVar::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; -//! let b = EdwardsVar::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = EdwardsVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! // This returns the identity. -//! let zero = EdwardsVar::zero(); -//! -//! // Sanity check one + one = two -//! let two_a = &a + &a + &zero; -//! two_a.enforce_equal(&a.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` - -mod curves; -mod fields; - -pub use curves::*; -pub use fields::*; diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs deleted file mode 100644 index 3e13bbccabaeb..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs +++ /dev/null @@ -1,140 +0,0 @@ -use ark_ff::MontFp; -use ark_models::{ - models::CurveConfig, - twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::{fq::Fq, fr::Fr}; - -#[cfg(test)] -mod tests; - -pub type EdwardsAffine = Affine; -pub type EdwardsProjective = Projective; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct EdwardsConfig; - -impl CurveConfig for EdwardsConfig { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = 4 - const COFACTOR: &'static [u64] = &[4]; - - /// COFACTOR_INV = - /// 527778859339273151515551558673846658209717731602102048798421311598680340096 - const COFACTOR_INV: Fr = - MontFp!("527778859339273151515551558673846658209717731602102048798421311598680340096"); -} - -impl TECurveConfig for EdwardsConfig { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); - - /// COEFF_D = 3021 - const COEFF_D: Fq = MontFp!("3021"); - - /// Generated randomly - const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); - - type MontCurveConfig = EdwardsConfig; - - /// Multiplication by `a` is just negation. - /// Is `a` 1 or -1? - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - -elem - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::ed_on_bls12_377_msm(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = - sp_io::crypto::ed_on_bls12_377_mul_projective(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::ed_on_bls12_377_mul_affine(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -impl MontCurveConfig for EdwardsConfig { - /// COEFF_A = 0x8D26E3FADA9010A26949031ECE3971B93952AD84D4753DDEDB748DA37E8F552 - /// = 3990301581132929505568273333084066329187552697088022219156688740916631500114 - const COEFF_A: Fq = - MontFp!("3990301581132929505568273333084066329187552697088022219156688740916631500114"); - - /// COEFF_B = 0x9D8F71EEC83A44C3A1FBCEC6F5418E5C6154C2682B8AC231C5A3725C8170AAD - /// = 4454160168295440918680551605697480202188346638066041608778544715000777738925 - const COEFF_B: Fq = - MontFp!("4454160168295440918680551605697480202188346638066041608778544715000777738925"); - - type TECurveConfig = EdwardsConfig; -} - -/// GENERATOR_X = -/// 4497879464030519973909970603271755437257548612157028181994697785683032656389, -const GENERATOR_X: Fq = - MontFp!("4497879464030519973909970603271755437257548612157028181994697785683032656389"); - -/// GENERATOR_Y = -/// 4357141146396347889246900916607623952598927460421559113092863576544024487809 -const GENERATOR_Y: Fq = - MontFp!("4357141146396347889246900916607623952598927460421559113092863576544024487809"); diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs deleted file mode 100644 index 7b1ea09555ffb..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs +++ /dev/null @@ -1,4 +0,0 @@ -use crate::*; -use ark_algebra_test_templates::*; - -test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs deleted file mode 100755 index 706a361b5f142..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements a twisted Edwards curve whose base field is the -//! scalar field of the curve BLS12-377. This allows defining cryptographic -//! primitives that use elliptic curves over the scalar field of the latter -//! curve. This curve was generated as part of the paper [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). -//! -//! Curve information: -//! * Base field: q = 8444461749428370424248824938781546531375899335154063827935233455917409239041 -//! * Scalar field: r = 2111115437357092606062206234695386632838870926408408195193685246394721360383 -//! * Valuation(q - 1, 2) = 47 -//! * Valuation(r - 1, 2) = 1 -//! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where -//! * a = -1 -//! * d = 3021 - -#[cfg(feature = "r1cs")] -pub use ark_ed_on_bls12_377::constraints::*; -mod curves; - -pub use ark_ed_on_bls12_377::{fq, fr, Fq, FqConfig, Fr, FrConfig}; -pub use curves::*; diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml deleted file mode 100644 index 928e1d3ce197f..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "sp-ark-ed-on-bls12-381" -version = "0.4.0-alpha.1" -authors = [ "achimcc, arkworks contributors" ] -repository = "https://github.com/paritytech/substrate/" -description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve, optimized for Substrate" -keywords = ["cryptography", "finite-fields", "elliptic-curves" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } -ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } - -[dev-dependencies] -ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } - -[features] -default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std", "ark-ed-on-bls12-381/std", "ark-models/std", "sp-io/std" ] -r1cs = ["ark-r1cs-std"] \ No newline at end of file diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs deleted file mode 100644 index 9343f3597e3f1..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs +++ /dev/null @@ -1,264 +0,0 @@ -use ark_ff::MontFp; -use ark_models::{ - models::CurveConfig, - short_weierstrass::{self, SWCurveConfig}, - twisted_edwards::{Affine, MontCurveConfig, Projective, TECurveConfig}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::{Fq, Fr}; - -#[cfg(test)] -mod tests; - -pub type EdwardsAffine = Affine; -pub type EdwardsProjective = Projective; -pub type SWAffine = short_weierstrass::Affine; -pub type SWProjective = short_weierstrass::Projective; - -/// `JubJub` is a twisted Edwards curve. These curves have equations of the -/// form: ax² + y² = 1 - dx²y². -/// over some base finite field Fq. -/// -/// JubJub's curve equation: -x² + y² = 1 - (10240/10241)x²y² -/// -/// q = 52435875175126190479447740508185965837690552500527637822603658699938581184513. -/// -/// a = -1. -/// d = -(10240/10241) mod q -/// = 19257038036680949359750312669786877991949435402254120286184196891950884077233. -/// -/// Sage script to calculate these: -/// -/// ```text -/// q = 52435875175126190479447740508185965837690552500527637822603658699938581184513 -/// Fq = GF(q) -/// d = -(Fq(10240)/Fq(10241)) -/// ``` -/// These parameters and the sage script obtained from: -/// -/// -/// -/// `jubjub` also has a short Weierstrass curve form, following the -/// form: y² = x³ + A * x + B -/// where -/// -/// A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 -/// B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 -/// -/// We can use the script available -/// [here](https://github.com/zhenfeizhang/bandersnatch/blob/main/bandersnatch/script/jubjub.sage) -/// to convert between the different representations. -#[derive(Clone, Default, PartialEq, Eq)] -pub struct JubjubConfig; -pub type EdwardsConfig = JubjubConfig; -pub type SWConfig = JubjubConfig; - -impl CurveConfig for JubjubConfig { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = 8 - const COFACTOR: &'static [u64] = &[8]; - - /// COFACTOR^(-1) mod r = - /// 819310549611346726241370945440405716213240158234039660170669895299022906775 - const COFACTOR_INV: Fr = - MontFp!("819310549611346726241370945440405716213240158234039660170669895299022906775"); -} - -impl TECurveConfig for JubjubConfig { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); - - /// COEFF_D = -(10240/10241) mod q - const COEFF_D: Fq = - MontFp!("19257038036680949359750312669786877991949435402254120286184196891950884077233"); - - /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) - const GENERATOR: EdwardsAffine = EdwardsAffine::new_unchecked(GENERATOR_X, GENERATOR_Y); - - type MontCurveConfig = JubjubConfig; - - /// Multiplication by `a` is simply negation here. - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - -elem - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = ::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = - sp_io::crypto::ed_on_bls12_381_te_mul_projective(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = - sp_io::crypto::ed_on_bls12_381_te_mul_affine(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - Projective::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -impl MontCurveConfig for JubjubConfig { - /// COEFF_A = 40962 - const COEFF_A: Fq = MontFp!("40962"); - - /// COEFF_B = -40964 - const COEFF_B: Fq = MontFp!("-40964"); - - type TECurveConfig = JubjubConfig; -} - -const GENERATOR_X: Fq = - MontFp!("8076246640662884909881801758704306714034609987455869804520522091855516602923"); - -const GENERATOR_Y: Fq = - MontFp!("13262374693698910701929044844600465831413122818447359594527400194675274060458"); - -impl SWCurveConfig for JubjubConfig { - /// COEFF_A = 52296097456646850916096512823759002727550416093741407922227928430486925478210 - const COEFF_A: Self::BaseField = - MontFp!("52296097456646850916096512823759002727550416093741407922227928430486925478210"); - - /// COEFF_B = 48351165704696163914533707656614864561753505123260775585269522553028192119009 - const COEFF_B: Self::BaseField = - MontFp!("48351165704696163914533707656614864561753505123260775585269522553028192119009"); - - /// generators - const GENERATOR: SWAffine = SWAffine::new_unchecked(SW_GENERATOR_X, SW_GENERATOR_Y); - - fn msm( - bases: &[SWAffine], - scalars: &[::ScalarField], - ) -> Result { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = - SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &SWProjective, scalar: &[u64]) -> SWProjective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &SWAffine, scalar: &[u64]) -> SWProjective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = - sp_io::crypto::ed_on_bls12_381_sw_mul_affine(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - SWProjective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -/// x coordinate for SW curve generator -const SW_GENERATOR_X: Fq = - MontFp!("33835869156188682335217394949746694649676633840125476177319971163079011318731"); - -/// y coordinate for SW curve generator -const SW_GENERATOR_Y: Fq = - MontFp!("43777270878440091394432848052353307184915192688165709016756678962558652055320"); diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs deleted file mode 100644 index 7db74c27dadaa..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::*; -use ark_algebra_test_templates::*; - -test_group!(sw; SWProjective; sw); -test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs b/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs deleted file mode 100644 index 388870f72f08d..0000000000000 --- a/primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements a twisted Edwards curve whose base field is the -//! scalar field of the curve BLS12-381. This allows defining cryptographic -//! primitives that use elliptic curves over the scalar field of the latter -//! curve. This curve was generated by Sean Bowe, and is also known as [Jubjub](https://github.com/zkcrypto/jubjub). -//! -//! Curve information: -//! * Base field: q = 52435875175126190479447740508185965837690552500527637822603658699938581184513 -//! * Scalar field: r = 6554484396890773809930967563523245729705921265872317281365359162392183254199 -//! * Valuation(q - 1, 2) = 32 -//! * Valuation(r - 1, 2) = 1 -//! * Curve equation: ax^2 + y^2 =1 + dx^2y^2, where -//! * a = -1 -//! * d = -(10240/10241) - -#[cfg(feature = "r1cs")] -pub use ark_ed_on_bls12_381::constraints::*; -mod curves; - -pub use ark_ed_on_bls12_381::{Fq, FqConfig, Fr, FrConfig}; -pub use curves::*; diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml deleted file mode 100644 index 20fe05c2fdc0d..0000000000000 --- a/primitives/arkworks-models/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "ark-models" -version = "0.4.0-alpha.5" -authors = [ "arkworks contributors" ] -description = "A library for elliptic curves and pairings" -homepage = "https://arkworks.rs" -repository = "https://github.com/arkworks-rs/algebra" -documentation = "https://docs.rs/ark-ec/" -keywords = ["cryptography", "elliptic-curves", "pairing"] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" -rust-version = "1.57" - -[dependencies] -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-ec = { version = "0.4.0-alpha", default-features = false } -ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-poly = { version = "0.4.0-alpha", default-features = false } -derivative = { version = "2", features = ["use_core"], default-features = false } -num-traits = { version = "0.2", default-features = false } -rayon = { version = "1",default-features = false, optional = true } -zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } -hashbrown = { version = "^0.13.1", default-features = false } -itertools = { version = "0.10", default-features = false } - -[dev-dependencies] - -[features] -default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std" ] diff --git a/primitives/arkworks-models/src/bls12/g1.rs b/primitives/arkworks-models/src/bls12/g1.rs deleted file mode 100644 index db66818d75885..0000000000000 --- a/primitives/arkworks-models/src/bls12/g1.rs +++ /dev/null @@ -1,57 +0,0 @@ -use crate::bls12::Bls12Config; -use ark_ec::{ - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, -}; -use ark_serialize::*; -use ark_std::vec::Vec; - -use derivative::Derivative; - -pub type G1Affine

= Affine<

::G1Config>; -pub type G1Projective

= Projective<

::G1Config>; - -#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] -#[derivative( - Clone(bound = "P: Bls12Config"), - Debug(bound = "P: Bls12Config"), - PartialEq(bound = "P: Bls12Config"), - Eq(bound = "P: Bls12Config") -)] -pub struct G1Prepared(pub G1Affine

); - -impl From> for G1Prepared

{ - fn from(other: G1Affine

) -> Self { - G1Prepared(other) - } -} - -impl From> for G1Prepared

{ - fn from(q: G1Projective

) -> Self { - q.into_affine().into() - } -} - -impl<'a, P: Bls12Config> From<&'a G1Affine

> for G1Prepared

{ - fn from(other: &'a G1Affine

) -> Self { - G1Prepared(*other) - } -} - -impl<'a, P: Bls12Config> From<&'a G1Projective

> for G1Prepared

{ - fn from(q: &'a G1Projective

) -> Self { - q.into_affine().into() - } -} - -impl G1Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.is_zero() - } -} - -impl Default for G1Prepared

{ - fn default() -> Self { - G1Prepared(G1Affine::

::generator()) - } -} diff --git a/primitives/arkworks-models/src/bls12/g2.rs b/primitives/arkworks-models/src/bls12/g2.rs deleted file mode 100644 index b5b55a607a9ff..0000000000000 --- a/primitives/arkworks-models/src/bls12/g2.rs +++ /dev/null @@ -1,56 +0,0 @@ -use crate::bls12::Bls12Config; -use ark_ec::{ - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, -}; -use ark_serialize::*; -use ark_std::vec::Vec; -use derivative::Derivative; - -pub type G2Affine

= Affine<

::G2Config>; -pub type G2Projective

= Projective<

::G2Config>; - -#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] -#[derivative( - Clone(bound = "P: Bls12Config"), - Debug(bound = "P: Bls12Config"), - PartialEq(bound = "P: Bls12Config"), - Eq(bound = "P: Bls12Config") -)] -pub struct G2Prepared(pub G2Affine

); - -impl From> for G2Prepared

{ - fn from(other: G2Affine

) -> Self { - G2Prepared(other) - } -} - -impl From> for G2Prepared

{ - fn from(q: G2Projective

) -> Self { - q.into_affine().into() - } -} - -impl<'a, P: Bls12Config> From<&'a G2Affine

> for G2Prepared

{ - fn from(other: &'a G2Affine

) -> Self { - G2Prepared(*other) - } -} - -impl<'a, P: Bls12Config> From<&'a G2Projective

> for G2Prepared

{ - fn from(q: &'a G2Projective

) -> Self { - q.into_affine().into() - } -} - -impl G2Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.is_zero() - } -} - -impl Default for G2Prepared

{ - fn default() -> Self { - G2Prepared(G2Affine::

::generator()) - } -} diff --git a/primitives/arkworks-models/src/bls12/mod.rs b/primitives/arkworks-models/src/bls12/mod.rs deleted file mode 100644 index 1b6d5ccbb5e4e..0000000000000 --- a/primitives/arkworks-models/src/bls12/mod.rs +++ /dev/null @@ -1,87 +0,0 @@ -use ark_ec::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_ff::{ - fields::{ - fp12_2over3over2::{Fp12, Fp12Config}, - fp2::Fp2Config, - fp6_3over2::Fp6Config, - Fp2, - }, - PrimeField, -}; -use ark_std::marker::PhantomData; -use derivative::Derivative; - -#[cfg(feature = "parallel")] -use rayon::prelude::*; - -/// A particular BLS12 group can have G2 being either a multiplicative or a -/// divisive twist. -pub enum TwistType { - M, - D, -} - -pub trait Bls12Config: 'static + Sized { - /// Parameterizes the BLS12 family. - const X: &'static [u64]; - /// Is `Self::X` negative? - const X_IS_NEGATIVE: bool; - /// What kind of twist is this? - const TWIST_TYPE: TwistType; - - type Fp: PrimeField + Into<::BigInt>; - type Fp2Config: Fp2Config; - type Fp6Config: Fp6Config; - type Fp12Config: Fp12Config; - type G1Config: SWCurveConfig; - type G2Config: SWCurveConfig< - BaseField = Fp2, - ScalarField = ::ScalarField, - >; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput>; - - fn final_exponentiation(f: MillerLoopOutput>) - -> Option>>; -} - -pub mod g1; -pub mod g2; - -pub use self::{ - g1::{G1Affine, G1Prepared, G1Projective}, - g2::{G2Affine, G2Prepared, G2Projective}, -}; - -#[derive(Derivative)] -#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] -pub struct Bls12(PhantomData P>); - -impl Pairing for Bls12

{ - type BaseField = ::BaseField; - type ScalarField = ::ScalarField; - type G1 = G1Projective

; - type G1Affine = G1Affine

; - type G1Prepared = G1Prepared

; - type G2 = G2Projective

; - type G2Affine = G2Affine

; - type G2Prepared = G2Prepared

; - type TargetField = Fp12; - - fn multi_miller_loop( - a: impl IntoIterator>, - b: impl IntoIterator>, - ) -> MillerLoopOutput { - P::multi_miller_loop(a, b) - } - - fn final_exponentiation(f: MillerLoopOutput) -> Option> { - P::final_exponentiation(f) - } -} diff --git a/primitives/arkworks-models/src/bw6/g1.rs b/primitives/arkworks-models/src/bw6/g1.rs deleted file mode 100644 index 768668b2dcd8b..0000000000000 --- a/primitives/arkworks-models/src/bw6/g1.rs +++ /dev/null @@ -1,57 +0,0 @@ -use crate::{ - bw6::BW6Config, - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, -}; -use ark_serialize::*; -use ark_std::vec::Vec; -use derivative::Derivative; - -pub type G1Affine

= Affine<

::G1Config>; -pub type G1Projective

= Projective<

::G1Config>; - -#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] -#[derivative( - Copy(bound = "P: BW6Config"), - Clone(bound = "P: BW6Config"), - Debug(bound = "P: BW6Config"), - PartialEq(bound = "P: BW6Config"), - Eq(bound = "P: BW6Config") -)] -pub struct G1Prepared(pub G1Affine

); - -impl From> for G1Prepared

{ - fn from(other: G1Affine

) -> Self { - G1Prepared(other) - } -} - -impl From> for G1Prepared

{ - fn from(q: G1Projective

) -> Self { - q.into_affine().into() - } -} - -impl<'a, P: BW6Config> From<&'a G1Affine

> for G1Prepared

{ - fn from(other: &'a G1Affine

) -> Self { - G1Prepared(*other) - } -} - -impl<'a, P: BW6Config> From<&'a G1Projective

> for G1Prepared

{ - fn from(q: &'a G1Projective

) -> Self { - q.into_affine().into() - } -} - -impl G1Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.infinity - } -} - -impl Default for G1Prepared

{ - fn default() -> Self { - G1Prepared(G1Affine::

::generator()) - } -} diff --git a/primitives/arkworks-models/src/bw6/g2.rs b/primitives/arkworks-models/src/bw6/g2.rs deleted file mode 100644 index ce422d1058ff3..0000000000000 --- a/primitives/arkworks-models/src/bw6/g2.rs +++ /dev/null @@ -1,58 +0,0 @@ -use ark_serialize::*; -use ark_std::vec::Vec; -use derivative::Derivative; - -use crate::{ - bw6::BW6Config, - short_weierstrass::{Affine, Projective}, - AffineRepr, CurveGroup, -}; - -pub type G2Affine

= Affine<

::G2Config>; -pub type G2Projective

= Projective<

::G2Config>; - -#[derive(Derivative, CanonicalSerialize, CanonicalDeserialize)] -#[derivative( - Copy(bound = "P: BW6Config"), - Clone(bound = "P: BW6Config"), - Debug(bound = "P: BW6Config"), - PartialEq(bound = "P: BW6Config"), - Eq(bound = "P: BW6Config") -)] -pub struct G2Prepared(pub G2Affine

); - -impl From> for G2Prepared

{ - fn from(other: G2Affine

) -> Self { - G2Prepared(other) - } -} - -impl From> for G2Prepared

{ - fn from(q: G2Projective

) -> Self { - q.into_affine().into() - } -} - -impl<'a, P: BW6Config> From<&'a G2Affine

> for G2Prepared

{ - fn from(other: &'a G2Affine

) -> Self { - G2Prepared(*other) - } -} - -impl<'a, P: BW6Config> From<&'a G2Projective

> for G2Prepared

{ - fn from(q: &'a G2Projective

) -> Self { - q.into_affine().into() - } -} - -impl G2Prepared

{ - pub fn is_zero(&self) -> bool { - self.0.infinity - } -} - -impl Default for G2Prepared

{ - fn default() -> Self { - G2Prepared(G2Affine::

::generator()) - } -} diff --git a/primitives/arkworks-models/src/bw6/mod.rs b/primitives/arkworks-models/src/bw6/mod.rs deleted file mode 100644 index c15233b0eebfa..0000000000000 --- a/primitives/arkworks-models/src/bw6/mod.rs +++ /dev/null @@ -1,80 +0,0 @@ -use crate::{ - models::{short_weierstrass::SWCurveConfig, CurveConfig}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_ff::fields::{ - fp3::Fp3Config, - fp6_2over3::{Fp6, Fp6Config}, - PrimeField, -}; -use derivative::Derivative; - -use ark_std::marker::PhantomData; - -#[cfg(feature = "parallel")] -use rayon::prelude::*; - -pub enum TwistType { - M, - D, -} - -pub trait BW6Config: 'static + Eq + Sized { - const X: ::BigInt; - const X_IS_NEGATIVE: bool; - const ATE_LOOP_COUNT_1: &'static [u64]; - const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool; - const ATE_LOOP_COUNT_2: &'static [i8]; - const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool; - const TWIST_TYPE: TwistType; - type Fp: PrimeField + Into<::BigInt>; - type Fp3Config: Fp3Config; - type Fp6Config: Fp6Config; - type G1Config: SWCurveConfig; - type G2Config: SWCurveConfig< - BaseField = Self::Fp, - ScalarField = ::ScalarField, - >; - - fn final_exponentiation(f: MillerLoopOutput>) -> Option>>; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput>; -} - -pub mod g1; -pub mod g2; - -pub use self::{ - g1::{G1Affine, G1Prepared, G1Projective}, - g2::{G2Affine, G2Prepared, G2Projective}, -}; - -#[derive(Derivative)] -#[derivative(Copy, Clone, PartialEq, Eq, Debug, Hash)] -pub struct BW6(PhantomData P>); - -impl Pairing for BW6

{ - type BaseField = ::BaseField; - type ScalarField = ::ScalarField; - type G1 = G1Projective

; - type G1Affine = G1Affine

; - type G1Prepared = G1Prepared

; - type G2 = G2Projective

; - type G2Affine = G2Affine

; - type G2Prepared = G2Prepared

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 literal 0 HcmV?d00001 diff --git a/primitives/arkworks/test/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks/test/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..92e4bc528e8937a311b502e4940e5e363a1f7c57 GIT binary patch literal 192000 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�uc*gWwz@d=S2~bA~LrFNXzUL(>hGG#V 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%0DJH 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�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, b: Vec>) -> Vec { + sp_io::crypto::bls12_381_multi_miller_loop(a, b) + } + fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + sp_io::crypto::bls12_381_final_exponentiation(f12) + } + fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_381_msm_g1(bases, bigints) + } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_projective_g1(base, scalar) + } + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_affine_g1(base, scalar) + } + fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_381_msm_g2(bases, bigints) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_projective_g2(base, scalar) + } + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_affine_g2(base, scalar) + } +} + +test_group!(g1; crate::G1Projective; sw); +test_group!(g2; crate::G2Projective; sw); +test_group!(pairing_output; PairingOutput>; msm); +test_pairing!(pairing; crate::Bls12_381); + +type G1Projective = G1Projective_Host; +type G1Affine = G1Affine_Host; +type G2Projective = G2Projective_Host; +type G2Affine = G2Affine_Host; + +#[test] +fn test_g1_endomorphism_beta() { + assert!(crate::g1::BETA.pow(&[3u64]).is_one()); +} + +#[test] +fn test_g1_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G1Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g1_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return; + } + } + } +} + +#[test] +fn test_g2_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G2Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); +} + +#[test] +fn test_g2_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq2::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return; + } + } + } +} + +// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs +macro_rules! test_vectors { + ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { + let mut e = $projective::zero(); + + let mut v = vec![]; + { + let mut expected = $expected; + for _ in 0..1000 { + let e_affine = $affine::from(e); + let mut serialized = vec![0u8; e.serialized_size($compress)]; + e_affine + .serialize_with_mode(serialized.as_mut_slice(), $compress) + .unwrap(); + v.extend_from_slice(&serialized[..]); + + let mut decoded = serialized; + let len_of_encoding = decoded.len(); + (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); + expected = &expected[len_of_encoding..]; + let decoded = + $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); + assert_eq!(e_affine, decoded); + + e += &$projective::generator(); + } + } + + assert_eq!(&v[..], $expected); + }; +} + +#[test] +fn g1_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); +} + +#[test] +fn g1_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); +} + +#[test] +fn g2_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); +} + +#[test] +fn g2_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); +} diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs new file mode 100644 index 0000000000000..cdd044746ba18 --- /dev/null +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -0,0 +1,38 @@ +use crate::HostFunctions; +use ark_algebra_test_templates::*; +use ark_std::vec::Vec; + +#[derive(PartialEq, Eq)] +pub struct Host; + +impl HostFunctions for Host { + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_io::crypto::bw6_761_multi_miller_loop(a, b) + } + fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + sp_io::crypto::bw6_761_final_exponentiation(f12) + } + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_projective_g2(base, scalar) + } + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_affine_g2(base, scalar) + } + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_projective_g1(base, scalar) + } + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_affine_g1(base, scalar) + } + fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bw6_761_msm_g1(bases, bigints) + } + fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bw6_761_msm_g2(bases, bigints) + } +} + +test_group!(g1; crate::g1::G1Projective; sw); +test_group!(g2; crate::g2::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); +test_pairing!(pairing; crate::BW6_761); \ No newline at end of file diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs new file mode 100644 index 0000000000000..d91332cd91c2b --- /dev/null +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -0,0 +1,29 @@ +use ark_algebra_test_templates::*; +use crate::HostFunctions; +use ark_std::vec::Vec; + +pub struct Host {} + +impl HostFunctions for Host { + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) + } + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) + } + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) + } + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) + } +} + +test_group!(sw; crate::SWProjective; sw); +test_group!(te; crate::EdwardsProjective; te); \ No newline at end of file diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs index 0d3b60951d5e4..930d0babfe1c1 100644 --- a/primitives/arkworks/test/tests/mod.rs +++ b/primitives/arkworks/test/tests/mod.rs @@ -1 +1,5 @@ -mod bls_377; \ No newline at end of file +mod bls_377; +mod bls12_381; +mod bw6_761; +mod ed_on_bls12_381; +mod ed_on_bls12_377; \ No newline at end of file From 587231e4afea4ac35710fb4cd9d67926f622a89c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 9 Jan 2023 15:26:08 +0100 Subject: [PATCH 089/364] cleanup unused Cargo.toml patches --- Cargo.lock | 10 ---------- Cargo.toml | 2 -- 2 files changed, 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e42e63adac261..b9cf921bfe964 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12876,13 +12876,3 @@ dependencies = [ "cc", "libc", ] - -[[patch.unused]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" - -[[patch.unused]] -name = "ark-r1cs-std" -version = "0.4.0-alpha.3" -source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" diff --git a/Cargo.toml b/Cargo.toml index 7ba78832fe955..d32c3639c16b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -328,8 +328,6 @@ ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "rel ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } From 4cba46a226bfb16253cdbe03766e766dd7d8740d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 10:52:45 +0100 Subject: [PATCH 090/364] Cargo update --- Cargo.lock | 75 +++++++++++++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9cf921bfe964..7f399e9c0ed1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,7 +205,7 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" +source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" dependencies = [ "ark-ec", "ark-ff", @@ -215,7 +215,7 @@ dependencies = [ [[package]] name = "ark-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" +source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" dependencies = [ "ark-ec", "ark-ff", @@ -226,7 +226,7 @@ dependencies = [ [[package]] name = "ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" +source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" dependencies = [ "ark-bls12-377", "ark-ec", @@ -253,7 +253,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" +source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" dependencies = [ "ark-bls12-377", "ark-ec", @@ -264,7 +264,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" +source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" dependencies = [ "ark-bls12-381", "ark-ec", @@ -454,9 +454,9 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.7" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3" +checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" dependencies = [ "bstr 1.1.0", "doc-comment", @@ -581,7 +581,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.30.1", + "object 0.30.2", "rustc-demangle", ] @@ -609,6 +609,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + [[package]] name = "base64ct" version = "1.5.3" @@ -1386,9 +1392,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" [[package]] name = "crc32fast" @@ -4233,7 +4239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", - "base64", + "base64 0.13.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", @@ -5295,9 +5301,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.1" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" +checksum = "2b8c786513eb403643f2a88c244c2aaa270ef2153f55094587d0c48a3cf22a83" dependencies = [ "memchr", ] @@ -6990,7 +6996,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] @@ -7358,9 +7364,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01db6702aa05baa3f57dec92b8eeeeb4cb19e894e73996b32a4093289e54592" +checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" dependencies = [ "bytes", "prost-derive", @@ -7368,9 +7374,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb5320c680de74ba083512704acb90fe00f28f79207286a848e730c45dd73ed6" +checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" dependencies = [ "bytes", "heck", @@ -7403,9 +7409,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8842bad1a5419bca14eac663ba798f6bc19c413c2fdceb5f3ba3b0932d96720" +checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" dependencies = [ "anyhow", "itertools", @@ -7416,9 +7422,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017f79637768cde62820bc2d4fe0e45daaa027755c323ad077767c6c5f173091" +checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" dependencies = [ "bytes", "prost", @@ -7908,7 +7914,7 @@ version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ - "base64", + "base64 0.13.1", "log", "ring", "sct 0.6.1", @@ -7941,11 +7947,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] @@ -9708,7 +9714,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64", + "base64 0.13.1", "bytes", "flate2", "futures", @@ -10693,7 +10699,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" dependencies = [ - "base64", + "base64 0.13.1", "crc", "lazy_static", "md-5", @@ -11634,7 +11640,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" dependencies = [ "async-trait", - "base64", + "base64 0.13.1", "futures", "log", "md-5", @@ -12123,7 +12129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882" dependencies = [ "anyhow", - "base64", + "base64 0.13.1", "bincode", "directories-next", "file-per-thread-logger", @@ -12768,7 +12774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" dependencies = [ "asn1-rs 0.3.1", - "base64", + "base64 0.13.1", "data-encoding", "der-parser 7.0.0", "lazy_static", @@ -12787,7 +12793,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ "asn1-rs 0.5.1", - "base64", + "base64 0.13.1", "data-encoding", "der-parser 8.1.0", "lazy_static", @@ -12869,10 +12875,11 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.4+zstd.1.5.2" +version = "2.0.5+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" +checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" dependencies = [ "cc", "libc", + "pkg-config", ] From 31ce8eca0514f93ac4c6f2d86adf705f74095099 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 10:54:24 +0100 Subject: [PATCH 091/364] deserialize Projective as Affine due to fork --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 01aaa9c53331e..0a436e9a50624 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -34,7 +34,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = short_weierstrass::Projective::::deserialize_with_mode( + let base = SWAffine::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, From b000fc85268d2bc1e169d169a0cb6feab2f93d1c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 11:00:42 +0100 Subject: [PATCH 092/364] convert affine to projective --- primitives/arkworks/src/ed_on_bls12_381.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 0a436e9a50624..ba5d4fd2aa173 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -40,6 +40,7 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { Validate::No, ) .unwrap(); + let base: SWProjective = base.into(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = ::mul_projective(&base, &scalar); From 730219c1bad873ef9bfa3749bb6d9b9fce28accd Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 11:03:30 +0100 Subject: [PATCH 093/364] revert changes --- primitives/arkworks/src/ed_on_bls12_381.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index ba5d4fd2aa173..01aaa9c53331e 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -34,13 +34,12 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = SWAffine::::deserialize_with_mode( + let base = short_weierstrass::Projective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) .unwrap(); - let base: SWProjective = base.into(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); let res = ::mul_projective(&base, &scalar); From 91710d98a1f29cdcd092c077137e94e5e734c489 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 11:52:02 +0100 Subject: [PATCH 094/364] fix tests --- primitives/arkworks/test/Cargo.toml | 15 ++++++------- .../arkworks/test/tests/bls12_381/mod.rs | 22 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index ab5fad50ea5a6..2e8a6ce33bc5a 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -16,19 +16,18 @@ ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = tru ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } -ark-models = { package = "ark-models", version = "0.4.0-alpha.5", path = "../../models", default-features = false } +ark-models = { git = "https://github.com/achimcc/ark-substrate", default-features = false } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } -sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "achimcc/arkworks-integration" } -sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } -sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate/branches" } -sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate/branches" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate/branches" } +sp-io = { version = "7.0.0", path = "../../io" } +sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } +sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } +sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate" } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 51b6ad165a153..e0ae72523699b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -144,14 +144,14 @@ fn g1_uncompressed_valid_test_vectors() { test_vectors!(G1Projective, G1Affine, Compress::No, bytes); } -#[test] -fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); -} - -#[test] -fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); -} +// #[test] +// fn g2_compressed_valid_test_vectors() { +// let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); +// test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); +// } + +// #[test] +// fn g2_uncompressed_valid_test_vectors() { +// let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); +// test_vectors!(G2Projective, G2Affine, Compress::No, bytes); +// } From 9686f64c66d8fed8e88fb2587266c617ccd5bce5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 16:36:02 +0100 Subject: [PATCH 095/364] fix tests --- Cargo.lock | 160 ++++++++++++++++++ Cargo.toml | 1 + primitives/arkworks/test/tests/bls12_377.rs | 37 ++++ primitives/arkworks/test/tests/bls12_381.rs | 0 .../arkworks/test/tests/bls12_381/mod.rs | 20 +-- primitives/arkworks/test/tests/bw6_761.rs | 58 +++---- .../arkworks/test/tests/ed_on_bls12_377.rs | 19 +++ .../arkworks/test/tests/ed_on_bls12_381.rs | 42 ++--- primitives/arkworks/test/tests/mod.rs | 2 +- 9 files changed, 278 insertions(+), 61 deletions(-) delete mode 100644 primitives/arkworks/test/tests/bls12_381.rs diff --git a/Cargo.lock b/Cargo.lock index 7f399e9c0ed1b..bdbd00e1811d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -202,6 +202,25 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" @@ -312,6 +331,22 @@ dependencies = [ "syn", ] +[[package]] +name = "ark-models" +version = "0.3.0" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.8", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "ark-poly" version = "0.4.0-alpha.7" @@ -324,6 +359,44 @@ dependencies = [ "hashbrown 0.13.1", ] +[[package]] +name = "ark-r1cs-std" +version = "0.4.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccffa53ace7907d7b0e6852f5d1738daaadae44f1e7c75d0fb2aa4d26a0fa7a3" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ark-std", + "derivative", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0-alpha.1" +source = "git+https://github.com/arkworks-rs/snark#a14e0ed6c601523b8878bf9d41f68077d75a4d00" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", +] + [[package]] name = "ark-serialize" version = "0.4.0-alpha.7" @@ -2862,8 +2935,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -9826,6 +9901,70 @@ dependencies = [ "sp-arithmetic", ] +[[package]] +name = "sp-ark-bls12-377" +version = "0.4.0-alpha.1" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-bls12-377", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "sp-ark-bls12-381" +version = "0.4.0-alpha" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "sp-ark-bw6-761" +version = "0.4.0-alpha.1" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-bw6-761", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", +] + +[[package]] +name = "sp-ark-ed-on-bls12-377" +version = "0.4.0-alpha.1" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-ed-on-bls12-377", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381" +version = "0.4.0-alpha.1" +source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +dependencies = [ + "ark-ed-on-bls12-381", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", + "sp-ark-bls12-381", +] + [[package]] name = "sp-arkworks" version = "0.0.1" @@ -9843,6 +9982,27 @@ dependencies = [ "sp-std", ] +[[package]] +name = "sp-arkworks-test" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", + "sp-ark-bls12-381", + "sp-ark-bw6-761", + "sp-ark-ed-on-bls12-377", + "sp-ark-ed-on-bls12-381", + "sp-io", +] + [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" diff --git a/Cargo.toml b/Cargo.toml index d32c3639c16b6..27501c621eb0c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -175,6 +175,7 @@ members = [ "primitives/arithmetic", "primitives/arithmetic/fuzzer", "primitives/arkworks", + "primitives/arkworks/test", "primitives/authority-discovery", "primitives/authorship", "primitives/beefy", diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index e69de29bb2d1d..806e8036e0a34 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -0,0 +1,37 @@ +use ark_algebra_test_templates::*; +use ark_std::vec::Vec; +use sp_ark_bls12_377::HostFunctions; + +pub struct Host {} + +impl HostFunctions for Host { + fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_io::crypto::bls12_377_multi_miller_loop(a, b) + } + fn bls12_377_final_exponentiation(f12: &[u8]) -> Vec { + sp_io::crypto::bls12_377_final_exponentiation(f12) + } + fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_377_msm_g1(bases, bigints) + } + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_377_mul_projective_g1(base, scalar) + } + fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_377_mul_affine_g1(base, scalar) + } + fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_377_msm_g2(bases, bigints) + } + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_377_mul_projective_g2(base, scalar) + } + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_377_mul_affine_g2(base, scalar) + } +} + +test_group!(g1; sp_ark_bls12_377::G1Projective; sw); +test_group!(g2; sp_ark_bls12_377::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); +test_pairing!(pairing; sp_ark_bls12_377::Bls12_377); diff --git a/primitives/arkworks/test/tests/bls12_381.rs b/primitives/arkworks/test/tests/bls12_381.rs deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index e0ae72523699b..9b5ee31001803 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,11 +1,11 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, One, UniformRand, Zero}; -use ark_models::{pairing::*, AffineRepr, CurveGroup, Group}; +use ark_models::{AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec, vec::Vec}; -use crate::{ - Bls12_381 as Bls12_381_Host, Fq, Fq2, Fr, G1Affine as G1Affine_Host, +use sp_ark_bls12_381::{ + Fq, Fq2, Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, }; @@ -39,10 +39,10 @@ impl HostFunctions for Host { } } -test_group!(g1; crate::G1Projective; sw); -test_group!(g2; crate::G2Projective; sw); -test_group!(pairing_output; PairingOutput>; msm); -test_pairing!(pairing; crate::Bls12_381); +test_group!(g1; sp_ark_bls12_381::G1Projective; sw); +test_group!(g2; sp_ark_bls12_381::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); +test_pairing!(pairing; sp_ark_bls12_381::Bls12_381); type G1Projective = G1Projective_Host; type G1Affine = G1Affine_Host; @@ -51,7 +51,7 @@ type G2Affine = G2Affine_Host; #[test] fn test_g1_endomorphism_beta() { - assert!(crate::g1::BETA.pow(&[3u64]).is_one()); + assert!(sp_ark_bls12_381::g1::BETA.pow(&[3u64]).is_one()); } #[test] @@ -69,7 +69,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } @@ -92,7 +92,7 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index cdd044746ba18..ee516cc0b690d 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -1,38 +1,38 @@ -use crate::HostFunctions; use ark_algebra_test_templates::*; use ark_std::vec::Vec; +use sp_ark_bw6_761::HostFunctions; #[derive(PartialEq, Eq)] pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_io::crypto::bw6_761_multi_miller_loop(a, b) - } - fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { - sp_io::crypto::bw6_761_final_exponentiation(f12) - } - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_projective_g2(base, scalar) - } - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_affine_g2(base, scalar) - } - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_projective_g1(base, scalar) - } - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_affine_g1(base, scalar) - } - fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bw6_761_msm_g1(bases, bigints) - } - fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bw6_761_msm_g2(bases, bigints) - } + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_io::crypto::bw6_761_multi_miller_loop(a, b) + } + fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + sp_io::crypto::bw6_761_final_exponentiation(f12) + } + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_projective_g2(base, scalar) + } + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_affine_g2(base, scalar) + } + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_projective_g1(base, scalar) + } + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bw6_761_mul_affine_g1(base, scalar) + } + fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bw6_761_msm_g1(bases, bigints) + } + fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bw6_761_msm_g2(bases, bigints) + } } -test_group!(g1; crate::g1::G1Projective; sw); -test_group!(g2; crate::g2::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); -test_pairing!(pairing; crate::BW6_761); \ No newline at end of file +test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); +test_group!(g2; sp_ark_bw6_761::g2::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); +test_pairing!(pairing; sp_ark_bw6_761::BW6_761); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index e69de29bb2d1d..93b2200517f0a 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -0,0 +1,19 @@ +use ark_algebra_test_templates::*; +use ark_std::vec::Vec; +use sp_ark_ed_on_bls12_377::HostFunctions; + +pub struct Host {} + +impl HostFunctions for Host { + fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_377_mul_affine(base, scalar) + } + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_377_mul_projective(base, scalar) + } + fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_377_msm(bases, scalars) + } +} + +test_group!(te; sp_ark_ed_on_bls12_377::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index d91332cd91c2b..1d6c7b49ac073 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -1,29 +1,29 @@ use ark_algebra_test_templates::*; -use crate::HostFunctions; use ark_std::vec::Vec; +use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) - } - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) - } - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) - } - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) - } + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) + } + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) + } + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) + } + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) + } } -test_group!(sw; crate::SWProjective; sw); -test_group!(te; crate::EdwardsProjective; te); \ No newline at end of file +test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); +test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs index 930d0babfe1c1..6ff68953a2c28 100644 --- a/primitives/arkworks/test/tests/mod.rs +++ b/primitives/arkworks/test/tests/mod.rs @@ -2,4 +2,4 @@ mod bls_377; mod bls12_381; mod bw6_761; mod ed_on_bls12_381; -mod ed_on_bls12_377; \ No newline at end of file +// mod ed_on_bls12_377; \ No newline at end of file From 1174072e482ad72208614c46c912f9402f221491 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 17:00:17 +0100 Subject: [PATCH 096/364] fix more tests --- primitives/arkworks/test/tests/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs index 6ff68953a2c28..c004239b8bad7 100644 --- a/primitives/arkworks/test/tests/mod.rs +++ b/primitives/arkworks/test/tests/mod.rs @@ -1,5 +1,5 @@ -mod bls_377; +mod bls12_377; mod bls12_381; mod bw6_761; mod ed_on_bls12_381; -// mod ed_on_bls12_377; \ No newline at end of file +mod ed_on_bls12_377; \ No newline at end of file From 1b77f8546c4db8e7dcd7297a6a3b33283651c1a8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 11 Jan 2023 17:25:20 +0100 Subject: [PATCH 097/364] ed_n_bls12_381 disable failing test --- primitives/arkworks/test/tests/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 1d6c7b49ac073..ab27620a67200 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -26,4 +26,4 @@ impl HostFunctions for Host { } test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); -test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); +// test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); From 448f4c13537a3786a4c9712133963e1ac8ddfafe Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 08:54:16 +0100 Subject: [PATCH 098/364] fix ed_on_bls12_381 deserialization --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 01aaa9c53331e..96ed587f71cc3 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -34,7 +34,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = short_weierstrass::Projective::::deserialize_with_mode( + let base = SWProjective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, From 104eea388f260d822bc9cbe2214ff492e769ce05 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 08:56:29 +0100 Subject: [PATCH 099/364] fix ed_on_bls12_381 deserialization --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 96ed587f71cc3..8f7b426239cf8 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -34,7 +34,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = SWProjective::::deserialize_with_mode( + let base = SWProjective::deserialize_with_mode( cursor, Compress::Yes, Validate::No, From 259c6d1684f92dd5a623b5973459faef766bbaf9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 09:14:48 +0100 Subject: [PATCH 100/364] fix ed_on_bls12_381 deserialization --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 8f7b426239cf8..bf0ef83cfbce6 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -34,7 +34,7 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = SWProjective::deserialize_with_mode( + let base = ark_ec::short_weierstrass::Projective::::deserialize_with_mode( cursor, Compress::Yes, Validate::No, From 280e69055f539a3257b9d325d0da84f61adc6c06 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 09:23:55 +0100 Subject: [PATCH 101/364] update --- Cargo.lock | 1 + primitives/arkworks/src/ed_on_bls12_381.rs | 13 +++++++------ primitives/arkworks/src/lib.rs | 2 +- primitives/arkworks/test/Cargo.toml | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bdbd00e1811d9..186502d676c18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9995,6 +9995,7 @@ dependencies = [ "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", "ark-serialize", "ark-std", + "frame-support", "sp-ark-bls12-377", "sp-ark-bls12-381", "sp-ark-bw6-761", diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index bf0ef83cfbce6..824aac856ebe2 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,23 +21,24 @@ use ark_ec::{ models::CurveConfig, - short_weierstrass::{self, Affine as SWAffine, SWCurveConfig}, + short_weierstrass::{Affine as SWAffine, SWCurveConfig, Projective as SWProjective}, twisted_edwards, twisted_edwards::{Affine as TEAffine, TECurveConfig}, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; +use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + println!("{:?}", base); let cursor = Cursor::new(base); - let base = ark_ec::short_weierstrass::Projective::::deserialize_with_mode( + let base = SWProjective::::deserialize_with_mode( cursor, - Compress::Yes, - Validate::No, + Compress::No, + Validate::Yes, ) .unwrap(); let cursor = Cursor::new(scalar); @@ -148,7 +149,7 @@ pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { }) .collect(); - let result = ::msm(&bases, &scalars).unwrap(); + let result = as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 2164e84b375cd..a1d692221e1ad 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,4 +1,4 @@ -#![cfg_attr(not(feature = "std"), no_std)] +// #![cfg_attr(not(feature = "std"), no_std)] pub mod bls12_377; pub mod bls12_381; diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 2e8a6ce33bc5a..b29a287b2188d 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -28,6 +28,7 @@ sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } +frame-support = { version = "4.0.0-dev", path = "../../../frame/support" } From 4785c4abb18383a1b60d023d16a7dd5859f89ce5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 10:38:43 +0100 Subject: [PATCH 102/364] fix host function for ed_on_bls12_381 --- primitives/arkworks/src/ed_on_bls12_381.rs | 1 - primitives/arkworks/src/lib.rs | 2 -- primitives/arkworks/test/tests/ed_on_bls12_381.rs | 4 ++-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 824aac856ebe2..44348447c9472 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -33,7 +33,6 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - println!("{:?}", base); let cursor = Cursor::new(base); let base = SWProjective::::deserialize_with_mode( cursor, diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index a1d692221e1ad..0e62268599bf9 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,5 +1,3 @@ -// #![cfg_attr(not(feature = "std"), no_std)] - pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index ab27620a67200..35bb8adff57aa 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -9,7 +9,7 @@ impl HostFunctions for Host { sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) } fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) } fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) @@ -26,4 +26,4 @@ impl HostFunctions for Host { } test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); -// test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); +test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); From 53c9ec812c9d34c0a5f8c544acc1740c5917b44c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 17:09:40 +0100 Subject: [PATCH 103/364] enable last BLS12_381 tests --- .../arkworks/test/tests/bls12_381/mod.rs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 9b5ee31001803..8682a77a1365b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -144,14 +144,14 @@ fn g1_uncompressed_valid_test_vectors() { test_vectors!(G1Projective, G1Affine, Compress::No, bytes); } -// #[test] -// fn g2_compressed_valid_test_vectors() { -// let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); -// test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); -// } - -// #[test] -// fn g2_uncompressed_valid_test_vectors() { -// let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); -// test_vectors!(G2Projective, G2Affine, Compress::No, bytes); -// } +#[test] +fn g2_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); +} + +#[test] +fn g2_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); +} From 358b6aeffba2bba15c49ede501216eca75e34f62 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 17:46:24 +0100 Subject: [PATCH 104/364] fix more tests --- Cargo.lock | 59 ++++++++----------- .../arkworks/test/tests/ed_on_bls12_381.rs | 36 +++++------ 2 files changed, 42 insertions(+), 53 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 186502d676c18..8f44645d359de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -263,7 +263,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "hashbrown 0.13.1", + "hashbrown 0.13.2", "itertools", "num-traits", "zeroize", @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-ec", "ark-ff", @@ -356,7 +356,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "hashbrown 0.13.1", + "hashbrown 0.13.2", ] [[package]] @@ -3086,9 +3086,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ "ahash 0.8.2", ] @@ -7005,7 +7005,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.5", + "parking_lot_core 0.9.6", ] [[package]] @@ -7024,9 +7024,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" dependencies = [ "cfg-if", "libc", @@ -7067,9 +7067,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ "base64 0.13.1", ] @@ -7091,9 +7091,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" +checksum = "4257b4a04d91f7e9e6290be5d3da4804dd5784fafde3a497d73eb2b4a158c30a" dependencies = [ "thiserror", "ucd-trie", @@ -7101,9 +7101,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" +checksum = "241cda393b0cdd65e62e07e12454f1f25d57017dcc514b1514cd3c4645e3a0a6" dependencies = [ "pest", "pest_generator", @@ -7111,9 +7111,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" +checksum = "46b53634d8c8196302953c74d5352f33d0c512a9499bd2ce468fc9f4128fa27c" dependencies = [ "pest", "pest_meta", @@ -7124,13 +7124,13 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" +checksum = "0ef4f1332a8d4678b41966bb4cc1d0676880e84183a1ecc3f4b69f03e99c7a51" dependencies = [ "once_cell", "pest", - "sha1", + "sha2 0.10.6", ] [[package]] @@ -9626,17 +9626,6 @@ dependencies = [ "opaque-debug 0.3.0", ] -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - [[package]] name = "sha2" version = "0.8.2" @@ -9904,7 +9893,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9916,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-bls12-381", "ark-ec", @@ -9929,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9942,7 +9931,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9955,7 +9944,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#f419ff8c6933f0d35d06dec4b4623dab68318b61" +source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 35bb8adff57aa..977a21bddf820 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,24 +5,24 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) - } - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) - } - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) - } - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) - } + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) + } + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) + } + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) + } + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) + } } test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); From 7075146c00ae732cb1baa6e41090ad1f7bf785c2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 12 Jan 2023 18:05:07 +0100 Subject: [PATCH 105/364] fix ed_on_bls12_381 host functions --- primitives/arkworks/src/ed_on_bls12_381.rs | 12 +- .../arkworks/test/tests/bls12_381/mod.rs | 169 +++++++++--------- .../arkworks/test/tests/ed_on_bls12_381.rs | 36 ++-- primitives/arkworks/test/tests/mod.rs | 2 +- 4 files changed, 108 insertions(+), 111 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 44348447c9472..66382a4e01a48 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,12 +21,12 @@ use ark_ec::{ models::CurveConfig, - short_weierstrass::{Affine as SWAffine, SWCurveConfig, Projective as SWProjective}, + short_weierstrass::{Affine as SWAffine, SWCurveConfig}, twisted_edwards, twisted_edwards::{Affine as TEAffine, TECurveConfig}, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig}; +use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; @@ -34,10 +34,10 @@ use sp_std::{vec, vec::Vec}; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = SWProjective::::deserialize_with_mode( + let base = ark_ec::short_weierstrass::Projective::::deserialize_with_mode( cursor, - Compress::No, - Validate::Yes, + Compress::Yes, + Validate::No, ) .unwrap(); let cursor = Cursor::new(scalar); @@ -148,7 +148,7 @@ pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { }) .collect(); - let result = as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + let result = ::msm(&bases, &scalars).unwrap(); let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized[..]); result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 8682a77a1365b..053fb56f0ecf2 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -5,38 +5,37 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{rand::Rng, test_rng, vec, vec::Vec}; use sp_ark_bls12_381::{ - Fq, Fq2, Fr, G1Affine as G1Affine_Host, - G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, - G2Projective as G2Projective_Host, HostFunctions, + Fq, Fq2, Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, + G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, }; pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_io::crypto::bls12_381_multi_miller_loop(a, b) - } - fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { - sp_io::crypto::bls12_381_final_exponentiation(f12) - } - fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_381_msm_g1(bases, bigints) - } - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_projective_g1(base, scalar) - } - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_affine_g1(base, scalar) - } - fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_381_msm_g2(bases, bigints) - } - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_projective_g2(base, scalar) - } - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_affine_g2(base, scalar) - } + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + sp_io::crypto::bls12_381_multi_miller_loop(a, b) + } + fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + sp_io::crypto::bls12_381_final_exponentiation(f12) + } + fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_381_msm_g1(bases, bigints) + } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_projective_g1(base, scalar) + } + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_affine_g1(base, scalar) + } + fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + sp_io::crypto::bls12_381_msm_g2(bases, bigints) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_projective_g2(base, scalar) + } + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::bls12_381_mul_affine_g2(base, scalar) + } } test_group!(g1; sp_ark_bls12_381::G1Projective; sw); @@ -51,107 +50,105 @@ type G2Affine = G2Affine_Host; #[test] fn test_g1_endomorphism_beta() { - assert!(sp_ark_bls12_381::g1::BETA.pow(&[3u64]).is_one()); + assert!(sp_ark_bls12_381::g1::BETA.pow(&[3u64]).is_one()); } #[test] fn test_g1_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G1Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); + let mut rng = test_rng(); + let generator = G1Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } #[test] fn test_g1_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq::rand(&mut rng); - let greatest = rng.gen(); + let mut rng = test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); - if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } - } - } + } + } } #[test] fn test_g2_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G2Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); + let mut rng = test_rng(); + let generator = G2Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } #[test] fn test_g2_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq2::rand(&mut rng); - let greatest = rng.gen(); + let mut rng = test_rng(); + loop { + let x = Fq2::rand(&mut rng); + let greatest = rng.gen(); - if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } - } - } + } + } } // Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs macro_rules! test_vectors { - ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { - let mut e = $projective::zero(); - - let mut v = vec![]; - { - let mut expected = $expected; - for _ in 0..1000 { - let e_affine = $affine::from(e); - let mut serialized = vec![0u8; e.serialized_size($compress)]; - e_affine - .serialize_with_mode(serialized.as_mut_slice(), $compress) - .unwrap(); - v.extend_from_slice(&serialized[..]); - - let mut decoded = serialized; - let len_of_encoding = decoded.len(); - (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); - expected = &expected[len_of_encoding..]; - let decoded = - $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); - assert_eq!(e_affine, decoded); - - e += &$projective::generator(); - } - } - - assert_eq!(&v[..], $expected); - }; + ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { + let mut e = $projective::zero(); + + let mut v = vec![]; + { + let mut expected = $expected; + for _ in 0..1000 { + let e_affine = $affine::from(e); + let mut serialized = vec![0u8; e.serialized_size($compress)]; + e_affine.serialize_with_mode(serialized.as_mut_slice(), $compress).unwrap(); + v.extend_from_slice(&serialized[..]); + + let mut decoded = serialized; + let len_of_encoding = decoded.len(); + (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); + expected = &expected[len_of_encoding..]; + let decoded = + $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); + assert_eq!(e_affine, decoded); + + e += &$projective::generator(); + } + } + + assert_eq!(&v[..], $expected); + }; } #[test] fn g1_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); + let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); } #[test] fn g1_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::No, bytes); + let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); } #[test] fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); + let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); } #[test] fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); + let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 977a21bddf820..35bb8adff57aa 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,24 +5,24 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) - } - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) - } - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) - } - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) - } + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) + } + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) + } + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) + } + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) + } } test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs index c004239b8bad7..e99ccc69281f3 100644 --- a/primitives/arkworks/test/tests/mod.rs +++ b/primitives/arkworks/test/tests/mod.rs @@ -1,5 +1,5 @@ mod bls12_377; mod bls12_381; mod bw6_761; +mod ed_on_bls12_377; mod ed_on_bls12_381; -mod ed_on_bls12_377; \ No newline at end of file From e09263857ac2affc136ee2ffeb73901881d7f680 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 13 Jan 2023 09:13:38 +0100 Subject: [PATCH 106/364] cleanup Cargo.tomls --- Cargo.lock | 49 ------------------- Cargo.toml | 18 +++---- primitives/arkworks/Cargo.toml | 1 - primitives/arkworks/test/Cargo.toml | 11 +---- .../arkworks/test/tests/bls12_381/mod.rs | 2 +- 5 files changed, 12 insertions(+), 69 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8f44645d359de..495709b1093c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,44 +359,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "ark-r1cs-std" -version = "0.4.0-alpha.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccffa53ace7907d7b0e6852f5d1738daaadae44f1e7c75d0fb2aa4d26a0fa7a3" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-std", - "derivative", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/snark#a14e0ed6c601523b8878bf9d41f68077d75a4d00" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", -] - [[package]] name = "ark-serialize" version = "0.4.0-alpha.7" @@ -779,12 +741,6 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "better_any" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1795ebc740ea791ffbe6685e0688ab1effec16c2864e0476db40bfdf0c02cb3d" - [[package]] name = "bincode" version = "1.3.3" @@ -9967,7 +9923,6 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "better_any", "sp-std", ] @@ -9976,15 +9931,11 @@ name = "sp-arkworks-test" version = "0.4.0-alpha.1" dependencies = [ "ark-algebra-test-templates", - "ark-bls12-377", "ark-ec", "ark-ff", "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", "ark-serialize", "ark-std", - "frame-support", "sp-ark-bls12-377", "sp-ark-bls12-381", "sp-ark-bw6-761", diff --git a/Cargo.toml b/Cargo.toml index 27501c621eb0c..51a5a2ab19d33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -325,12 +325,12 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } -ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } -ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } -ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } -ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-serialize = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-ff = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-ec = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-poly = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } +ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } +ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } +ark-bw6-761 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index ad982c85f4a63..38aefb6d813f1 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -21,7 +21,6 @@ ark-bw6-761 = { version = "0.4.0-alpha" } ark-ed-on-bls12-381 = { version = "0.4.0-alpha" } ark-ed-on-bls12-377 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } -better_any = { version = "0.2.0" } [features] default = ["std"] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index b29a287b2188d..55a8a82ac9ec1 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -12,32 +12,25 @@ edition = "2021" [dependencies] ark-ff = { version="0.4.0-alpha", default-features = false } -ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } ark-models = { git = "https://github.com/achimcc/ark-substrate", default-features = false } [dev-dependencies] -ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } +sp-io = { version = "7.0.0", path = "../../io" } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -sp-io = { version = "7.0.0", path = "../../io" } sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } -frame-support = { version = "4.0.0-dev", path = "../../../frame/support" } - - [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] base_field = [] -r1cs = [ "base_field", "ark-r1cs-std" ] diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 053fb56f0ecf2..e2bace17d8e27 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -68,7 +68,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } From b0244f5bc607b358091e6158976d50c67eb0cdc6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 13 Jan 2023 09:16:15 +0100 Subject: [PATCH 107/364] &[u8] -> Vec --- primitives/arkworks/src/bls12_377.rs | 2 +- primitives/arkworks/src/bls12_381.rs | 2 +- primitives/arkworks/src/bw6_761.rs | 2 +- primitives/arkworks/test/tests/bls12_377.rs | 2 +- primitives/arkworks/test/tests/bls12_381/mod.rs | 2 +- primitives/arkworks/test/tests/bw6_761.rs | 2 +- primitives/io/src/lib.rs | 6 +++--- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index f35b28e4d1f13..116ca0249d553 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -66,7 +66,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: &[u8]) -> Vec { +pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 684d8a8ec3c3a..76b199d835022 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -66,7 +66,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: &[u8]) -> Vec { +pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 593c8c9fc521b..bcfa74c6be483 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -66,7 +66,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: &[u8]) -> Vec { +pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 806e8036e0a34..af37a4ce3c1ef 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -8,7 +8,7 @@ impl HostFunctions for Host { fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_io::crypto::bls12_377_multi_miller_loop(a, b) } - fn bls12_377_final_exponentiation(f12: &[u8]) -> Vec { + fn bls12_377_final_exponentiation(f12: Vec) -> Vec { sp_io::crypto::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index e2bace17d8e27..d4e3b8ed8fe22 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -15,7 +15,7 @@ impl HostFunctions for Host { fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_io::crypto::bls12_381_multi_miller_loop(a, b) } - fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + fn bls12_381_final_exponentiation(f12: Vec) -> Vec { sp_io::crypto::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index ee516cc0b690d..9d131ba6a14b3 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -9,7 +9,7 @@ impl HostFunctions for Host { fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_io::crypto::bw6_761_multi_miller_loop(a, b) } - fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + fn bw6_761_final_exponentiation(f12: Vec) -> Vec { sp_io::crypto::bw6_761_final_exponentiation(f12) } fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index eff4387332542..d0e98d7f98cf4 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1127,7 +1127,7 @@ pub trait Crypto { } /// Compute a final exponentiation - fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { + fn bls12_381_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1167,7 +1167,7 @@ pub trait Crypto { } /// Compute a final exponentiation - fn bls12_377_final_exponentiation(f12: &[u8]) -> Vec { + fn bls12_377_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1207,7 +1207,7 @@ pub trait Crypto { } /// Compute a final exponentiation - fn bw6_761_final_exponentiation(f12: &[u8]) -> Vec { + fn bw6_761_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bw6_761::final_exponentiation(f12) } From 05ab58badc90372e2fd0f18eae44dc18c48a65d3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 13 Jan 2023 17:12:54 +0100 Subject: [PATCH 108/364] Cargo update --- Cargo.lock | 125 ++++++++++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 495709b1093c1..e88e5fe50d136 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-ec", "ark-ff", @@ -1083,7 +1083,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.0.32", + "clap 4.1.0", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1171,9 +1171,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.32" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" +checksum = "aa91278560fc226a5d9d736cc21e485ff9aad47d26b8ffe1f54cba868b684b9f" dependencies = [ "bitflags", "clap_derive", @@ -1186,18 +1186,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.0.7" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10861370d2ba66b0f5989f83ebf35db6421713fd92351790e7fdd6c36774c56b" +checksum = "ce8955d4e8cd4f28f9a01c93a050194c4d131e73ca02f6636bcddbed867014d7" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", ] [[package]] name = "clap_derive" -version = "4.0.21" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" dependencies = [ "heck", "proc-macro-error", @@ -1208,9 +1208,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" dependencies = [ "os_str_bytes", ] @@ -2370,7 +2370,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.0.32", + "clap 4.1.0", "comfy-table", "frame-benchmarking", "frame-support", @@ -2447,7 +2447,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2782,7 +2782,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls 0.20.7", + "rustls 0.20.8", "webpki 0.22.0", ] @@ -3240,7 +3240,7 @@ dependencies = [ "http", "hyper", "log", - "rustls 0.20.7", + "rustls 0.20.8", "rustls-native-certs", "tokio", "tokio-rustls", @@ -3417,9 +3417,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" dependencies = [ "libc", "windows-sys 0.42.0", @@ -3456,7 +3456,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi 0.2.6", - "io-lifetimes 1.0.3", + "io-lifetimes 1.0.4", "rustix 0.36.6", "windows-sys 0.42.0", ] @@ -4080,7 +4080,7 @@ dependencies = [ "parking_lot 0.12.1", "quinn-proto", "rand 0.8.5", - "rustls 0.20.7", + "rustls 0.20.8", "thiserror", "tokio", ] @@ -4163,7 +4163,7 @@ dependencies = [ "libp2p-core", "rcgen 0.10.0", "ring", - "rustls 0.20.7", + "rustls 0.20.8", "thiserror", "webpki 0.22.0", "x509-parser 0.14.0", @@ -4878,7 +4878,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.0.32", + "clap 4.1.0", "derive_more", "fs_extra", "futures", @@ -4915,7 +4915,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.0.32", + "clap 4.1.0", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5035,7 +5035,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5094,7 +5094,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "generate-bags", "kitchensink-runtime", ] @@ -5103,7 +5103,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7506,7 +7506,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash", - "rustls 0.20.7", + "rustls 0.20.8", "slab", "thiserror", "tinyvec", @@ -7933,7 +7933,7 @@ checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.3", + "io-lifetimes 1.0.4", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.42.0", @@ -7954,9 +7954,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", @@ -8147,7 +8147,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.0.32", + "clap 4.1.0", "fdlimit", "futures", "futures-timer", @@ -9447,9 +9447,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9512ffd81e3a3503ed401f79c33168b9148c75038956039166cd750eaa037c3" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" dependencies = [ "secp256k1-sys", ] @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9861,7 +9861,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-bls12-381", "ark-ec", @@ -9874,40 +9874,37 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-bw6-761", "ark-ff", "ark-models", "ark-serialize", "ark-std", - "sp-ark-bls12-377", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-models", "ark-serialize", "ark-std", - "sp-ark-bls12-377", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#02cee73d0a98a8b7d5a1da70a242ca58c9228679" +source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-models", "ark-serialize", "ark-std", - "sp-ark-bls12-381", ] [[package]] @@ -10328,7 +10325,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10817,7 +10814,7 @@ dependencies = [ name = "subkey" version = "2.0.2" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "sc-cli", ] @@ -10845,7 +10842,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "frame-support", "frame-system", "sc-cli", @@ -11380,7 +11377,7 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.7", + "rustls 0.20.8", "tokio", "webpki 0.22.0", ] @@ -11685,7 +11682,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.0.32", + "clap 4.1.0", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12718,19 +12715,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc 0.42.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" @@ -12746,9 +12743,9 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" @@ -12764,9 +12761,9 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" @@ -12782,9 +12779,9 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" @@ -12800,15 +12797,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" @@ -12824,9 +12821,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" From a0eebf94ae0ecb7c8a05d9ae3503555d9b3f8fe3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 15 Jan 2023 10:20:44 +0100 Subject: [PATCH 109/364] improve code quality --- primitives/arkworks/src/bls12_377.rs | 75 +++++++------- primitives/arkworks/src/bls12_381.rs | 75 +++++++------- primitives/arkworks/src/bw6_761.rs | 74 ++++++-------- primitives/arkworks/src/ed_on_bls12_377.rs | 29 +++--- primitives/arkworks/src/ed_on_bls12_381.rs | 53 +++++----- primitives/arkworks/src/lib.rs | 1 + primitives/arkworks/src/utils.rs | 9 ++ primitives/io/src/lib.rs | 108 ++++++++++----------- 8 files changed, 198 insertions(+), 226 deletions(-) create mode 100644 primitives/arkworks/src/utils.rs diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 116ca0249d553..17986d20e575c 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,15 +19,16 @@ #![warn(missing_docs)] +use crate::utils::serialize_result; use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { @@ -57,12 +58,10 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .unwrap() }) .collect(); - let res = Bls12_377::multi_miller_loop(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = Bls12_377::multi_miller_loop(g1, g2).0; + + serialize_result(result) } /// Compute final exponentiation through arkworks @@ -74,12 +73,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { Validate::No, ) .unwrap(); - let res = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap(); - // serialize the result - let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap().0; + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -89,11 +86,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -103,11 +99,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -117,11 +112,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -131,11 +125,10 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -164,12 +157,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -198,10 +190,9 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 76b199d835022..52125403925c3 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,15 +19,16 @@ #![warn(missing_docs)] +use crate::utils::serialize_result; use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { @@ -57,12 +58,10 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .unwrap() }) .collect(); - let res = Bls12_381::multi_miller_loop(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = Bls12_381::multi_miller_loop(g1, g2).0; + + serialize_result(result) } /// Compute final exponentiation through arkworks @@ -74,12 +73,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { Validate::No, ) .unwrap(); - let res = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap(); - // serialize the result - let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap().0; + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -89,11 +86,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -103,11 +99,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -117,11 +112,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -131,11 +125,10 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -164,12 +157,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -198,10 +190,9 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index bcfa74c6be483..fd31c81c2c017 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,15 +19,16 @@ #![warn(missing_docs)] +use crate::utils::serialize_result; use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { @@ -57,12 +58,10 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .unwrap() }) .collect(); - let res = BW6_761::multi_miller_loop(g1, g2); - // serialize the result - let mut res_bytes = vec![0u8; res.0.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = BW6_761::multi_miller_loop(g1, g2).0; + + serialize_result(result) } /// Compute final exponentiation through arkworks @@ -74,12 +73,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { Validate::No, ) .unwrap(); - let res = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap(); - // serialize the result - let mut res_bytes = vec![0u8; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut res_bytes[..]); - res.0.serialize_compressed(&mut cursor).unwrap(); - res_bytes.to_vec() + + let result = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap().0; + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -89,11 +86,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -103,11 +99,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -117,11 +112,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -131,11 +125,10 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -164,12 +157,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -200,8 +192,6 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .collect(); let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 8fb419b17f193..80056dff97fcc 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,13 +19,14 @@ #![warn(missing_docs)] +use crate::utils::serialize_result; use ark_ec::{ models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, }; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { @@ -38,11 +39,10 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication through arkworks @@ -56,11 +56,10 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -91,8 +90,6 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { .collect(); let result = ::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 66382a4e01a48..a2fe6bddbb3f4 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,6 +19,7 @@ #![warn(missing_docs)] +use crate::utils::serialize_result; use ark_ec::{ models::CurveConfig, short_weierstrass::{Affine as SWAffine, SWCurveConfig}, @@ -27,9 +28,9 @@ use ark_ec::{ VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { @@ -42,11 +43,10 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication through arkworks @@ -56,11 +56,10 @@ pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication on G2 through arkworks @@ -74,11 +73,10 @@ pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_projective(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) } /// Compute a scalar multiplication through arkworks @@ -88,11 +86,10 @@ pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { .unwrap(); let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let res = ::mul_affine(&base, &scalar); - let mut serialized = vec![0; res.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - res.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -119,10 +116,8 @@ pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { .collect(); let result = ::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } /// Compute a multi scalar multiplication on G! through arkworks @@ -149,8 +144,6 @@ pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { .collect(); let result = ::msm(&bases, &scalars).unwrap(); - let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized + + serialize_result(result) } diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 0e62268599bf9..84bb57b0ee69b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -3,3 +3,4 @@ pub mod bls12_381; pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; +mod utils; diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs new file mode 100644 index 0000000000000..2842e072a5408 --- /dev/null +++ b/primitives/arkworks/src/utils.rs @@ -0,0 +1,9 @@ +use ark_serialize::{CanonicalSerialize, Compress}; +use ark_std::io::Cursor; + +pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { + let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_result[..]); + result.serialize_compressed(&mut cursor).unwrap(); + serialized_result +} diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index d0e98d7f98cf4..d6b9c59711f6e 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1121,152 +1121,152 @@ pub trait Crypto { Ok(pubkey.serialize()) } - /// Compute a multi Miller loop + /// Compute a multi Miller loop on bls12_381 fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_381::multi_miller_loop(a, b) } - /// Compute a final exponentiation + /// Compute a final exponentiation on bls12_381 fn bls12_381_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bls12_381::final_exponentiation(f12) } - /// Compute a bigint_msm on G2 - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_projective_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_affine_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 + /// Compute a projective multiplication on G1 for bls12_381 fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bls12_381::mul_projective_g1(base, scalar) } - /// Compute a bigint_msm on G2 + /// Compute a projective multiplication on G1 for bls12_381 fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bls12_381::mul_affine_g1(base, scalar) } - /// Compute a msm on G1 + /// Compute a projective multiplication on G2 for bls12_381 + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_projective_g2(base, scalar) + } + + /// Compute a affine multiplication on G2 for bls12_381 + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_affine_g2(base, scalar) + } + + /// Compute a msm on G1 for bls12_381 fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g1(bases, scalars) } - /// Compute a msm on G2 + /// Compute a msm on G2 for bls12_381 fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g2(bases, scalars) } - /// Compute a multi Miller loop + /// Compute a multi Miller loop for bls12_377 fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_377::multi_miller_loop(a, b) } - /// Compute a final exponentiation + /// Compute a final exponentiation for bls12_377 fn bls12_377_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bls12_377::final_exponentiation(f12) } - /// Compute a bigint_msm on G2 - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_projective_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_affine_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 + /// Compute a projective multiplication on G1 for bls12_377 fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bls12_377::mul_projective_g1(base, scalar) } - /// Compute a bigint_msm on G2 + /// Compute a affine multiplication on G1 for bls12_377 fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bls12_377::mul_affine_g1(base, scalar) } - /// Compute a bigint_msm on G1 + /// Compute a projective multiplication on G2 for bls12_377 + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_projective_g2(base, scalar) + } + + /// Compute a affine multiplication on G2 for bls12_377 + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_affine_g2(base, scalar) + } + + /// Compute a msm on G1 for bls12_377 fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g1(bases, scalars) } - /// Compute a bigint_msm on G2 + /// Compute a msm on G2 for bls12_377 fn bls12_377_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g2(bases, scalars) } - /// Compute a multi Miller loop + /// Compute a multi Miller loop on bw6_761 fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bw6_761::multi_miller_loop(a, b) } - /// Compute a final exponentiation + /// Compute a final exponentiation on bw6_761 fn bw6_761_final_exponentiation(f12: Vec) -> Vec { sp_arkworks::bw6_761::final_exponentiation(f12) } - /// Compute a bigint_msm on G2 - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_projective_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g2(base, scalar) - } - - /// Compute a bigint_msm on G2 + /// Compute a projective multiplication on G1 for bw6_761 fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g1(base, scalar) } - /// Compute a bigint_msm on G2 + /// Compute a affine multiplication on G1 for bw6_761 fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_affine_g1(base, scalar) } - /// Compute a bigint_msm on G1 + /// Compute a projective multiplication on G2 for bw6_761 + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_projective_g2(base, scalar) + } + + /// Compute a affine multiplication on G2 for bw6_761 + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g2(base, scalar) + } + + /// Compute a msm on G1 for bw6_761 fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_g1(bases, bigints) } - /// Compute a bigint_msm on G2 + /// Compute a msm on G2 for bw6_761 fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_g2(bases, bigints) } - /// Compute affine multiplication on ed_on_bls12_381 + /// Compute a short weierstrass affine multiplication on ed_on_bls12_381 fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) } - /// Compute projective multiplication on ed_on_bls12_381 + /// Compute twisted edwards projective multiplication on ed_on_bls12_381 fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) } - /// Compute affine multiplication on ed_on_bls12_381 + /// Compute twisted edwards affine multiplication on ed_on_bls12_381 fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) } - /// Compute projective multiplication on ed_on_bls12_381 + /// Compute short weierstrass projective multiplication on ed_on_bls12_381 fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) } - /// Compute msm on ed_on_bls12_381 + /// Compute twisted edwards msm on ed_on_bls12_381 fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) } - /// Compute msm on ed_on_bls12_381 + /// Compute short weierstrass msm on ed_on_bls12_381 fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } From 90d3c248a2fcc9e7780cf5e7b918f62ea1c34688 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 15 Jan 2023 15:53:06 +0100 Subject: [PATCH 110/364] cargo update --- Cargo.lock | 71 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 60c23f2514355..566b614b8613d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-ec", "ark-ff", @@ -584,9 +584,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" [[package]] name = "atty" @@ -1083,7 +1083,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.0", + "clap 4.1.1", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1171,9 +1171,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa91278560fc226a5d9d736cc21e485ff9aad47d26b8ffe1f54cba868b684b9f" +checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2" dependencies = [ "bitflags", "clap_derive", @@ -1190,7 +1190,7 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce8955d4e8cd4f28f9a01c93a050194c4d131e73ca02f6636bcddbed867014d7" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", ] [[package]] @@ -1238,9 +1238,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" dependencies = [ "crossbeam-utils", ] @@ -2370,7 +2370,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.0", + "clap 4.1.1", "comfy-table", "frame-benchmarking", "frame-support", @@ -2447,7 +2447,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -4878,7 +4878,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.0", + "clap 4.1.1", "derive_more", "fs_extra", "futures", @@ -4915,7 +4915,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.0", + "clap 4.1.1", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5035,7 +5035,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5094,7 +5094,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "generate-bags", "kitchensink-runtime", ] @@ -5103,7 +5103,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -8147,7 +8147,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.0", + "clap 4.1.1", "fdlimit", "futures", "futures-timer", @@ -9849,62 +9849,75 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-bls12-377", "ark-ff", "ark-models", "ark-serialize", "ark-std", + "sp-ark-utils", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-bls12-381", - "ark-ec", "ark-ff", "ark-models", "ark-serialize", "ark-std", + "sp-ark-utils", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-bw6-761", "ark-ff", "ark-models", "ark-serialize", "ark-std", + "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-models", "ark-serialize", "ark-std", + "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#987868a174c3b3e9d12e31b4a466514475bfce55" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-models", "ark-serialize", "ark-std", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-utils" +version = "0.4.0-alpha.1" +source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +dependencies = [ + "ark-serialize", + "ark-std", ] [[package]] @@ -10325,7 +10338,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10814,7 +10827,7 @@ dependencies = [ name = "subkey" version = "2.0.2" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "sc-cli", ] @@ -10842,7 +10855,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "frame-support", "frame-system", "sc-cli", @@ -11172,9 +11185,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -11682,7 +11695,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.1.0", + "clap 4.1.1", "frame-remote-externalities", "frame-try-runtime", "hex", From 5769db937a1fcb986e3ea7453288dc7ee00d6d02 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 15 Jan 2023 21:41:30 +0100 Subject: [PATCH 111/364] improve imports --- primitives/arkworks/src/bls12_377.rs | 14 +++++++------- primitives/arkworks/src/bls12_381.rs | 14 +++++++------- primitives/arkworks/test/tests/bls12_381/mod.rs | 16 ++++++++-------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 17986d20e575c..ce873ed80547a 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::serialize_result; -use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective, g1, g2}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, @@ -87,7 +87,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base, &scalar); serialize_result(result) } @@ -100,7 +100,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base, &scalar); serialize_result(result) } @@ -113,7 +113,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base, &scalar); serialize_result(result) } @@ -126,7 +126,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base, &scalar); serialize_result(result) } @@ -149,7 +149,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -182,7 +182,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 52125403925c3..58a7ba48d6ad0 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::serialize_result; -use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective, g1, g2}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, @@ -87,7 +87,7 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base, &scalar); serialize_result(result) } @@ -100,7 +100,7 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base, &scalar); serialize_result(result) } @@ -113,7 +113,7 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base, &scalar); serialize_result(result) } @@ -126,7 +126,7 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(scalar); let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base, &scalar); serialize_result(result) } @@ -149,7 +149,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, @@ -182,7 +182,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( + ::ScalarField::deserialize_with_mode( cursor, Compress::Yes, Validate::No, diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index d4e3b8ed8fe22..c520820649712 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,8 +1,8 @@ use ark_algebra_test_templates::*; -use ark_ff::{fields::Field, One, UniformRand, Zero}; +use ark_ff::{fields::Field, UniformRand, Zero}; use ark_models::{AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, vec::Vec}; +use ark_std::{rand::Rng, test_rng, vec, vec::Vec, One}; use sp_ark_bls12_381::{ Fq, Fq2, Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, @@ -38,16 +38,16 @@ impl HostFunctions for Host { } } -test_group!(g1; sp_ark_bls12_381::G1Projective; sw); -test_group!(g2; sp_ark_bls12_381::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); -test_pairing!(pairing; sp_ark_bls12_381::Bls12_381); - type G1Projective = G1Projective_Host; type G1Affine = G1Affine_Host; type G2Projective = G2Projective_Host; type G2Affine = G2Affine_Host; +test_group!(g1; sp_ark_bls12_381::G1Projective; sw); +test_group!(g2; sp_ark_bls12_381::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); +test_pairing!(pairing; sp_ark_bls12_381::Bls12_381); + #[test] fn test_g1_endomorphism_beta() { assert!(sp_ark_bls12_381::g1::BETA.pow(&[3u64]).is_one()); @@ -91,7 +91,7 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } From c9a3e5fb15071ca36e32cc1e2678c0e84f777e71 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 15 Jan 2023 22:13:20 +0100 Subject: [PATCH 112/364] remove ./tests/mod.rs --- primitives/arkworks/test/tests/mod.rs | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 primitives/arkworks/test/tests/mod.rs diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs deleted file mode 100644 index e99ccc69281f3..0000000000000 --- a/primitives/arkworks/test/tests/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod bls12_377; -mod bls12_381; -mod bw6_761; -mod ed_on_bls12_377; -mod ed_on_bls12_381; From 2d0aa5b45cb67bdc7bf179a741eb78b1ffe63dcf Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 16 Jan 2023 11:30:32 +0100 Subject: [PATCH 113/364] formatting error --- primitives/arkworks/src/bw6_761.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index fd31c81c2c017..db2aea856e5e7 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -190,6 +190,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); From a04d5628ab7f0dbfd53c392feb556d448164f185 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 16 Jan 2023 11:30:54 +0100 Subject: [PATCH 114/364] cargo update --- Cargo.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 566b614b8613d..b1b06099a2b04 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,7 +205,7 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "ark-ec", "ark-ff", @@ -256,7 +256,7 @@ dependencies = [ [[package]] name = "ark-ec" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "ark-ff", "ark-poly", @@ -294,7 +294,7 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -313,7 +313,7 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "quote", "syn", @@ -322,7 +322,7 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "num-bigint", "num-traits", @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ec", "ark-ff", @@ -350,7 +350,7 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "ark-ff", "ark-serialize", @@ -362,7 +362,7 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "ark-serialize-derive", "ark-std", @@ -373,7 +373,7 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" dependencies = [ "proc-macro2", "quote", @@ -2024,9 +2024,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ "signature", ] @@ -5222,9 +5222,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.2" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9862,7 +9862,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9875,7 +9875,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9888,7 +9888,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9901,7 +9901,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9914,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#75cf5227ebd818e321cdc052ef32350ad3200a7f" +source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-serialize", "ark-std", @@ -11724,9 +11724,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.75" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1212c215a87a183687a7cc7065901b1a98da6b37277d51a1b5faedbb4efd4f3" +checksum = "6ed2c57956f91546d4d33614265a85d55c8e1ab91484853a10335894786d7db6" dependencies = [ "dissimilar", "glob", From 422f04395f63539a30585b3ab1b265d27caa191b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 16 Jan 2023 20:15:20 +0100 Subject: [PATCH 115/364] achimcc/ark-substate -> paritytech/ark-substrate --- Cargo.lock | 14 +++++++------- primitives/arkworks/test/Cargo.toml | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b1b06099a2b04..641f31f2a7fd6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ec", "ark-ff", @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9862,7 +9862,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9875,7 +9875,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9888,7 +9888,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9901,7 +9901,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9914,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/achimcc/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 55a8a82ac9ec1..2c21cc7b81f9c 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -14,17 +14,17 @@ edition = "2021" ark-ff = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-models = { git = "https://github.com/achimcc/ark-substrate", default-features = false } +ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } [dev-dependencies] sp-io = { version = "7.0.0", path = "../../io" } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } -sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } -sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate" } +sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } [features] default = [ "curve" ] From 09639c88026a7fc016036ecef272bc9336e3650c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 16 Jan 2023 21:12:47 +0100 Subject: [PATCH 116/364] sp_io::crypto -> sp_io::elliptic_curves --- Cargo.lock | 18 +++++++++--------- primitives/arkworks/src/bls12_377.rs | 2 +- primitives/arkworks/src/bls12_381.rs | 2 +- primitives/arkworks/src/bw6_761.rs | 2 +- primitives/arkworks/test/tests/bls12_377.rs | 16 ++++++++-------- .../arkworks/test/tests/bls12_381/mod.rs | 16 ++++++++-------- primitives/arkworks/test/tests/bw6_761.rs | 16 ++++++++-------- .../arkworks/test/tests/ed_on_bls12_377.rs | 6 +++--- .../arkworks/test/tests/ed_on_bls12_381.rs | 12 ++++++------ primitives/io/src/lib.rs | 4 ++++ 10 files changed, 49 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 641f31f2a7fd6..bfe5d656207af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-ec", "ark-ff", @@ -7349,9 +7349,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ "unicode-ident", ] @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9862,7 +9862,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9875,7 +9875,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9888,7 +9888,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9901,7 +9901,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9914,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#edc00d47c2f536b41a0ff83f4743853bd976ccfb" +source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index ce873ed80547a..d3740931bd37d 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::serialize_result; -use ark_bls12_377::{Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective, g1, g2}; +use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 58a7ba48d6ad0..81741f234daf9 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::serialize_result; -use ark_bls12_381::{Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective, g1, g2}; +use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index db2aea856e5e7..7d7ad410d998e 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -190,7 +190,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { .unwrap() }) .collect(); - + let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index af37a4ce3c1ef..43240d25309f2 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -6,28 +6,28 @@ pub struct Host {} impl HostFunctions for Host { fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_io::crypto::bls12_377_multi_miller_loop(a, b) + sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Vec { - sp_io::crypto::bls12_377_final_exponentiation(f12) + sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_377_msm_g1(bases, bigints) + sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) } fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_377_mul_projective_g1(base, scalar) + sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) } fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_377_mul_affine_g1(base, scalar) + sp_io::elliptic_curves::bls12_377_mul_affine_g1(base, scalar) } fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_377_msm_g2(bases, bigints) + sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) } fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_377_mul_projective_g2(base, scalar) + sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) } fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_377_mul_affine_g2(base, scalar) + sp_io::elliptic_curves::bls12_377_mul_affine_g2(base, scalar) } } diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index c520820649712..8fb718672dc8b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -13,28 +13,28 @@ pub struct Host {} impl HostFunctions for Host { fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_io::crypto::bls12_381_multi_miller_loop(a, b) + sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Vec { - sp_io::crypto::bls12_381_final_exponentiation(f12) + sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_381_msm_g1(bases, bigints) + sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) } fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_projective_g1(base, scalar) + sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) } fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_affine_g1(base, scalar) + sp_io::elliptic_curves::bls12_381_mul_affine_g1(base, scalar) } fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bls12_381_msm_g2(bases, bigints) + sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_projective_g2(base, scalar) + sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) } fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bls12_381_mul_affine_g2(base, scalar) + sp_io::elliptic_curves::bls12_381_mul_affine_g2(base, scalar) } } diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 9d131ba6a14b3..3b229d8dce5ea 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -7,28 +7,28 @@ pub struct Host; impl HostFunctions for Host { fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - sp_io::crypto::bw6_761_multi_miller_loop(a, b) + sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Vec { - sp_io::crypto::bw6_761_final_exponentiation(f12) + sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_projective_g2(base, scalar) + sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) } fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_affine_g2(base, scalar) + sp_io::elliptic_curves::bw6_761_mul_affine_g2(base, scalar) } fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_projective_g1(base, scalar) + sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) } fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::bw6_761_mul_affine_g1(base, scalar) + sp_io::elliptic_curves::bw6_761_mul_affine_g1(base, scalar) } fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bw6_761_msm_g1(bases, bigints) + sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) } fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { - sp_io::crypto::bw6_761_msm_g2(bases, bigints) + sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 93b2200517f0a..92faa1cbef2be 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -6,13 +6,13 @@ pub struct Host {} impl HostFunctions for Host { fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_377_mul_affine(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_377_mul_affine(base, scalar) } fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_377_mul_projective(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) } fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_377_msm(bases, scalars) + sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 35bb8adff57aa..184e78a1b1764 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -6,22 +6,22 @@ pub struct Host {} impl HostFunctions for Host { fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_affine(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_affine(base, scalar) } fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_projective(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_381_te_mul_projective(base, scalar) } fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_mul_affine(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_381_te_mul_affine(base, scalar) } fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_mul_projective(base, scalar) + sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_projective(base, scalar) } fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_te_msm(bases, scalars) + sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) } fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_io::crypto::ed_on_bls12_381_sw_msm(bases, scalars) + sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) } } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index d6b9c59711f6e..da6986253768e 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1120,7 +1120,11 @@ pub trait Crypto { .map_err(|_| EcdsaVerifyError::BadSignature)?; Ok(pubkey.serialize()) } +} +/// Interfaces for working with elliptic curves related types from within the runtime. +#[runtime_interface] +pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { sp_arkworks::bls12_381::multi_miller_loop(a, b) From 61b824f5518667672080c60529a55695d4082e75 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 11:30:13 +0100 Subject: [PATCH 117/364] fix std leak --- primitives/arkworks/Cargo.toml | 18 +++++++++++++----- primitives/arkworks/test/Cargo.toml | 25 +++++++++++++++++++------ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 38aefb6d813f1..10f63ad82a551 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -15,15 +15,23 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ff = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bls12-381 = { version = "0.4.0-alpha" } -ark-bls12-377 = { version = "0.4.0-alpha" } -ark-bw6-761 = { version = "0.4.0-alpha" } -ark-ed-on-bls12-381 = { version = "0.4.0-alpha" } -ark-ed-on-bls12-377 = { version = "0.4.0-alpha" } +ark-bls12-381 = { version = "0.4.0-alpha", default-features = false } +ark-bls12-377 = { version = "0.4.0-alpha", default-features = false } +ark-bw6-761 = { version = "0.4.0-alpha", default-features = false } +ark-ed-on-bls12-381 = { version = "0.4.0-alpha", default-features = false } +ark-ed-on-bls12-377 = { version = "0.4.0-alpha", default-features = false } sp-std = { version = "5.0.0", default-features = false, path = "../std" } [features] default = ["std"] std = [ "sp-std/std", + "ark-serialize/std", + "ark-ff/std", + "ark-ec/std", + "ark-bls12-377/std", + "ark-bls12-381/std", + "ark-bw6-761/std", + "ark-ed-on-bls12-381/std", + "ark-ed-on-bls12-377/std", ] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 2c21cc7b81f9c..5380b46914d72 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -20,15 +20,28 @@ ark-models = { git = "https://github.com/paritytech/ark-substrate", default-feat sp-io = { version = "7.0.0", path = "../../io" } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] +std = [ + "ark-serialize/std", + "ark-models/std", + "ark-ff/std", + "ark-ec/std", + "sp-ark-bls12-377/std", + "sp-ark-bls12-381/std", + "sp-ark-bw6-761/std", + "sp-ark-ed-on-bls12-377/std", + "sp-ark-ed-on-bls12-381/std", + "sp-io/std", + "ark-ec/std", + "ark-algebra-test-templates/std" +] curve = [ "scalar_field", "base_field" ] scalar_field = [] From ac88bcd87a7c116145320f57298ee53408c9e78f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 11:48:03 +0100 Subject: [PATCH 118/364] cargo update --- Cargo.lock | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfe5d656207af..6d3450673be37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-ec", "ark-ff", @@ -359,6 +359,35 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-r1cs-std" +version = "0.4.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccffa53ace7907d7b0e6852f5d1738daaadae44f1e7c75d0fb2aa4d26a0fa7a3" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-std", + "derivative", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] + [[package]] name = "ark-serialize" version = "0.4.0-alpha.7" @@ -382,9 +411,9 @@ dependencies = [ [[package]] name = "ark-std" -version = "0.4.0-alpha" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5b16d734e9b2e43886ff586755219df7fb9639cc04ab00c7e636708a5ba06a" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand 0.8.5", @@ -9849,11 +9878,12 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-bls12-377", "ark-ff", "ark-models", + "ark-r1cs-std", "ark-serialize", "ark-std", "sp-ark-utils", @@ -9862,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9875,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9888,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9901,7 +9931,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9914,7 +9944,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#e26fc6dd40f90525efc5f97b107fd89058e67a64" +source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" dependencies = [ "ark-serialize", "ark-std", From a83b64da9ba9350beffb0d44b7e55ba5e428e6fb Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 11:51:43 +0100 Subject: [PATCH 119/364] enable curve feature --- primitives/arkworks/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 10f63ad82a551..b915e84c863d7 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -15,8 +15,8 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ff = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bls12-381 = { version = "0.4.0-alpha", default-features = false } -ark-bls12-377 = { version = "0.4.0-alpha", default-features = false } +ark-bls12-381 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } +ark-bls12-377 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } ark-bw6-761 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-381 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0-alpha", default-features = false } From d888f5ff5a9561b2e02f89c5e57c1d6c5df02770 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 11:54:59 +0100 Subject: [PATCH 120/364] fix std leak --- primitives/arkworks/test/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 5380b46914d72..1baf6a1a0e030 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -17,7 +17,7 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } [dev-dependencies] -sp-io = { version = "7.0.0", path = "../../io" } +sp-io = { version = "7.0.0", default-feature = false, path = "../../io" } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } From a1c6b072f281fc355325026bf8ba58df7ae337f4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 12:03:58 +0100 Subject: [PATCH 121/364] fix std leak --- primitives/arkworks/test/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 1baf6a1a0e030..7f255e73aabc8 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -17,7 +17,7 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } [dev-dependencies] -sp-io = { version = "7.0.0", default-feature = false, path = "../../io" } +sp-io = { version = "7.0.0", default-features = false, path = "../../io" } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } From 71195e43cf97bc8de4dcf8b65e3b99577163700c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 12:14:16 +0100 Subject: [PATCH 122/364] fix std leak --- primitives/arkworks/Cargo.toml | 6 +++--- primitives/arkworks/test/Cargo.toml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index b915e84c863d7..7a2e3fe35c775 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -15,8 +15,8 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ff = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bls12-381 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } ark-bls12-377 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } +ark-bls12-381 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } ark-bw6-761 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-381 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0-alpha", default-features = false } @@ -25,13 +25,13 @@ sp-std = { version = "5.0.0", default-features = false, path = "../std" } [features] default = ["std"] std = [ - "sp-std/std", "ark-serialize/std", - "ark-ff/std", + "ark-ff/std" "ark-ec/std", "ark-bls12-377/std", "ark-bls12-381/std", "ark-bw6-761/std", "ark-ed-on-bls12-381/std", "ark-ed-on-bls12-377/std", + "sp-std/std", ] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 7f255e73aabc8..6e691a6703d59 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -29,18 +29,18 @@ sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", [features] default = [ "curve" ] std = [ + "ark-ff/std", + "ark-std/std" "ark-serialize/std", "ark-models/std", - "ark-ff/std", + "sp-io/std", "ark-ec/std", + "ark-algebra-test-templates/std" "sp-ark-bls12-377/std", "sp-ark-bls12-381/std", "sp-ark-bw6-761/std", "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381/std", - "sp-io/std", - "ark-ec/std", - "ark-algebra-test-templates/std" ] curve = [ "scalar_field", "base_field" ] From 5c65b941fd34b61e8add6350bf1688d334e14ce6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 12:31:38 +0100 Subject: [PATCH 123/364] fix std leak --- primitives/arkworks/Cargo.toml | 3 +-- primitives/arkworks/test/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 7a2e3fe35c775..01cf52c2d4f3e 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -26,12 +26,11 @@ sp-std = { version = "5.0.0", default-features = false, path = "../std" } default = ["std"] std = [ "ark-serialize/std", - "ark-ff/std" + "ark-ff/std", "ark-ec/std", "ark-bls12-377/std", "ark-bls12-381/std", "ark-bw6-761/std", "ark-ed-on-bls12-381/std", "ark-ed-on-bls12-377/std", - "sp-std/std", ] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 6e691a6703d59..46af952c121cd 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -30,12 +30,12 @@ sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default = [ "curve" ] std = [ "ark-ff/std", - "ark-std/std" + "ark-std/std", "ark-serialize/std", "ark-models/std", "sp-io/std", "ark-ec/std", - "ark-algebra-test-templates/std" + "ark-algebra-test-templates/std", "sp-ark-bls12-377/std", "sp-ark-bls12-381/std", "sp-ark-bw6-761/std", From bbf1d2a916cad50b49f8f3f4f785ba8a3f4651d1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 12:55:36 +0100 Subject: [PATCH 124/364] cargo update --- Cargo.lock | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6d3450673be37..96e224441e64d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -204,8 +204,8 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "ark-ec", "ark-ff", @@ -255,8 +255,8 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "ark-ff", "ark-poly", @@ -293,8 +293,8 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -312,8 +312,8 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "quote", "syn", @@ -321,8 +321,8 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "num-bigint", "num-traits", @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-ec", "ark-ff", @@ -349,8 +349,8 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "ark-ff", "ark-serialize", @@ -378,9 +378,9 @@ dependencies = [ [[package]] name = "ark-relations" -version = "0.4.0-alpha.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" dependencies = [ "ark-ff", "ark-std", @@ -390,8 +390,8 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "ark-serialize-derive", "ark-std", @@ -401,8 +401,8 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c29a9aaef7e9d234c496f3bb3e1cb5742e6b80a0" +version = "0.4.0" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" dependencies = [ "proc-macro2", "quote", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,11 +9918,12 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-models", + "ark-r1cs-std", "ark-serialize", "ark-std", "sp-ark-utils", @@ -9931,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9944,7 +9945,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#dabeb33906128f146f172b0f7598d6e2b306caef" +source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" dependencies = [ "ark-serialize", "ark-std", From 45e6d005538a078807607bf6becb1f6f9c513ef4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 13:08:46 +0100 Subject: [PATCH 125/364] fix std leak --- primitives/arkworks/Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 01cf52c2d4f3e..b191d65d77974 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -28,9 +28,11 @@ std = [ "ark-serialize/std", "ark-ff/std", "ark-ec/std", + "ark-std/std", "ark-bls12-377/std", "ark-bls12-381/std", "ark-bw6-761/std", "ark-ed-on-bls12-381/std", "ark-ed-on-bls12-377/std", + "sp-std/std" ] From 500d658fbec28b85f0b220c4856fc3e0de7b3268 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 13:12:20 +0100 Subject: [PATCH 126/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96e224441e64d..a3e6d92e2cecd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9945,7 +9945,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#9078250d1881f4c54025f0d04a74c797d183ba36" +source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" dependencies = [ "ark-serialize", "ark-std", From 9243b22dc1682ee65a58de2bad0c532339cd2652 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 13:30:14 +0100 Subject: [PATCH 127/364] cargo update --- Cargo.lock | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3e6d92e2cecd..ed612de5659af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,11 +9932,12 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-models", + "ark-r1cs-std", "ark-serialize", "ark-std", "sp-ark-utils", @@ -9945,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#2c8e7b692636c9c7ba04b9f79d4d8bdeea50aff9" +source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" dependencies = [ "ark-serialize", "ark-std", From 61a4537fdb10316e5b0f9cd71cce5f0f9b9e0859 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 14:00:58 +0100 Subject: [PATCH 128/364] cargo update --- Cargo.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed612de5659af..c8b95bb953497 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-ec", "ark-ff", @@ -361,9 +361,9 @@ dependencies = [ [[package]] name = "ark-r1cs-std" -version = "0.4.0-alpha.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccffa53ace7907d7b0e6852f5d1738daaadae44f1e7c75d0fb2aa4d26a0fa7a3" +checksum = "de1d1472e5cb020cb3405ce2567c91c8d43f21b674aef37b0202f5c3304761db" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#0592f2255e9e5b4993926199011f9e1b6df7305b" +source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" dependencies = [ "ark-serialize", "ark-std", From f3e0b0776973c2044ddcdc3710dba3460fb39ff1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 15:15:20 +0100 Subject: [PATCH 129/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c8b95bb953497..0a9b60a1f5d4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#39d6734061ba8505def1093753cf74b6a53da068" +source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" dependencies = [ "ark-serialize", "ark-std", From 64af0ab37a23e45147c80ac780c241cb691e32f2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 15:19:41 +0100 Subject: [PATCH 130/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a9b60a1f5d4d..db813a61d1ae3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#cd63d67481855b34205286c7cc239b8e2950a1b4" +source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" dependencies = [ "ark-serialize", "ark-std", From 538d31fc511f37f24be4090da4f305066b8d4b01 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 15:29:58 +0100 Subject: [PATCH 131/364] import vec --- primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/src/utils.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index b191d65d77974..baf874fcdaaf2 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -20,7 +20,7 @@ ark-bls12-381 = { version = "0.4.0-alpha", features = ["curve"], default-feature ark-bw6-761 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-381 = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0-alpha", default-features = false } -sp-std = { version = "5.0.0", default-features = false, path = "../std" } +sp-std = { version = "5.0.0", path = "../std", default-features = false } [features] default = ["std"] diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 2842e072a5408..869ffb3bc503b 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,5 +1,5 @@ use ark_serialize::{CanonicalSerialize, Compress}; -use ark_std::io::Cursor; +use ark_std::{io::Cursor, vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; From 993c4e3e4a6418f9fbbf209b51943bd2b03f678f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 15:31:36 +0100 Subject: [PATCH 132/364] import vec::Vec --- primitives/arkworks/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 869ffb3bc503b..05da2e2f7691d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,5 +1,5 @@ use ark_serialize::{CanonicalSerialize, Compress}; -use ark_std::{io::Cursor, vec}; +use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; From fc0a1e17363721c429eca3c4d8cd4579e107992a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 17 Jan 2023 15:34:18 +0100 Subject: [PATCH 133/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index db813a61d1ae3..6fbfa067bca10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-ec", "ark-ff", @@ -9878,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9918,7 +9918,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#f07aafa74b90061a265a2e8606825aad07d7ed61" +source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" dependencies = [ "ark-serialize", "ark-std", From e2aaca21a671f414c1522ec7c889240b5db5bad1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 06:44:47 +0100 Subject: [PATCH 134/364] update 0.4.0 arkworks release --- Cargo.lock | 101 ++++++++++++++++------------ Cargo.toml | 15 ++--- primitives/arkworks/Cargo.toml | 20 +++--- primitives/arkworks/test/Cargo.toml | 26 +++---- primitives/io/Cargo.toml | 2 +- 5 files changed, 87 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6fbfa067bca10..d0b2b053ffe78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,7 +205,8 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "390ae58ca5e3ed40d8c1eb9c939931258562c1c331a0ea10d76091f450c50b43" dependencies = [ "ark-ec", "ark-ff", @@ -223,8 +224,9 @@ dependencies = [ [[package]] name = "ark-bls12-377" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ "ark-ec", "ark-ff", @@ -233,8 +235,9 @@ dependencies = [ [[package]] name = "ark-bls12-381" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ "ark-ec", "ark-ff", @@ -244,8 +247,9 @@ dependencies = [ [[package]] name = "ark-bw6-761" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" dependencies = [ "ark-bls12-377", "ark-ec", @@ -256,7 +260,8 @@ dependencies = [ [[package]] name = "ark-ec" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d7f0c52aff14f216200a9eee06a9990fee2e51fc9599e226df448ad3232886" dependencies = [ "ark-ff", "ark-poly", @@ -271,8 +276,9 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" dependencies = [ "ark-bls12-377", "ark-ec", @@ -282,8 +288,9 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-381" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#69a9c3513bfe94ebd03efaa0ac49d63ea4afbc3a" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" dependencies = [ "ark-bls12-381", "ark-ec", @@ -294,7 +301,8 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ee31d8869a353433524dbd5a8f51f95cdafe7c66d458956ec13aa737198562" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -313,7 +321,8 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc8f7ec7fdcc20f3f110783c043d80479b42f500003cf92b71ca90f34a2ba0e" dependencies = [ "quote", "syn", @@ -322,7 +331,8 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15aa320e38052d644e569740bad208e5f9f5fafedcc9e6b1557f723be1b7ff8d" dependencies = [ "num-bigint", "num-traits", @@ -333,8 +343,8 @@ dependencies = [ [[package]] name = "ark-models" -version = "0.3.0" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-ec", "ark-ff", @@ -350,7 +360,8 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2e8741caf33ab3063f1fc65617716ffb18cba8e872998aa2eef0d4e4b56d1" dependencies = [ "ark-ff", "ark-serialize", @@ -391,7 +402,8 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ea39d00a8a4c832e6f6520e58ccec7bf909c4845863512e9b8656fd47df355" dependencies = [ "ark-serialize-derive", "ark-std", @@ -402,7 +414,8 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.4.0" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#c2f23fbd479e3d47b1ced166c5d545b563e03ad8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "101333772a4020c883890811500d5ecc704c545a90140629af5c3b9f00d78953" dependencies = [ "proc-macro2", "quote", @@ -956,9 +969,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byte-slice-cast" @@ -9877,8 +9890,8 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" -version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9891,8 +9904,8 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9904,8 +9917,8 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" -version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9917,8 +9930,8 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" -version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9931,8 +9944,8 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" -version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9945,8 +9958,8 @@ dependencies = [ [[package]] name = "sp-ark-utils" -version = "0.4.0-alpha.1" -source = "git+https://github.com/paritytech/ark-substrate#89d8c16c856996e4d0015992c6949409775de5ff" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" dependencies = [ "ark-serialize", "ark-std", @@ -9954,7 +9967,7 @@ dependencies = [ [[package]] name = "sp-arkworks" -version = "0.0.1" +version = "0.4.0" dependencies = [ "ark-bls12-377", "ark-bls12-381", @@ -9970,7 +9983,7 @@ dependencies = [ [[package]] name = "sp-arkworks-test" -version = "0.4.0-alpha.1" +version = "0.4.0" dependencies = [ "ark-algebra-test-templates", "ark-ec", @@ -11387,9 +11400,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.24.1" +version = "1.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" +checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb" dependencies = [ "autocfg", "bytes", @@ -12067,9 +12080,9 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" +checksum = "29ab2fe77b325731603297debb4573e002d06ae0aa1f4dc108585c81961e0609" dependencies = [ "leb128", ] @@ -12400,9 +12413,9 @@ dependencies = [ [[package]] name = "wast" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" +checksum = "a1f621e6e9af96438d3e05f0699da5b1dae59f2df964a2982166aa9b03c5b599" dependencies = [ "leb128", "memchr", @@ -12412,9 +12425,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.52" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" +checksum = "5dd18c1168d7e8743d9b4f713c0203924f5dcc4a3983eb5e584de9614f9fccde" dependencies = [ "wast", ] diff --git a/Cargo.toml b/Cargo.toml index 51a5a2ab19d33..a2df69c0fb321 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -325,12 +325,9 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -ark-serialize = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-ff = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-ec = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-poly = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/algebra/", branch = "releases" } -ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } -ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } -ark-bw6-761 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } -ark-ed-on-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } -ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/arkworks-rs/curves" } +ark-models = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index baf874fcdaaf2..803f4399e5a8c 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-arkworks" -version = "0.0.1" +version = "0.4.0" authors = ["Parity Technologies "] edition = "2021" license = "Apache-2.0" @@ -11,15 +11,15 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-ff = { version = "0.4.0-alpha", default-features = false } -ark-ec = { version = "0.4.0-alpha", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bls12-377 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } -ark-bls12-381 = { version = "0.4.0-alpha", features = ["curve"], default-features = false } -ark-bw6-761 = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-381 = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-377 = { version = "0.4.0-alpha", default-features = false } +ark-serialize = { version = "0.4.0", default-features = false } +ark-ff = { version = "0.4.0", default-features = false } +ark-ec = { version = "0.4.0", default-features = false } +ark-std = { version = "0.4.0", default-features = false } +ark-bls12-377 = { version = "0.4.0", features = ["curve"], default-features = false } +ark-bls12-381 = { version = "0.4.0", features = ["curve"], default-features = false } +ark-bw6-761 = { version = "0.4.0", default-features = false } +ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } +ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } [features] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 46af952c121cd..92307cfc32798 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "sp-arkworks-test" -version = "0.4.0-alpha.1" -authors = [ "arkworks contributors" ] +version = "0.4.0" +authors = ["Parity Technologies ", "Achim Schneider ", "arkworks contributors" ] repository = "https://github.com/paritytech/substrate/" -description = "The BLS12-377 pairing-friendly elliptic curve, optimized for Substrate" +description = "Tests for arkwokrs pairing-friendly elliptic curves, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] @@ -12,19 +12,19 @@ edition = "2021" [dependencies] ark-ff = { version="0.4.0-alpha", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +ark-std = { version = "0.4.0", default-features = false } +ark-serialize = { version = "0.4.0", default-features = false } +ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] sp-io = { version = "7.0.0", default-features = false, path = "../../io" } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +ark-ec = { version = "0.4.0", default-features = false } +ark-algebra-test-templates = { version = "0.4.0", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", default-features = false } +sp-ark-bw6-761 = { version = "0.4.0", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } [features] default = [ "curve" ] diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index f56bcfd34d131..333b9e330887f 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -26,7 +26,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-arkworks = { version = "0.0.1", default-features = false, optional = true, path = "../arkworks" } +sp-arkworks = { version = "0.4.0", default-features = false, optional = true, path = "../arkworks" } log = { version = "0.4.17", optional = true } futures = { version = "0.3.21", features = ["thread-pool"], optional = true } secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], optional = true } From 2844607d870ef87e459daafbd02e484b9466eff2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 07:47:23 +0100 Subject: [PATCH 135/364] update --- Cargo.lock | 14 +++++++------- primitives/arkworks/test/Cargo.toml | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b9349f713913..bb005bf8863f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -344,7 +344,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-ec", "ark-ff", @@ -9893,7 +9893,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9907,7 +9907,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9920,7 +9920,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9933,7 +9933,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9947,7 +9947,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9c27874805a6cc8d0a15201e61ccaf5ad16772f1" +source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 92307cfc32798..cbe8d14077572 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -11,20 +11,20 @@ license = "MIT/Apache-2.0" edition = "2021" [dependencies] -ark-ff = { version="0.4.0-alpha", default-features = false } +ark-ff = { version="0.4.0", default-features = false } ark-std = { version = "0.4.0", default-features = false } ark-serialize = { version = "0.4.0", default-features = false } ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] -sp-io = { version = "7.0.0", default-features = false, path = "../../io" } +sp-io = { version = "7.0.0", path = "../../io", default-features = false } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", default-features = false } -sp-ark-bw6-761 = { version = "0.4.0", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "curve" ] From 91de5f154aa52f0fc1d3c6517ad11fd798dd461c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 07:50:35 +0100 Subject: [PATCH 136/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb005bf8863f8..5bc78ab7ce08b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -344,7 +344,7 @@ dependencies = [ [[package]] name = "ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-ec", "ark-ff", @@ -9893,7 +9893,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9907,7 +9907,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9920,7 +9920,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9933,7 +9933,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9947,7 +9947,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1e5f66627640a08c469155d9c6e0d4f9524a4be8" +source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" dependencies = [ "ark-serialize", "ark-std", From ec470d49d5880e0cc8dc2345c8e66b57cf4685d8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 07:52:44 +0100 Subject: [PATCH 137/364] sp-arkworks/std --- primitives/io/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index 333b9e330887f..05ae365c36197 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -53,7 +53,7 @@ std = [ "secp256k1", "sp-runtime-interface/std", "sp-tracing/std", - "sp-arkworks", + "sp-arkworks/std", "tracing/std", "tracing-core/std", "log", From 0f1dc01277bba593a237f36a37e7396fbd67d4f7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 17:34:13 +0100 Subject: [PATCH 138/364] ark-models -> sp-ark-models --- Cargo.toml | 2 +- primitives/arkworks/test/Cargo.toml | 4 ++-- primitives/arkworks/test/tests/bls12_381/mod.rs | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a2df69c0fb321..1a920538b8d2b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -325,7 +325,7 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -ark-models = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-models = { git = "https://github.com/paritytech/ark-substrate" } sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate" } diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index cbe8d14077572..e7b4aa89d3f3e 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -14,7 +14,7 @@ edition = "2021" ark-ff = { version="0.4.0", default-features = false } ark-std = { version = "0.4.0", default-features = false } ark-serialize = { version = "0.4.0", default-features = false } -ark-models = { version = "0.4.0", default-features = false } +sp-ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] sp-io = { version = "7.0.0", path = "../../io", default-features = false } @@ -32,7 +32,7 @@ std = [ "ark-ff/std", "ark-std/std", "ark-serialize/std", - "ark-models/std", + "sp-ark-models/std", "sp-io/std", "ark-ec/std", "ark-algebra-test-templates/std", diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 8fb718672dc8b..354d9f004b4db 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,6 +1,6 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, UniformRand, Zero}; -use ark_models::{AffineRepr, CurveGroup, Group}; +use sp_ark_models::{AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec, vec::Vec, One}; @@ -68,7 +68,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } @@ -91,7 +91,7 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } From 3d3136be39168a18fe08afa258fa2e26f2dc4f66 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 18 Jan 2023 17:36:14 +0100 Subject: [PATCH 139/364] cargo update --- Cargo.lock | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5bc78ab7ce08b..a31c417b36ef1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -341,22 +341,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-models" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "getrandom 0.2.8", - "itertools", - "num-traits", - "zeroize", -] - [[package]] name = "ark-poly" version = "0.4.0" @@ -9893,75 +9877,91 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-bls12-377", "ark-ff", - "ark-models", "ark-r1cs-std", "ark-serialize", "ark-std", + "sp-ark-models", "sp-ark-utils", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-bls12-381", "ark-ff", - "ark-models", "ark-serialize", "ark-std", + "sp-ark-models", "sp-ark-utils", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-bw6-761", "ark-ff", - "ark-models", "ark-serialize", "ark-std", + "sp-ark-models", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", - "ark-models", "ark-r1cs-std", "ark-serialize", "ark-std", + "sp-ark-models", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", - "ark-models", "ark-r1cs-std", "ark-serialize", "ark-std", + "sp-ark-models", "sp-ark-utils", ] +[[package]] +name = "sp-ark-models" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.8", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1d5bbe98674fd3993c83e770205441b98fe074d0" +source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" dependencies = [ "ark-serialize", "ark-std", @@ -9990,7 +9990,6 @@ dependencies = [ "ark-algebra-test-templates", "ark-ec", "ark-ff", - "ark-models", "ark-serialize", "ark-std", "sp-ark-bls12-377", @@ -9998,6 +9997,7 @@ dependencies = [ "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381", + "sp-ark-models", "sp-io", ] From 7d7e8622dba28f19e8098d84fa38b8bc46a93a38 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 20 Jan 2023 15:44:01 +0100 Subject: [PATCH 140/364] add ellipti_curves to SubstrateHostFunctions --- Cargo.lock | 78 ++++++++++++++++++++-------------------- primitives/io/src/lib.rs | 1 + 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a31c417b36ef1..815e3a63df746 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -586,9 +586,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.61" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" +checksum = "689894c2db1ea643a50834b999abf1c110887402542955ff5451dab8f861f9ed" dependencies = [ "proc-macro2", "quote", @@ -1691,9 +1691,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" +checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" dependencies = [ "cc", "cxxbridge-flags", @@ -1703,9 +1703,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" +checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" dependencies = [ "cc", "codespan-reporting", @@ -1718,15 +1718,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" +checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" [[package]] name = "cxxbridge-macro" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" +checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" dependencies = [ "proc-macro2", "quote", @@ -1981,9 +1981,9 @@ dependencies = [ [[package]] name = "dissimilar" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5f0c7e4bd266b8ab2550e6238d2e74977c23c15536ac7be45e9c95e2e3fbbb" +checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e" [[package]] name = "doc-comment" @@ -3483,7 +3483,7 @@ checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi 0.2.6", "io-lifetimes 1.0.4", - "rustix 0.36.6", + "rustix 0.36.7", "windows-sys 0.42.0", ] @@ -4539,7 +4539,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.6", + "rustix 0.36.7", ] [[package]] @@ -5285,9 +5285,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" dependencies = [ "num-traits", ] @@ -6927,9 +6927,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a" +checksum = "e7ab01d0f889e957861bc65888d5ccbe82c158d0270136ba46820d43837cdf72" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -6942,9 +6942,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd" +checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7954,9 +7954,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.6" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" dependencies = [ "bitflags", "errno", @@ -9502,9 +9502,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "645926f31b250a2dca3c232496c2d898d91036e45ca0e97e0e2390c54e11be36" dependencies = [ "bitflags", "core-foundation", @@ -9515,9 +9515,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -9877,7 +9877,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9891,7 +9891,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9917,7 +9917,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9931,7 +9931,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9945,7 +9945,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-ec", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#074f774d6b038badb22b43495a8740f65639219e" +source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" dependencies = [ "ark-serialize", "ark-std", @@ -11484,9 +11484,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -11848,9 +11848,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "0046be40136ef78dc325e0edefccf84ccddacd0afcc1ca54103fa3c61bbdab1d" [[package]] name = "unicode-ident" @@ -12696,9 +12696,9 @@ dependencies = [ [[package]] name = "which" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ "either", "libc", diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index da6986253768e..edea6d8c73107 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1851,6 +1851,7 @@ pub type SubstrateHostFunctions = ( wasm_tracing::HostFunctions, offchain::HostFunctions, crypto::HostFunctions, + elliptic_curves::HostFunctions, hashing::HostFunctions, allocator::HostFunctions, panic_handler::HostFunctions, From 85e4c048ac6473f73c98ad068809efa615b43f5b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 21 Jan 2023 08:34:59 +0100 Subject: [PATCH 141/364] std leak --- primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/src/lib.rs | 2 ++ primitives/arkworks/test/Cargo.toml | 2 +- primitives/arkworks/test/lib.rs | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 803f4399e5a8c..3761063a1fc83 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -23,7 +23,7 @@ ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } [features] -default = ["std"] +default = [ ] std = [ "ark-serialize/std", "ark-ff/std", diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 84bb57b0ee69b..f7a8e04ba025b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(feature = "std"), no_std)] + pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index e7b4aa89d3f3e..e9349ad7ca08b 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -27,7 +27,7 @@ sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/parityte sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] -default = [ "curve" ] +default = [ ] std = [ "ark-ff/std", "ark-std/std", diff --git a/primitives/arkworks/test/lib.rs b/primitives/arkworks/test/lib.rs index bf9d749459eea..c0d41f9771e21 100644 --- a/primitives/arkworks/test/lib.rs +++ b/primitives/arkworks/test/lib.rs @@ -1,2 +1,4 @@ +#![cfg_attr(not(feature = "std"), no_std)] + #[cfg(test)] mod tests; \ No newline at end of file From 5aaa29c4933f5875a556bfa8f7618cb65df019fa Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 21 Jan 2023 08:40:52 +0100 Subject: [PATCH 142/364] std leak --- primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/test/Cargo.toml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 3761063a1fc83..84810c84f6274 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -23,7 +23,7 @@ ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } [features] -default = [ ] +default = [ "std" ] std = [ "ark-serialize/std", "ark-ff/std", diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index e9349ad7ca08b..af057754ff9b0 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -27,7 +27,7 @@ sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/parityte sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] -default = [ ] +default = [ "std" ] std = [ "ark-ff/std", "ark-std/std", @@ -42,7 +42,6 @@ std = [ "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381/std", ] - curve = [ "scalar_field", "base_field" ] scalar_field = [] base_field = [] From 98d38bab008d358bb20958338c7ecf7d86d3320d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 21 Jan 2023 08:54:47 +0100 Subject: [PATCH 143/364] update --- Cargo.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 235ffccb0aa88..058feaef20089 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2963,9 +2963,9 @@ checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" [[package]] name = "git2" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be36bc9e0546df253c0cc41fd0af34f5e92845ad8509462ec76672fac6997f5b" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ "bitflags", "libc", @@ -3837,9 +3837,9 @@ checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libgit2-sys" -version = "0.14.1+1.5.0" +version = "0.14.2+1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a07fb2692bc3593bda59de45a502bb3071659f2c515e28c71e728306b038e17" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" dependencies = [ "cc", "libc", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9906,7 +9906,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9919,7 +9919,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9960,7 +9960,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-ec", "ark-ff", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b62bd30d3a7d73376cd798ad280828457eea26d3" +source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" dependencies = [ "ark-serialize", "ark-std", @@ -11863,9 +11863,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046be40136ef78dc325e0edefccf84ccddacd0afcc1ca54103fa3c61bbdab1d" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" @@ -12097,9 +12097,9 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ab2fe77b325731603297debb4573e002d06ae0aa1f4dc108585c81961e0609" +checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" dependencies = [ "leb128", ] @@ -12430,9 +12430,9 @@ dependencies = [ [[package]] name = "wast" -version = "51.0.0" +version = "52.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f621e6e9af96438d3e05f0699da5b1dae59f2df964a2982166aa9b03c5b599" +checksum = "829fb867c8e82d21557a2c6c5b3ed8e8f7cdd534ea782b9ecf68bede5607fe4b" dependencies = [ "leb128", "memchr", @@ -12442,9 +12442,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.53" +version = "1.0.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd18c1168d7e8743d9b4f713c0203924f5dcc4a3983eb5e584de9614f9fccde" +checksum = "3493e7c82d8e9a75e69ecbfe6f324ca1c4e2ae89f67ccbb22f92282e2e27bb23" dependencies = [ "wast", ] From e78e992a01eae075375db1bbf3f330172c021937 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 22 Jan 2023 10:42:54 +0100 Subject: [PATCH 144/364] cargo update --- Cargo.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 058feaef20089..fdd8793c24387 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4506,9 +4506,9 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9906,7 +9906,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9919,7 +9919,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9946,7 +9946,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9960,7 +9960,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-ec", "ark-ff", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#437ae44ed856ae5a26c0d1dd98952168dfde38ed" +source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" dependencies = [ "ark-serialize", "ark-std", From db2d3af527292f353cf5007e052a0ca29ac55e11 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 24 Jan 2023 15:38:27 +0100 Subject: [PATCH 145/364] cargo update --- Cargo.lock | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index ddc503a0a5d82..48b9ee0e83e9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1834,6 +1834,17 @@ dependencies = [ "rusticata-macros", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "derive-syn-parse" version = "0.1.5" @@ -9231,7 +9242,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.0.32", + "clap 4.1.1", "futures", "log", "nix 0.26.1", From bb22bb8a0dacd7a4f63de9201737abc952311aa1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 25 Jan 2023 16:29:39 +0100 Subject: [PATCH 146/364] cargo update --- Cargo.lock | 135 ++++++++++++++++++++++++++--------------------------- 1 file changed, 67 insertions(+), 68 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1b0dfb0c83d88..42c29e06cca42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,7 +27,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.27.0", + "gimli 0.27.1", ] [[package]] @@ -139,9 +139,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", "getrandom 0.2.8", @@ -193,9 +193,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0224938f92e7aef515fac2ff2d18bd1115c1394ddf4a092e0c87e8be9499ee5" +checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" [[package]] name = "arc-swap" @@ -587,9 +587,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.62" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "689894c2db1ea643a50834b999abf1c110887402542955ff5451dab8f861f9ed" +checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" dependencies = [ "proc-macro2", "quote", @@ -643,7 +643,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.30.2", + "object 0.30.3", "rustc-demangle", ] @@ -1110,7 +1110,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.1", + "clap 4.1.4", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1198,9 +1198,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.1" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2" +checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" dependencies = [ "bitflags", "clap_derive", @@ -1213,11 +1213,11 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce8955d4e8cd4f28f9a01c93a050194c4d131e73ca02f6636bcddbed867014d7" +checksum = "3d6540eedc41f8a5a76cf3d8d458057dcdf817be4158a55b5f861f7a5483de75" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", ] [[package]] @@ -2408,7 +2408,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.1", + "clap 4.1.4", "comfy-table", "frame-benchmarking", "frame-support", @@ -2485,7 +2485,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2971,9 +2971,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" +checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" [[package]] name = "git2" @@ -3087,7 +3087,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.2", + "ahash 0.8.3", ] [[package]] @@ -4753,9 +4753,9 @@ dependencies = [ [[package]] name = "multihash-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ "proc-macro-crate", "proc-macro-error", @@ -4878,9 +4878,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" dependencies = [ "bytes", "futures", @@ -4916,9 +4916,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ "bitflags", "cfg-if", @@ -4933,7 +4933,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.1", + "clap 4.1.4", "derive_more", "fs_extra", "futures", @@ -4970,7 +4970,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.1", + "clap 4.1.4", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5091,7 +5091,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5150,7 +5150,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "generate-bags", "kitchensink-runtime", ] @@ -5159,7 +5159,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5388,9 +5388,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.2" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8c786513eb403643f2a88c244c2aaa270ef2153f55094587d0c48a3cf22a83" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "memchr", ] @@ -7104,9 +7104,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4257b4a04d91f7e9e6290be5d3da4804dd5784fafde3a497d73eb2b4a158c30a" +checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" dependencies = [ "thiserror", "ucd-trie", @@ -7114,9 +7114,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241cda393b0cdd65e62e07e12454f1f25d57017dcc514b1514cd3c4645e3a0a6" +checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" dependencies = [ "pest", "pest_generator", @@ -7124,9 +7124,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46b53634d8c8196302953c74d5352f33d0c512a9499bd2ce468fc9f4128fa27c" +checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" dependencies = [ "pest", "pest_meta", @@ -7137,9 +7137,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef4f1332a8d4678b41966bb4cc1d0676880e84183a1ecc3f4b69f03e99c7a51" +checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" dependencies = [ "once_cell", "pest", @@ -7371,11 +7371,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.2.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "once_cell", "thiserror", "toml", ] @@ -7694,9 +7693,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -8204,7 +8203,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.1", + "clap 4.1.4", "fdlimit", "futures", "futures-timer", @@ -9242,10 +9241,10 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "futures", "log", - "nix 0.26.1", + "nix 0.26.2", "sc-client-db", "sc-utils", "sp-core", @@ -9452,7 +9451,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.2", + "ahash 0.8.3", "cfg-if", "hashbrown 0.13.2", ] @@ -9562,9 +9561,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645926f31b250a2dca3c232496c2d898d91036e45ca0e97e0e2390c54e11be36" +checksum = "7c4437699b6d34972de58652c68b98cb5b53a4199ab126db8e20ec8ded29a721" dependencies = [ "bitflags", "core-foundation", @@ -9937,7 +9936,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9951,7 +9950,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9964,7 +9963,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9977,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9991,7 +9990,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10005,7 +10004,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-ec", "ark-ff", @@ -10021,7 +10020,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#b1c4f9b352af69d471efab2037e9f04f0285fdc9" +source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" dependencies = [ "ark-serialize", "ark-std", @@ -10445,7 +10444,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10817,9 +10816,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44528162f980c0e03c71e005d334332c8da0aec9f2b0b4bdc557ed4a9f24776" +checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" dependencies = [ "Inflector", "num-format", @@ -10934,7 +10933,7 @@ dependencies = [ name = "subkey" version = "2.0.2" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "sc-cli", ] @@ -10962,7 +10961,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "frame-support", "frame-system", "sc-cli", @@ -11802,7 +11801,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.1.1", + "clap 4.1.4", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12475,9 +12474,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.1" +version = "52.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829fb867c8e82d21557a2c6c5b3ed8e8f7cdd534ea782b9ecf68bede5607fe4b" +checksum = "707a9fd59b0144c530f0a31f21737036ffea6ece492918cae0843dd09b6f9bc9" dependencies = [ "leb128", "memchr", @@ -12487,9 +12486,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.55" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3493e7c82d8e9a75e69ecbfe6f324ca1c4e2ae89f67ccbb22f92282e2e27bb23" +checksum = "91d73cbaa81acc2f8a3303e2289205c971d99c89245c2f56ab8765c4daabc2be" dependencies = [ "wast", ] From 691c96e1fd1a1e0217c79010355ea81686302e6b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 26 Jan 2023 20:49:47 +0100 Subject: [PATCH 147/364] cargo update --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 94ea8ba2a2402..5883b5af0256e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4967,7 +4967,7 @@ dependencies = [ "jsonrpsee", "kitchensink-runtime", "log", - "nix 0.26.1", + "nix 0.26.2", "node-executor", "node-inspect", "node-primitives", @@ -6944,9 +6944,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.2.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ab01d0f889e957861bc65888d5ccbe82c158d0270136ba46820d43837cdf72" +checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -8618,7 +8618,7 @@ dependencies = [ name = "sc-finality-grandpa" version = "0.10.0-dev" dependencies = [ - "ahash 0.8.2", + "ahash 0.8.3", "array-bytes", "assert_matches", "async-trait", @@ -8818,7 +8818,7 @@ dependencies = [ name = "sc-network-gossip" version = "0.10.0-dev" dependencies = [ - "ahash 0.8.2", + "ahash 0.8.3", "futures", "futures-timer", "libp2p", @@ -10703,7 +10703,7 @@ dependencies = [ name = "sp-trie" version = "7.0.0" dependencies = [ - "ahash 0.8.2", + "ahash 0.8.3", "array-bytes", "criterion", "hash-db", From cc74105dc99f1b6a9a22f83c3e0024bddce41e11 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 28 Jan 2023 07:18:26 +0100 Subject: [PATCH 148/364] cargo update --- Cargo.lock | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab9fc7425622f..e579c219a430c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -683,6 +683,15 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +[[package]] +name = "basic-toml" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a72cac83e42560384ff91957b3a739eba64fb0db58049f42884ceb3abb57378" +dependencies = [ + "serde", +] + [[package]] name = "beef" version = "0.5.2" @@ -1692,9 +1701,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.87" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" +checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8" dependencies = [ "cc", "cxxbridge-flags", @@ -1704,9 +1713,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.87" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" +checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8" dependencies = [ "cc", "codespan-reporting", @@ -1719,15 +1728,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.87" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" +checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971" [[package]] name = "cxxbridge-macro" -version = "1.0.87" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" +checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" dependencies = [ "proc-macro2", "quote", @@ -2099,9 +2108,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" @@ -11833,10 +11842,11 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed2c57956f91546d4d33614265a85d55c8e1ab91484853a10335894786d7db6" +checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" dependencies = [ + "basic-toml", "dissimilar", "glob", "once_cell", @@ -11844,7 +11854,6 @@ dependencies = [ "serde_derive", "serde_json", "termcolor", - "toml", ] [[package]] From 4cb2ecc376f495dff5948fc99e9e206a42a7ee07 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 28 Jan 2023 21:00:43 +0100 Subject: [PATCH 149/364] cargo update --- Cargo.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e579c219a430c..2d068982d766d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1448,9 +1448,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" dependencies = [ "crc-catalog", ] @@ -4876,9 +4876,9 @@ dependencies = [ [[package]] name = "netlink-packet-utils" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25af9cf0dc55498b7bd94a1508af7a78706aa0ab715a73c5169273e03c84845e" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ "anyhow", "byteorder", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9962,7 +9962,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9975,7 +9975,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10016,7 +10016,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-ec", "ark-ff", @@ -10032,7 +10032,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#cc0c3496554180b2a3be45d46e9d04e9866c4e75" +source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" dependencies = [ "ark-serialize", "ark-std", From 2a1309c848660f4654ffa882ed90f3bebc57ecab Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 08:15:20 +0100 Subject: [PATCH 150/364] disable compression --- Cargo.toml | 12 ++++---- primitives/arkworks/src/bls12_377.rs | 30 +++++++++---------- primitives/arkworks/src/bls12_381.rs | 30 +++++++++---------- primitives/arkworks/src/bw6_761.rs | 30 +++++++++---------- primitives/arkworks/src/ed_on_bls12_377.rs | 12 ++++---- primitives/arkworks/src/ed_on_bls12_381.rs | 24 +++++++-------- primitives/arkworks/src/utils.rs | 2 +- primitives/arkworks/test/Cargo.toml | 10 +++---- .../arkworks/test/tests/bls12_381/mod.rs | 4 +-- 9 files changed, 77 insertions(+), 77 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 623ed47eecad4..8c0ea67ac8e66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -325,9 +325,9 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -sp-ark-models = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate" } +sp-ark-models = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index d3740931bd37d..c64d864e3e5e7 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G2Prepared::from) @@ -69,7 +69,7 @@ pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); @@ -82,10 +82,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -95,10 +95,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -108,10 +108,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -121,10 +121,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -139,7 +139,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -151,7 +151,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -172,7 +172,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -184,7 +184,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 81741f234daf9..998808cd67c10 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G2Prepared::from) @@ -69,7 +69,7 @@ pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); @@ -82,10 +82,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -95,10 +95,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -108,10 +108,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -121,10 +121,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -139,7 +139,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -151,7 +151,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -172,7 +172,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -184,7 +184,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 7d7ad410d998e..fb9b71c780174 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G2Prepared::from) @@ -69,7 +69,7 @@ pub fn final_exponentiation(target: Vec) -> Vec { let cursor = Cursor::new(target); let target = ::TargetField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); @@ -82,10 +82,10 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -95,10 +95,10 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -108,10 +108,10 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -121,10 +121,10 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -139,7 +139,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -151,7 +151,7 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -172,7 +172,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -184,7 +184,7 @@ pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 80056dff97fcc..0a28305c7e03d 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -33,12 +33,12 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = twisted_edwards::Projective::::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -50,12 +50,12 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = twisted_edwards::Affine::::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -70,7 +70,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); twisted_edwards::Affine::::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -82,7 +82,7 @@ pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index a2fe6bddbb3f4..cabee20689b0e 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -37,12 +37,12 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = ark_ec::short_weierstrass::Projective::::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -52,10 +52,10 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = SWAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + let base = SWAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -67,12 +67,12 @@ pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); let base = twisted_edwards::Projective::::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_projective(&base, &scalar); @@ -82,10 +82,10 @@ pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { let cursor = Cursor::new(base); - let base = TEAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + let base = TEAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) .unwrap(); let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); + let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); let result = ::mul_affine(&base, &scalar); @@ -98,7 +98,7 @@ pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - TEAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + TEAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) .unwrap() }) .collect(); @@ -108,7 +108,7 @@ pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() @@ -126,7 +126,7 @@ pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - SWAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + SWAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) .unwrap() }) .collect(); @@ -136,7 +136,7 @@ pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { let cursor = Cursor::new(a); ::ScalarField::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .unwrap() diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 05da2e2f7691d..e10169906e024 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -2,7 +2,7 @@ use ark_serialize::{CanonicalSerialize, Compress}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { - let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; + let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; let mut cursor = Cursor::new(&mut serialized_result[..]); result.serialize_compressed(&mut cursor).unwrap(); serialized_result diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index af057754ff9b0..285493ada3ade 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -20,11 +20,11 @@ sp-ark-models = { version = "0.4.0", default-features = false } sp-io = { version = "7.0.0", path = "../../io", default-features = false } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", features = [ "curve" ], default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", features = [ "curve" ], default-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } [features] default = [ "std" ] diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 354d9f004b4db..09340d566862b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -132,7 +132,7 @@ macro_rules! test_vectors { #[test] fn g1_compressed_valid_test_vectors() { let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); } #[test] @@ -144,7 +144,7 @@ fn g1_uncompressed_valid_test_vectors() { #[test] fn g2_compressed_valid_test_vectors() { let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); } #[test] From df8a1f1356a9848a8bae5e6c50f7f1a8a3a54ccb Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 08:40:46 +0100 Subject: [PATCH 151/364] serialize_uncomrpessed --- Cargo.lock | 14 +++++++------- primitives/arkworks/src/utils.rs | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c0871092a8ea9..3ce80a6a97b0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9928,7 +9928,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9942,7 +9942,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9955,7 +9955,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9968,7 +9968,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9982,7 +9982,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-ec", "ark-ff", @@ -10012,7 +10012,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e10169906e024..48fa4bb04f596 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -4,6 +4,6 @@ use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_compressed(&mut cursor).unwrap(); + result.serialize_uncompressed(&mut cursor).unwrap(); serialized_result } From b688d6dc8a1ad58404dc057a6ad6b67fe251441d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 08:52:48 +0100 Subject: [PATCH 152/364] cargo update --- Cargo.lock | 235 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 132 insertions(+), 103 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3ce80a6a97b0a..b73b37a48f06b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", @@ -936,9 +936,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" dependencies = [ "memchr", "once_cell", @@ -981,9 +981,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -1710,9 +1710,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8" +checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" dependencies = [ "cc", "cxxbridge-flags", @@ -1722,9 +1722,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8" +checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" dependencies = [ "cc", "codespan-reporting", @@ -1737,15 +1737,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971" +checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" [[package]] name = "cxxbridge-macro" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" +checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" dependencies = [ "proc-macro2", "quote", @@ -1754,9 +1754,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1764,9 +1764,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", @@ -1778,9 +1778,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", @@ -2764,9 +2764,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "funty" @@ -3125,9 +3125,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -3147,6 +3147,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" + [[package]] name = "hex" version = "0.4.3" @@ -3283,9 +3289,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3491,12 +3497,12 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -3525,14 +3531,14 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes 1.0.4", - "rustix 0.36.7", - "windows-sys 0.42.0", + "hermit-abi 0.3.0", + "io-lifetimes 1.0.5", + "rustix 0.36.8", + "windows-sys 0.45.0", ] [[package]] @@ -3561,9 +3567,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -4582,7 +4588,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.7", + "rustix 0.36.8", ] [[package]] @@ -7030,7 +7036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.6", + "parking_lot_core 0.9.7", ] [[package]] @@ -7049,15 +7055,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -7116,9 +7122,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7126,9 +7132,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7136,9 +7142,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", @@ -7149,9 +7155,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7160,9 +7166,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", @@ -7417,9 +7423,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ "unicode-ident", ] @@ -7995,16 +8001,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.7" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.4", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -9639,9 +9645,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" dependencies = [ "itoa", "ryu", @@ -9782,9 +9788,9 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" dependencies = [ "aes-gcm 0.9.4", "blake2", @@ -9928,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9942,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9955,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9968,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9982,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9996,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-ec", "ark-ff", @@ -10012,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#9af3ce0ae1a1be87ef6f5e874c3101588ab45516" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" dependencies = [ "ark-serialize", "ark-std", @@ -10781,9 +10787,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11337,12 +11343,11 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] @@ -11433,9 +11438,9 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -11957,9 +11962,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ "getrandom 0.2.8", ] @@ -12053,9 +12058,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", "wasm-bindgen-macro", @@ -12063,9 +12068,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", @@ -12078,9 +12083,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -12090,9 +12095,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", "wasm-bindgen-macro-support", @@ -12100,9 +12105,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", "quote", @@ -12113,15 +12118,15 @@ 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-encoder" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" +checksum = "9a584273ccc2d9311f1dd19dc3fb26054661fa3e373d53ede5d1144ba07a9acd" dependencies = [ "leb128", ] @@ -12217,7 +12222,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.4", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12452,9 +12457,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.2" +version = "52.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707a9fd59b0144c530f0a31f21737036ffea6ece492918cae0843dd09b6f9bc9" +checksum = "15942180f265280eede7bc38b239e9770031d1821c02d905284216c645316430" dependencies = [ "leb128", "memchr", @@ -12464,18 +12469,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d73cbaa81acc2f8a3303e2289205c971d99c89245c2f56ab8765c4daabc2be" +checksum = "37212100d4cbe6f0f6ff6e707f1e5a5b5b675f0451231ed9e4235e234e127ed3" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -12820,6 +12825,30 @@ dependencies = [ "windows_x86_64_msvc 0.42.1", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.1" @@ -13070,9 +13099,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.5+zstd.1.5.2" +version = "2.0.6+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" +checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" dependencies = [ "cc", "libc", From 6e1a24a41a040e00f9ecc3c9ac89ffe5b006b2a6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 14:08:05 +0100 Subject: [PATCH 153/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b73b37a48f06b..8f86bf474c984 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19d54e5b62546797d4bd1d0f1bf52672112ad675" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" dependencies = [ "ark-serialize", "ark-std", From c681c16f0e339f271adb03c3d3107e976cee94c9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 14:41:22 +0100 Subject: [PATCH 154/364] fix --- primitives/arkworks/src/bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 998808cd67c10..6c37d8456a908 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,12 +36,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( + ::G1Prepared::deserialize_with_mode( cursor, Compress::No, Validate::No, ) - .map(::G1Prepared::from) + // .map(::G1Prepared::from) .unwrap() }) .collect(); From 356911ccb172aa1c46109e0329d8045a6ba4ef5a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 14:53:26 +0100 Subject: [PATCH 155/364] fix --- primitives/arkworks/src/bls12_381.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 6c37d8456a908..86ab2dff573eb 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,12 +36,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( + ::G1Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) - // .map(::G1Prepared::from) + .map(::G1Prepared::from) .unwrap() }) .collect(); From b1083e1a0e03f298e4de2f23262a4cf02489cf3b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 14:57:41 +0100 Subject: [PATCH 156/364] fix --- primitives/arkworks/src/bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 86ab2dff573eb..b9a528be76531 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) .map(::G2Prepared::from) From ec0b6b6119bf9ac21246687d879e5668ef32d27e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:07:19 +0100 Subject: [PATCH 157/364] fix --- Cargo.lock | 14 +++++++------- primitives/arkworks/src/bls12_381.rs | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8f86bf474c984..c6130b2aec705 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#cdacf69168f7bb79b9c5d3aeb7d7a0ea80ddac97" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index b9a528be76531..80d6c95bb417a 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,12 +36,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( + ::G1Prepared::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - .map(::G1Prepared::from) + // .map(::G1Prepared::from) .unwrap() }) .collect(); From 2aa08129b1eb8a77aa863b1736ba4898da0f2774 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:15:11 +0100 Subject: [PATCH 158/364] fix --- primitives/arkworks/src/bls12_381.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 80d6c95bb417a..9d094fa7840f4 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,12 +36,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( + ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, - Validate::No, + Compress::No, + Validate::Yes, ) - // .map(::G1Prepared::from) + .map(::G1Prepared::from) .unwrap() }) .collect(); From c80d50848085ff14d2427b5cf7ae493d5419e2f0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:31:21 +0100 Subject: [PATCH 159/364] fix --- primitives/arkworks/src/bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 9d094fa7840f4..b9a528be76531 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,8 +38,8 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::No, - Validate::Yes, + Compress::Yes, + Validate::No, ) .map(::G1Prepared::from) .unwrap() From a602957f806de407f052a30a6c72816d6b61fecc Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:51:19 +0100 Subject: [PATCH 160/364] fix --- primitives/arkworks/src/bls12_381.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index b9a528be76531..41a5304b95c0f 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,6 +36,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); + //test ::G1Affine::deserialize_with_mode( cursor, Compress::Yes, From 8933c838298199b87e13260828de5761f9c02789 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:52:11 +0100 Subject: [PATCH 161/364] fix --- primitives/arkworks/src/bls12_381.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 41a5304b95c0f..b9a528be76531 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,7 +36,6 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - //test ::G1Affine::deserialize_with_mode( cursor, Compress::Yes, From 1746a5ba2bb610eb3fbdcda112c316ceab48ea66 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:55:03 +0100 Subject: [PATCH 162/364] fix --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6130b2aec705..06e95977b5842 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#0819652630abf1a725994f5c854ab5f1588cb5ce" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" dependencies = [ "ark-serialize", "ark-std", From fc73b8242dacc7a44d32effb1846c11b3b5912ae Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 15:55:52 +0100 Subject: [PATCH 163/364] fix --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06e95977b5842..978941b14ff9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c0511900c4a24d4af48a2dd2013b887918c019cb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" dependencies = [ "ark-serialize", "ark-std", From 096b614042d2b3465b06deb14cd21846992a2f8e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:06:32 +0100 Subject: [PATCH 164/364] fix --- primitives/arkworks/src/bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index b9a528be76531..998808cd67c10 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G2Prepared::from) From f78635f90af081efde64b3ddcc027a87c7ba60e1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:07:21 +0100 Subject: [PATCH 165/364] fix --- Cargo.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 978941b14ff9f..0767a717aec55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2301,14 +2301,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#4a23c44f4d3a9a2cf4fea9d3562dcd4135ad8ab6" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" dependencies = [ "ark-serialize", "ark-std", From 4bdee93db4ecd3d1066e19b76df48e8ccebd7ebb Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:30:03 +0100 Subject: [PATCH 166/364] fix --- primitives/arkworks/src/bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 998808cd67c10..86ab2dff573eb 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) .map(::G1Prepared::from) From 07fbbf0538f51b6ad85e3b19dcb12f36c9f4ff3c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:30:47 +0100 Subject: [PATCH 167/364] fix --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0767a717aec55..7312dc676fdad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#3964733bba6304482e0d66676709ecbaab4ee27e" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" dependencies = [ "ark-serialize", "ark-std", From 5a8e08a962fd8114f5e5eb64ba6627dc1387c92e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:35:05 +0100 Subject: [PATCH 168/364] fix --- primitives/arkworks/src/bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 86ab2dff573eb..b9a528be76531 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) .map(::G2Prepared::from) From 975e8e7097605c5365ef45635f418cbee18834f3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:36:56 +0100 Subject: [PATCH 169/364] fix --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7312dc676fdad..c76afa0cc9d5c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#d5be4e97aa97d728409bcc5bf12ac094e34b9bab" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" dependencies = [ "ark-serialize", "ark-std", From 8330c7ac01b34d12badc8d572b0c6a2026d44d64 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:37:30 +0100 Subject: [PATCH 170/364] fix --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c76afa0cc9d5c..e277c44ce9fec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#be508cf1708f3badcabfe0b8eb3b6dbb0e9852c2" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" dependencies = [ "ark-serialize", "ark-std", From c1d44873071eed575d90b7ad238a6732415d7361 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:48:53 +0100 Subject: [PATCH 171/364] fix --- Cargo.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e277c44ce9fec..d2801a342b9fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3149,9 +3149,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" [[package]] name = "hex" @@ -3535,7 +3535,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ - "hermit-abi 0.3.0", + "hermit-abi 0.3.1", "io-lifetimes 1.0.5", "rustix 0.36.8", "windows-sys 0.45.0", @@ -9934,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9961,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9974,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9988,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +10002,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10018,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#c5e9fdd4fbe325547ec03336365cd6b649921bdb" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" dependencies = [ "ark-serialize", "ark-std", From 8eb12b5205b28a88859bab4be05f94b813d4417f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 16:55:37 +0100 Subject: [PATCH 172/364] fix --- primitives/arkworks/src/bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index b9a528be76531..80d6c95bb417a 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -36,12 +36,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( + ::G1Prepared::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - .map(::G1Prepared::from) + // .map(::G1Prepared::from) .unwrap() }) .collect(); From 5b4ed3f599435eea403874d8c5175bd9ded6769a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:01:58 +0100 Subject: [PATCH 173/364] fix --- primitives/arkworks/src/bls12_381.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 80d6c95bb417a..2b66086fcc9c7 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -34,14 +34,14 @@ use sp_std::vec::Vec; pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Prepared::deserialize_with_mode( + .map(|b| { + let cursor = Cursor::new(b); + ark_bls12_381::G1Affine::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - // .map(::G1Prepared::from) + .map(ark_ec::bls12::G1Prepared::from) .unwrap() }) .collect(); @@ -49,12 +49,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|b| { let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( + ark_bls12_381::G2Affine::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - .map(::G2Prepared::from) + .map(ark_ec::bls12::G2Prepared::from) .unwrap() }) .collect(); From f1db0e50c7656bda68b79c774d5c7af4a8c18da8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:04:35 +0100 Subject: [PATCH 174/364] fix --- primitives/arkworks/src/bls12_381.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 2b66086fcc9c7..0413bdb444953 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -32,6 +32,9 @@ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { + // test + // test + // test let g1: Vec<_> = a_vec .iter() .map(|b| { From ef71a2147347f85fc362e7a5f05ed5e8e0c0df0f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:07:36 +0100 Subject: [PATCH 175/364] fix --- Cargo.lock | 241 ++++++++++++--------------- primitives/arkworks/src/bls12_381.rs | 15 +- 2 files changed, 112 insertions(+), 144 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d2801a342b9fe..a7d50c9668cf7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "approx" @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" dependencies = [ "proc-macro2", "quote", @@ -936,9 +936,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" dependencies = [ "memchr", "once_cell", @@ -981,9 +981,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "bzip2-sys" @@ -1710,9 +1710,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.89" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8" dependencies = [ "cc", "cxxbridge-flags", @@ -1722,9 +1722,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8" dependencies = [ "cc", "codespan-reporting", @@ -1737,15 +1737,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" dependencies = [ "proc-macro2", "quote", @@ -1754,9 +1754,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.3" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ "darling_core", "darling_macro", @@ -1764,9 +1764,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" dependencies = [ "fnv", "ident_case", @@ -1778,9 +1778,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ "darling_core", "quote", @@ -2301,14 +2301,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] @@ -2764,9 +2764,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.3.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" [[package]] name = "funty" @@ -3125,9 +3125,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" @@ -3147,12 +3147,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - [[package]] name = "hex" version = "0.4.3" @@ -3289,9 +3283,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ "bytes", "futures-channel", @@ -3497,12 +3491,12 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" dependencies = [ "libc", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] @@ -3531,14 +3525,14 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", - "rustix 0.36.8", - "windows-sys 0.45.0", + "hermit-abi 0.2.6", + "io-lifetimes 1.0.4", + "rustix 0.36.7", + "windows-sys 0.42.0", ] [[package]] @@ -3567,9 +3561,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -4588,7 +4582,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.8", + "rustix 0.36.7", ] [[package]] @@ -7036,7 +7030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.6", ] [[package]] @@ -7055,15 +7049,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] @@ -7122,9 +7116,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" dependencies = [ "thiserror", "ucd-trie", @@ -7132,9 +7126,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.5" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" dependencies = [ "pest", "pest_generator", @@ -7142,9 +7136,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.5" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" dependencies = [ "pest", "pest_meta", @@ -7155,9 +7149,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.5" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" dependencies = [ "once_cell", "pest", @@ -7166,9 +7160,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -7423,9 +7417,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ "unicode-ident", ] @@ -8001,16 +7995,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.4", "libc", "linux-raw-sys 0.1.4", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] @@ -9645,9 +9639,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.92" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -9788,9 +9782,9 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" dependencies = [ "aes-gcm 0.9.4", "blake2", @@ -9934,7 +9928,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9948,7 +9942,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9961,7 +9955,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9974,7 +9968,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9988,7 +9982,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10002,7 +9996,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-ec", "ark-ff", @@ -10018,7 +10012,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#064f2753c43e1864d051cfec31246aa4c347ab11" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" dependencies = [ "ark-serialize", "ark-std", @@ -10787,9 +10781,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" [[package]] name = "spki" @@ -11343,11 +11337,12 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" +version = "0.5.2+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" +checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" dependencies = [ "cc", + "fs_extra", "libc", ] @@ -11438,9 +11433,9 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" @@ -11962,9 +11957,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.3.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" dependencies = [ "getrandom 0.2.8", ] @@ -12058,9 +12053,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -12068,9 +12063,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", "log", @@ -12083,9 +12078,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if", "js-sys", @@ -12095,9 +12090,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12105,9 +12100,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -12118,15 +12113,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.22.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a584273ccc2d9311f1dd19dc3fb26054661fa3e373d53ede5d1144ba07a9acd" +checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" dependencies = [ "leb128", ] @@ -12222,7 +12217,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.5", + "spin 0.9.4", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12457,9 +12452,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.3" +version = "52.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15942180f265280eede7bc38b239e9770031d1821c02d905284216c645316430" +checksum = "707a9fd59b0144c530f0a31f21737036ffea6ece492918cae0843dd09b6f9bc9" dependencies = [ "leb128", "memchr", @@ -12469,18 +12464,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.57" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37212100d4cbe6f0f6ff6e707f1e5a5b5b675f0451231ed9e4235e234e127ed3" +checksum = "91d73cbaa81acc2f8a3303e2289205c971d99c89245c2f56ab8765c4daabc2be" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -12825,30 +12820,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.1", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.1" @@ -13099,9 +13070,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.6+zstd.1.5.2" +version = "2.0.5+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" +checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" dependencies = [ "cc", "libc", diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 0413bdb444953..b9a528be76531 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -32,19 +32,16 @@ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - // test - // test - // test let g1: Vec<_> = a_vec .iter() - .map(|b| { - let cursor = Cursor::new(b); - ark_bls12_381::G1Affine::deserialize_with_mode( + .map(|a| { + let cursor = Cursor::new(a); + ::G1Affine::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - .map(ark_ec::bls12::G1Prepared::from) + .map(::G1Prepared::from) .unwrap() }) .collect(); @@ -52,12 +49,12 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|b| { let cursor = Cursor::new(b); - ark_bls12_381::G2Affine::deserialize_with_mode( + ::G2Affine::deserialize_with_mode( cursor, Compress::Yes, Validate::No, ) - .map(ark_ec::bls12::G2Prepared::from) + .map(::G2Prepared::from) .unwrap() }) .collect(); From 345b5654f4cdd01ff74b19879e8a6dd41d1dab45 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:14:25 +0100 Subject: [PATCH 176/364] fix --- primitives/arkworks/src/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 48fa4bb04f596..05da2e2f7691d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -2,8 +2,8 @@ use ark_serialize::{CanonicalSerialize, Compress}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { - let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; + let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_uncompressed(&mut cursor).unwrap(); + result.serialize_compressed(&mut cursor).unwrap(); serialized_result } From 1c82d5cf3f36c929d08c86b04fd9015d6a6b0ad4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:18:23 +0100 Subject: [PATCH 177/364] fix --- primitives/arkworks/src/bls12_381.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index b9a528be76531..70aeb0a92f3a8 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -61,7 +61,10 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let result = Bls12_381::multi_miller_loop(g1, g2).0; - serialize_result(result) + let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized_result[..]); + result.serialize_compressed(&mut cursor).unwrap(); + serialized_result } /// Compute final exponentiation through arkworks From e1776ebd1ddf9712710f06337219f92a4ccb47f6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:22:19 +0100 Subject: [PATCH 178/364] fix --- primitives/arkworks/src/bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 70aeb0a92f3a8..2b820986bc746 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -26,7 +26,7 @@ use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::vec::Vec; From a15345b22dd4a19c983ffe9eeee27b1b1f02b1eb Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:30:01 +0100 Subject: [PATCH 179/364] fix --- primitives/arkworks/src/bls12_381.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 2b820986bc746..dbf2dc2734d2d 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::Yes, + Compress::No, Validate::No, ) .map(::G2Prepared::from) @@ -61,9 +61,9 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let result = Bls12_381::multi_miller_loop(g1, g2).0; - let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; + let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_compressed(&mut cursor).unwrap(); + result.serialize_uncompressed(&mut cursor).unwrap(); serialized_result } From 37ede0244f4f94970294bdf1253a0af32f8b4692 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Feb 2023 17:38:37 +0100 Subject: [PATCH 180/364] fix --- primitives/arkworks/src/bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index dbf2dc2734d2d..1f41c77c6e953 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -38,7 +38,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(a); ::G1Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) .map(::G1Prepared::from) @@ -51,7 +51,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let cursor = Cursor::new(b); ::G2Affine::deserialize_with_mode( cursor, - Compress::No, + Compress::Yes, Validate::No, ) .map(::G2Prepared::from) From a3371a1c10915a2df9b49ac4553960210fb24b2d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 9 Feb 2023 15:38:25 +0100 Subject: [PATCH 181/364] fix --- primitives/arkworks/src/bls12_381.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 1f41c77c6e953..5da0e59ca8ed7 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -26,7 +26,7 @@ use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize, Compress, Validate}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::vec::Vec; @@ -36,11 +36,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|a| { let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) + as CanonicalDeserialize>::deserialize_uncompressed(cursor) .map(::G1Prepared::from) .unwrap() }) @@ -49,11 +45,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { .iter() .map(|b| { let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) + as CanonicalDeserialize>::deserialize_uncompressed(cursor) .map(::G2Prepared::from) .unwrap() }) From 824046028a0c821299cfa19474861f7b6a812529 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 9 Feb 2023 17:08:58 +0100 Subject: [PATCH 182/364] fix compression --- Cargo.lock | 251 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 141 insertions(+), 110 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a7d50c9668cf7..df53158225c6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", @@ -794,9 +794,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.60.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ "bitflags", "cexpr", @@ -809,6 +809,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", + "syn", ] [[package]] @@ -936,9 +937,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" dependencies = [ "memchr", "once_cell", @@ -981,9 +982,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -1710,9 +1711,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8" +checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" dependencies = [ "cc", "cxxbridge-flags", @@ -1722,9 +1723,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8" +checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" dependencies = [ "cc", "codespan-reporting", @@ -1737,15 +1738,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971" +checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" [[package]] name = "cxxbridge-macro" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" +checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" dependencies = [ "proc-macro2", "quote", @@ -1754,9 +1755,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1764,9 +1765,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", @@ -1778,9 +1779,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", @@ -2301,14 +2302,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -2764,9 +2765,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "funty" @@ -3125,9 +3126,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -3147,6 +3148,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -3283,9 +3290,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3491,12 +3498,12 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -3525,14 +3532,14 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes 1.0.4", - "rustix 0.36.7", - "windows-sys 0.42.0", + "hermit-abi 0.3.1", + "io-lifetimes 1.0.5", + "rustix 0.36.8", + "windows-sys 0.45.0", ] [[package]] @@ -3561,9 +3568,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -4319,9 +4326,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.8.0+7.4.4" +version = "0.8.1+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +checksum = "1862d49b21e948fc85e7798077666098daee5b227047eb70b2e9d4aad1524ce8" dependencies = [ "bindgen", "bzip2-sys", @@ -4582,7 +4589,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.7", + "rustix 0.36.8", ] [[package]] @@ -7030,7 +7037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.6", + "parking_lot_core 0.9.7", ] [[package]] @@ -7049,15 +7056,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -7116,9 +7123,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7126,9 +7133,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7136,9 +7143,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", @@ -7149,9 +7156,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7160,9 +7167,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", @@ -7417,9 +7424,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ "unicode-ident", ] @@ -7995,16 +8002,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.7" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.4", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -9639,9 +9646,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", "ryu", @@ -9782,9 +9789,9 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" dependencies = [ "aes-gcm 0.9.4", "blake2", @@ -9928,7 +9935,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9942,9 +9949,10 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-bls12-381", + "ark-ec", "ark-ff", "ark-serialize", "ark-std", @@ -9955,7 +9963,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9968,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9982,7 +9990,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9996,7 +10004,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-ec", "ark-ff", @@ -10012,7 +10020,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#05eced23c67da1724a0ec2774df4ccc07f03e7db" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" dependencies = [ "ark-serialize", "ark-std", @@ -10781,9 +10789,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11337,12 +11345,11 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] @@ -11433,9 +11440,9 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -11957,9 +11964,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ "getrandom 0.2.8", ] @@ -12053,9 +12060,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", "wasm-bindgen-macro", @@ -12063,9 +12070,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", @@ -12078,9 +12085,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -12090,9 +12097,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", "wasm-bindgen-macro-support", @@ -12100,9 +12107,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", "quote", @@ -12113,15 +12120,15 @@ 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-encoder" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" +checksum = "9a584273ccc2d9311f1dd19dc3fb26054661fa3e373d53ede5d1144ba07a9acd" dependencies = [ "leb128", ] @@ -12217,7 +12224,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.4", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12452,9 +12459,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.2" +version = "52.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707a9fd59b0144c530f0a31f21737036ffea6ece492918cae0843dd09b6f9bc9" +checksum = "15942180f265280eede7bc38b239e9770031d1821c02d905284216c645316430" dependencies = [ "leb128", "memchr", @@ -12464,18 +12471,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d73cbaa81acc2f8a3303e2289205c971d99c89245c2f56ab8765c4daabc2be" +checksum = "37212100d4cbe6f0f6ff6e707f1e5a5b5b675f0451231ed9e4235e234e127ed3" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -12820,6 +12827,30 @@ dependencies = [ "windows_x86_64_msvc 0.42.1", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.1" @@ -13070,9 +13101,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.5+zstd.1.5.2" +version = "2.0.6+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" +checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" dependencies = [ "cc", "libc", From 82acb85ca8cb7baa8c9c00ba277b756f97afb286 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 9 Feb 2023 17:30:30 +0100 Subject: [PATCH 183/364] fix compression --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index df53158225c6b..209f028a66a9c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9935,7 +9935,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9949,7 +9949,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-bls12-381", "ark-ec", @@ -9963,7 +9963,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9990,7 +9990,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10004,7 +10004,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-ec", "ark-ff", @@ -10020,7 +10020,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#192d9fc96d2c2f9f5cba8de84411d904c2163258" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" dependencies = [ "ark-serialize", "ark-std", From 731b042aa8742b6a3a9eaa9811bec0d4219d1376 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 9 Feb 2023 17:35:24 +0100 Subject: [PATCH 184/364] fix compression --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 209f028a66a9c..b4284ccc7d514 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9935,7 +9935,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9949,7 +9949,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-bls12-381", "ark-ec", @@ -9963,7 +9963,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9990,7 +9990,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10004,7 +10004,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-ec", "ark-ff", @@ -10020,7 +10020,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e9551fe9852ec5701db69839a48ca05b204b7e99" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" dependencies = [ "ark-serialize", "ark-std", From 81f0881d7ac0d4b270f6d18e2efb7960313d64ef Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Feb 2023 16:19:07 +0100 Subject: [PATCH 185/364] fix compression --- Cargo.lock | 170 +++++++---------------------------------------------- 1 file changed, 22 insertions(+), 148 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f6a227b8688a..cf60dbdaab808 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -776,10 +776,7 @@ version = "4.0.0-dev" dependencies = [ "array-bytes", "env_logger 0.9.3", -<<<<<<< HEAD -======= "hash-db", ->>>>>>> master "log", "sp-core", "sp-runtime", @@ -843,24 +840,24 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] @@ -873,7 +870,7 @@ dependencies = [ "arrayvec 0.7.2", "cc", "cfg-if", - "constant_time_eq 0.2.4", + "constant_time_eq", ] [[package]] @@ -1340,12 +1337,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.2.4" @@ -3172,15 +3163,9 @@ dependencies = [ [[package]] name = "hermit-abi" -<<<<<<< HEAD version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" -======= -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" ->>>>>>> master [[package]] name = "hex" @@ -3522,15 +3507,6 @@ dependencies = [ name = "io-lifetimes" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - -[[package]] -name = "io-lifetimes" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ "libc", @@ -3567,15 +3543,9 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ -<<<<<<< HEAD "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", - "rustix 0.36.8", -======= - "hermit-abi 0.3.0", "io-lifetimes", "rustix", ->>>>>>> master "windows-sys 0.45.0", ] @@ -4363,9 +4333,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.8.1+7.4.4" +version = "0.8.3+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1862d49b21e948fc85e7798077666098daee5b227047eb70b2e9d4aad1524ce8" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" dependencies = [ "bindgen", "bzip2-sys", @@ -4619,11 +4589,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ -<<<<<<< HEAD - "rustix 0.36.8", -======= "rustix", ->>>>>>> master ] [[package]] @@ -7157,15 +7123,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -<<<<<<< HEAD version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" -======= -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" ->>>>>>> master dependencies = [ "thiserror", "ucd-trie", @@ -7173,15 +7133,9 @@ dependencies = [ [[package]] name = "pest_derive" -<<<<<<< HEAD version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" -======= -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" ->>>>>>> master dependencies = [ "pest", "pest_generator", @@ -7189,15 +7143,9 @@ dependencies = [ [[package]] name = "pest_generator" -<<<<<<< HEAD version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" -======= -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" ->>>>>>> master dependencies = [ "pest", "pest_meta", @@ -7208,15 +7156,9 @@ dependencies = [ [[package]] name = "pest_meta" -<<<<<<< HEAD version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" -======= -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" ->>>>>>> master dependencies = [ "once_cell", "pest", @@ -8054,25 +7996,7 @@ dependencies = [ "errno", "io-lifetimes", "libc", -<<<<<<< HEAD - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - -[[package]] -name = "rustix" -version = "0.36.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 1.0.5", - "libc", - "linux-raw-sys 0.1.4", -======= "linux-raw-sys", ->>>>>>> master "windows-sys 0.45.0", ] @@ -9723,15 +9647,9 @@ dependencies = [ [[package]] name = "serde_json" -<<<<<<< HEAD version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" -======= -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" ->>>>>>> master dependencies = [ "itoa", "ryu", @@ -11403,10 +11321,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "50f297120ff9d4efe680df143d5631bba9c75fa371992b7fcb33eb3453cb0a07" dependencies = [ + "cfg-if", "once_cell", ] @@ -11589,9 +11508,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "7e267c18a719545b481171952a79f8c25c80361463ba44bc7fa9eba7c742ef4f" dependencies = [ "bytes", "futures-core", @@ -12202,9 +12121,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a584273ccc2d9311f1dd19dc3fb26054661fa3e373d53ede5d1144ba07a9acd" +checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" dependencies = [ "leb128", ] @@ -12545,9 +12464,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.3" +version = "53.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15942180f265280eede7bc38b239e9770031d1821c02d905284216c645316430" +checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" dependencies = [ "leb128", "memchr", @@ -12557,9 +12476,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37212100d4cbe6f0f6ff6e707f1e5a5b5b675f0451231ed9e4235e234e127ed3" +checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" dependencies = [ "wast", ] @@ -12950,15 +12869,6 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" name = "windows_aarch64_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] @@ -12971,15 +12881,6 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" name = "windows_i686_gnu" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] @@ -12992,15 +12893,6 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" name = "windows_i686_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] @@ -13013,15 +12905,6 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" name = "windows_x86_64_gnu" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] @@ -13040,15 +12923,6 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" name = "windows_x86_64_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= ->>>>>>> master checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] @@ -13199,9 +13073,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.6+zstd.1.5.2" +version = "2.0.7+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" dependencies = [ "cc", "libc", From f0a95d35014c31ea2c3a01df177ea1a47b95d405 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Feb 2023 17:38:39 +0100 Subject: [PATCH 186/364] fix compression --- primitives/arkworks/src/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 05da2e2f7691d..48fa4bb04f596 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -2,8 +2,8 @@ use ark_serialize::{CanonicalSerialize, Compress}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { - let mut serialized_result = vec![0u8; result.serialized_size(Compress::Yes)]; + let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_compressed(&mut cursor).unwrap(); + result.serialize_uncompressed(&mut cursor).unwrap(); serialized_result } From 10b050f543dd69630877730a7395ff71faab6e61 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Feb 2023 17:59:57 +0100 Subject: [PATCH 187/364] fix std leak --- primitives/io/Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index e79e3fde30cf1..95502ccd6304e 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -27,16 +27,16 @@ sp-trie = { version = "7.0.0", default-features = false, optional = true, path = sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } sp-arkworks = { version = "0.4.0", default-features = false, optional = true, path = "../arkworks" } -log = { version = "0.4.17", optional = true } -futures = { version = "0.3.21", features = ["thread-pool"], optional = true } -secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], optional = true } +log = { version = "0.4.17", default-features = false, optional = true } +futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } +secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } tracing = { version = "0.1.29", default-features = false } tracing-core = { version = "0.1.28", default-features = false} # Required for backwards compatibility reason, but only used for verifying when `UseDalekExt` is set. ed25519-dalek = { version = "1.0.1", default-features = false, optional = true } # Force the usage of ed25519, this is being used in `ed25519-dalek`. -ed25519 = { version = "1.5.2", optional = true } +ed25519 = { version = "1.5.2", optional = true, default-features = false } [features] default = ["std"] From ada044c1178d173a7daa94ad16d9639caf15c50b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Feb 2023 10:41:52 +0100 Subject: [PATCH 188/364] fix std leak --- Cargo.lock | 13083 --------------------------------------------------- 1 file changed, 13083 deletions(-) delete mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index cf60dbdaab808..0000000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13083 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli 0.26.2", -] - -[[package]] -name = "addr2line" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" -dependencies = [ - "gimli 0.27.1", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.4", -] - -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aes-gcm" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", -] - -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.8", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "getrandom 0.2.8", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "arbitrary" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" - -[[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "ark-algebra-test-templates" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390ae58ca5e3ed40d8c1eb9c939931258562c1c331a0ea10d76091f450c50b43" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "hex", - "num-bigint", - "num-integer", - "num-traits", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.6", -] - -[[package]] -name = "ark-bls12-377" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-bw6-761" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" -dependencies = [ - "ark-bls12-377", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d7f0c52aff14f216200a9eee06a9990fee2e51fc9599e226df448ad3232886" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ed-on-bls12-377" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" -dependencies = [ - "ark-bls12-377", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ed-on-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ee31d8869a353433524dbd5a8f51f95cdafe7c66d458956ec13aa737198562" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.6", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc8f7ec7fdcc20f3f110783c043d80479b42f500003cf92b71ca90f34a2ba0e" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15aa320e38052d644e569740bad208e5f9f5fafedcc9e6b1557f723be1b7ff8d" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ark-poly" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2e8741caf33ab3063f1fc65617716ffb18cba8e872998aa2eef0d4e4b56d1" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-r1cs-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de1d1472e5cb020cb3405ce2567c91c8d43f21b674aef37b0202f5c3304761db" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-std", - "derivative", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "ark-serialize" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea39d00a8a4c832e6f6520e58ccec7bf909c4845863512e9b8656fd47df355" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.6", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "101333772a4020c883890811500d5ecc704c545a90140629af5c3b9f00d78953" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "array-bytes" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "asn1-rs" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" -dependencies = [ - "asn1-rs-derive 0.1.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "asn1-rs" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" -dependencies = [ - "asn1-rs-derive 0.4.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" - -[[package]] -name = "assert_cmd" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" -dependencies = [ - "bstr", - "doc-comment", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", -] - -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-io" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" -dependencies = [ - "async-lock", - "autocfg", - "concurrent-queue", - "futures-lite", - "libc", - "log", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "windows-sys 0.42.0", -] - -[[package]] -name = "async-lock" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" -dependencies = [ - "event-listener", - "futures-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "asynchronous-codec" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "atomic-waker" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" -dependencies = [ - "addr2line 0.19.0", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.30.3", - "rustc-demangle", -] - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "basic-toml" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" -dependencies = [ - "serde", -] - -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - -[[package]] -name = "beefy-gadget" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "fnv", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-network-test", - "sc-utils", - "serde", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-beefy", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "wasm-timer", -] - -[[package]] -name = "beefy-gadget-rpc" -version = "4.0.0-dev" -dependencies = [ - "beefy-gadget", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-rpc", - "serde", - "serde_json", - "sp-beefy", - "sp-core", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "binary-merkle-tree" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "env_logger 0.9.3", - "hash-db", - "log", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bindgen" -version = "0.64.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "constant_time_eq", -] - -[[package]] -name = "blake2s_simd" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "cc", - "cfg-if", - "constant_time_eq", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding 0.1.5", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bounded-collections" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2aff4807e40f478132150d80b031f2461d88f061851afcab537d7600c24120" -dependencies = [ - "log", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bstr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" -dependencies = [ - "memchr", - "once_cell", - "regex-automata", - "serde", -] - -[[package]] -name = "build-helper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" -dependencies = [ - "semver 0.6.0", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytemuck" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "camino" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.16", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -dependencies = [ - "jobserver", -] - -[[package]] -name = "ccm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" -dependencies = [ - "aead 0.3.2", - "cipher 0.2.5", - "subtle", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - -[[package]] -name = "cfg-expr" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "chacha20" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "zeroize", -] - -[[package]] -name = "chacha20poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" -dependencies = [ - "aead 0.4.3", - "chacha20", - "cipher 0.3.0", - "poly1305", - "zeroize", -] - -[[package]] -name = "chain-spec-builder" -version = "2.0.0" -dependencies = [ - "ansi_term", - "clap 4.1.4", - "node-cli", - "rand 0.8.5", - "sc-chain-spec", - "sc-keystore", - "sp-core", - "sp-keystore", -] - -[[package]] -name = "chrono" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "time 0.1.45", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "ciborium" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" - -[[package]] -name = "ciborium-ll" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cid" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" -dependencies = [ - "core2", - "multibase", - "multihash", - "serde", - "unsigned-varint", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "ckb-merkle-mountain-range" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "clang-sys" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" -dependencies = [ - "glob", - "libc", - "libloading", -] - -[[package]] -name = "clap" -version = "3.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" -dependencies = [ - "bitflags", - "clap_lex 0.2.4", - "indexmap", - "textwrap", -] - -[[package]] -name = "clap" -version = "4.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" -dependencies = [ - "bitflags", - "clap_derive", - "clap_lex 0.3.1", - "is-terminal", - "once_cell", - "strsim", - "termcolor", -] - -[[package]] -name = "clap_complete" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6540eedc41f8a5a76cf3d8d458057dcdf817be4158a55b5f861f7a5483de75" -dependencies = [ - "clap 4.1.4", -] - -[[package]] -name = "clap_derive" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "clap_lex" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "comfy-table" -version = "6.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" -dependencies = [ - "strum", - "strum_macros", - "unicode-width", -] - -[[package]] -name = "concurrent-queue" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" - -[[package]] -name = "constant_time_eq" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - -[[package]] -name = "cpp_demangle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - -[[package]] -name = "cranelift-bforest" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3d54eab028f5805ae3b26fd60eca3f3a9cfb76b989d9bab173be3f61356cc3" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be1d5f2c3cca1efb691844bc1988b89c77291f13f778499a3f3c0cf49c0ed61" -dependencies = [ - "arrayvec 0.7.2", - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-entity", - "cranelift-isle", - "gimli 0.26.2", - "hashbrown 0.12.3", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9b1b1089750ce4005893af7ee00bb08a2cf1c9779999c0f7164cbc8ad2e0d2" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5fbaec51de47297fd7304986fd53c8c0030abbe69728a60d72e1c63559318d" - -[[package]] -name = "cranelift-entity" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab984c94593f876090fae92e984bdcc74d9b1acf740ab5f79036001c65cba13" -dependencies = [ - "serde", -] - -[[package]] -name = "cranelift-frontend" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0cb3102d21a2fe5f3210af608748ddd0cd09825ac12d42dc56ed5ed8725fe0" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72101dd1f441d629735143c41e00b3428f9267738176983ef588ff43382af0a0" - -[[package]] -name = "cranelift-native" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22b0d9fcbe3fc5a1af9e7021b44ce42b930bcefac446ce22e02e8f9a0d67120" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddebe32fb14fbfd9efa5f130ffb8f4665795de019928dcd7247b136c46f9249" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" -dependencies = [ - "anes", - "atty", - "cast", - "ciborium", - "clap 3.2.23", - "criterion-plot", - "futures", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset 0.7.1", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.6", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher 0.2.5", -] - -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - -[[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" -dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.0.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" -dependencies = [ - "cfg-if", - "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", - "subtle", - "zeroize", -] - -[[package]] -name = "cxx" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "darling" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "data-encoding" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" - -[[package]] -name = "data-encoding-macro" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" -dependencies = [ - "data-encoding", - "syn", -] - -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" -dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der-parser" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" -dependencies = [ - "asn1-rs 0.5.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive-syn-parse" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" -dependencies = [ - "derive_builder_core", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer 0.10.3", - "crypto-common", - "subtle", -] - -[[package]] -name = "directories" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dissimilar" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e" - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "dtoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" - -[[package]] -name = "dyn-clonable" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" -dependencies = [ - "dyn-clonable-impl", - "dyn-clone", -] - -[[package]] -name = "dyn-clonable-impl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dyn-clone" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" - -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", -] - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.6", - "ff", - "generic-array 0.14.6", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "enum-as-inner" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "enumflags2" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "environmental" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "exit-future" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" -dependencies = [ - "futures", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fdlimit" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" -dependencies = [ - "libc", -] - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" - -[[package]] -name = "file-per-thread-logger" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" -dependencies = [ - "env_logger 0.10.0", - "log", -] - -[[package]] -name = "filetime" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.45.0", -] - -[[package]] -name = "finality-grandpa" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" -dependencies = [ - "either", - "futures", - "futures-timer", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "scale-info", -] - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fork-tree" -version = "3.0.0" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - -[[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-support", - "frame-support-procedural", - "frame-system", - "linregress", - "log", - "parity-scale-codec", - "paste", - "rusty-fork", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", - "static_assertions", -] - -[[package]] -name = "frame-benchmarking-cli" -version = "4.0.0-dev" -dependencies = [ - "Inflector", - "array-bytes", - "chrono", - "clap 4.1.4", - "comfy-table", - "frame-benchmarking", - "frame-support", - "frame-system", - "gethostname", - "handlebars", - "itertools", - "lazy_static", - "linked-hash-map", - "log", - "parity-scale-codec", - "rand 0.8.5", - "rand_pcg", - "sc-block-builder", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-executor", - "sc-service", - "sc-sysinfo", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-externalities", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", - "thiserror", - "thousands", -] - -[[package]] -name = "frame-benchmarking-pallet-pov" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "parity-scale-codec", - "proc-macro-crate", - "proc-macro2", - "quote", - "scale-info", - "sp-arithmetic", - "syn", - "trybuild", -] - -[[package]] -name = "frame-election-provider-support" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-solution-type", - "frame-support", - "frame-system", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-election-solution-type-fuzzer" -version = "2.0.0-alpha.5" -dependencies = [ - "clap 4.1.4", - "frame-election-provider-solution-type", - "frame-election-provider-support", - "frame-support", - "honggfuzz", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "frame-executive" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-support", - "frame-system", - "frame-try-runtime", - "pallet-balances", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "sp-version", -] - -[[package]] -name = "frame-metadata" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "frame-remote-externalities" -version = "0.10.0-dev" -dependencies = [ - "frame-support", - "futures", - "log", - "pallet-elections-phragmen", - "parity-scale-codec", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "substrate-rpc-client", - "tokio", - "tracing-subscriber 0.3.16", -] - -[[package]] -name = "frame-support" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "bitflags", - "frame-metadata", - "frame-support-procedural", - "frame-system", - "impl-trait-for-tuples", - "k256", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "pretty_assertions", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "tt-call", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-test" -version = "3.0.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test-pallet", - "frame-system", - "parity-scale-codec", - "pretty_assertions", - "rustversion", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-version", - "trybuild", -] - -[[package]] -name = "frame-support-test-compile-pass" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-version", -] - -[[package]] -name = "frame-support-test-pallet" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "frame-system" -version = "4.0.0-dev" -dependencies = [ - "criterion", - "frame-support", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", - "sp-weights", - "substrate-test-runtime-client", -] - -[[package]] -name = "frame-system-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-system-rpc-runtime-api" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", -] - -[[package]] -name = "frame-try-runtime" -version = "0.10.0-dev" -dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" - -[[package]] -name = "futures-executor" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - -[[package]] -name = "futures-io" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-rustls" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" -dependencies = [ - "futures-io", - "rustls 0.20.8", - "webpki 0.22.0", -] - -[[package]] -name = "futures-sink" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" - -[[package]] -name = "futures-task" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" - -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" - -[[package]] -name = "futures-util" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.9", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generate-bags" -version = "4.0.0-dev" -dependencies = [ - "chrono", - "frame-election-provider-support", - "frame-support", - "frame-system", - "git2", - "num-format", - "pallet-staking", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.4.5", -] - -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap", - "stable_deref_trait", -] - -[[package]] -name = "gimli" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" - -[[package]] -name = "git2" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "url", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - -[[package]] -name = "handlebars" -version = "4.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "hash-db" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.6", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.3", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" -dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.6", - "hmac 0.8.1", -] - -[[package]] -name = "honggfuzz" -version = "0.5.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" -dependencies = [ - "arbitrary", - "lazy_static", - "memmap2", - "rustc_version 0.4.0", -] - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite 0.2.9", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http", - "hyper", - "log", - "rustls 0.20.8", - "rustls-native-certs", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "if-addrs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "if-watch" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" -dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "rtnetlink", - "system-configuration", - "tokio", - "windows", -] - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap-nostd" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - -[[package]] -name = "interceptor" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" -dependencies = [ - "async-trait", - "bytes", - "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" -dependencies = [ - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" -dependencies = [ - "socket2", - "widestring", - "winapi", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" - -[[package]] -name = "is-terminal" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "jobserver" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "jsonrpsee" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" -dependencies = [ - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "tracing", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" -dependencies = [ - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" -dependencies = [ - "anyhow", - "arrayvec 0.7.2", - "async-lock", - "async-trait", - "beef", - "futures-channel", - "futures-timer", - "futures-util", - "globset", - "hyper", - "jsonrpsee-types", - "parking_lot 0.12.1", - "rand 0.8.5", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" -dependencies = [ - "heck", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "jsonrpsee-server" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", - "serde", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" -dependencies = [ - "http", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", -] - -[[package]] -name = "k256" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "keccak" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "keccak-hasher" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711adba9940a039f4374fc5724c0a5eaca84a2d558cce62256bfe26f0dbef05e" -dependencies = [ - "hash-db", - "hash256-std-hasher", - "tiny-keccak", -] - -[[package]] -name = "kitchensink-runtime" -version = "3.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-benchmarking-pallet-pov", - "frame-election-provider-support", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "log", - "node-primitives", - "pallet-alliance", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-bags-list", - "pallet-balances", - "pallet-bounties", - "pallet-child-bounties", - "pallet-collective", - "pallet-contracts", - "pallet-contracts-primitives", - "pallet-conviction-voting", - "pallet-democracy", - "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking", - "pallet-elections-phragmen", - "pallet-fast-unstake", - "pallet-grandpa", - "pallet-identity", - "pallet-im-online", - "pallet-indices", - "pallet-insecure-randomness-collective-flip", - "pallet-lottery", - "pallet-membership", - "pallet-message-queue", - "pallet-mmr", - "pallet-multisig", - "pallet-nfts", - "pallet-nis", - "pallet-nomination-pools", - "pallet-nomination-pools-benchmarking", - "pallet-nomination-pools-runtime-api", - "pallet-offences", - "pallet-offences-benchmarking", - "pallet-preimage", - "pallet-proxy", - "pallet-ranked-collective", - "pallet-recovery", - "pallet-referenda", - "pallet-remark", - "pallet-root-testing", - "pallet-scheduler", - "pallet-session", - "pallet-session-benchmarking", - "pallet-society", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-state-trie-migration", - "pallet-sudo", - "pallet-timestamp", - "pallet-tips", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-transaction-storage", - "pallet-treasury", - "pallet-uniques", - "pallet-utility", - "pallet-vesting", - "pallet-whitelist", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-authority-discovery", - "sp-block-builder", - "sp-consensus-babe", - "sp-core", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-transaction-pool", - "sp-version", - "static_assertions", - "substrate-wasm-builder", -] - -[[package]] -name = "kvdb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" -dependencies = [ - "smallvec", -] - -[[package]] -name = "kvdb-memorydb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" -dependencies = [ - "kvdb", - "parking_lot 0.12.1", -] - -[[package]] -name = "kvdb-rocksdb" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" -dependencies = [ - "kvdb", - "num_cpus", - "parking_lot 0.12.1", - "regex", - "rocksdb", - "smallvec", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "libgit2-sys" -version = "0.14.2+1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libm" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "libp2p" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" -dependencies = [ - "bytes", - "futures", - "futures-timer", - "getrandom 0.2.8", - "instant", - "libp2p-core", - "libp2p-dns", - "libp2p-identify", - "libp2p-kad", - "libp2p-mdns", - "libp2p-metrics", - "libp2p-mplex", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-request-response", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-wasm-ext", - "libp2p-webrtc", - "libp2p-websocket", - "libp2p-yamux", - "multiaddr", - "parking_lot 0.12.1", - "pin-project", - "smallvec", -] - -[[package]] -name = "libp2p-core" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" -dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr", - "multihash", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1", - "sha2 0.10.6", - "smallvec", - "thiserror", - "unsigned-varint", - "void", - "zeroize", -] - -[[package]] -name = "libp2p-dns" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" -dependencies = [ - "futures", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "smallvec", - "trust-dns-resolver", -] - -[[package]] -name = "libp2p-identify" -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" -dependencies = [ - "asynchronous-codec", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-swarm", - "log", - "lru", - "prost", - "prost-build", - "prost-codec", - "smallvec", - "thiserror", - "void", -] - -[[package]] -name = "libp2p-kad" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" -dependencies = [ - "arrayvec 0.7.2", - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "smallvec", - "thiserror", - "uint", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-mdns" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" -dependencies = [ - "data-encoding", - "futures", - "if-watch", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "smallvec", - "socket2", - "tokio", - "trust-dns-proto", - "void", -] - -[[package]] -name = "libp2p-metrics" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" -dependencies = [ - "libp2p-core", - "libp2p-identify", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "prometheus-client", -] - -[[package]] -name = "libp2p-mplex" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "libp2p-noise" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - -[[package]] -name = "libp2p-ping" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" -dependencies = [ - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "void", -] - -[[package]] -name = "libp2p-quic" -version = "0.7.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" -dependencies = [ - "bytes", - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-tls", - "log", - "parking_lot 0.12.1", - "quinn-proto", - "rand 0.8.5", - "rustls 0.20.8", - "thiserror", - "tokio", -] - -[[package]] -name = "libp2p-request-response" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" -dependencies = [ - "async-trait", - "bytes", - "futures", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "libp2p-swarm" -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm-derive", - "log", - "pin-project", - "rand 0.8.5", - "smallvec", - "thiserror", - "tokio", - "void", -] - -[[package]] -name = "libp2p-swarm-derive" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" -dependencies = [ - "heck", - "quote", - "syn", -] - -[[package]] -name = "libp2p-tcp" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" -dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "log", - "socket2", - "tokio", -] - -[[package]] -name = "libp2p-tls" -version = "0.1.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" -dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "rcgen 0.10.0", - "ring", - "rustls 0.20.8", - "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", - "yasna", -] - -[[package]] -name = "libp2p-wasm-ext" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "parity-send-wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" -dependencies = [ - "async-trait", - "asynchronous-codec", - "bytes", - "futures", - "futures-timer", - "hex", - "if-watch", - "libp2p-core", - "libp2p-noise", - "log", - "multihash", - "prost", - "prost-build", - "prost-codec", - "rand 0.8.5", - "rcgen 0.9.3", - "serde", - "stun", - "thiserror", - "tinytemplate", - "tokio", - "tokio-util", - "webrtc", -] - -[[package]] -name = "libp2p-websocket" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" -dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "quicksink", - "rw-stream-sink", - "soketto", - "url", - "webpki-roots", -] - -[[package]] -name = "libp2p-yamux" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" -dependencies = [ - "futures", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "thiserror", - "yamux", -] - -[[package]] -name = "librocksdb-sys" -version = "0.8.3+7.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" -dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "tikv-jemalloc-sys", -] - -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libz-sys" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linked_hash_set" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "linregress" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" -dependencies = [ - "nalgebra", -] - -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "lite-json" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0e787ffe1153141a0f6f6d759fdf1cc34b1226e088444523812fd412a5cca2" -dependencies = [ - "lite-parser", -] - -[[package]] -name = "lite-parser" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d5f9dc37c52d889a21fd701983d02bb6a84f852c5140a6c80ef4557f7dc29e" -dependencies = [ - "paste", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "lru" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" -dependencies = [ - "hashbrown 0.12.3", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "lz4" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" -dependencies = [ - "libc", - "lz4-sys", -] - -[[package]] -name = "lz4-sys" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matrixmultiply" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" -dependencies = [ - "rawpointer", -] - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memfd" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" -dependencies = [ - "rustix", -] - -[[package]] -name = "memmap2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memory-db" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" -dependencies = [ - "hash-db", - "hashbrown 0.12.3", -] - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "merlin" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", -] - -[[package]] -name = "mmr-gadget" -version = "4.0.0-dev" -dependencies = [ - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-offchain", - "sp-api", - "sp-beefy", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "mmr-rpc" -version = "4.0.0-dev" -dependencies = [ - "anyhow", - "jsonrpsee", - "parity-scale-codec", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", -] - -[[package]] -name = "mockall" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.6", - "multihash-derive", - "sha2 0.10.6", - "sha3", - "unsigned-varint", -] - -[[package]] -name = "multihash-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" -dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multistream-select" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" -dependencies = [ - "bytes", - "futures", - "log", - "pin-project", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "nalgebra" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "names" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "netlink-packet-core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" -dependencies = [ - "anyhow", - "bitflags", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", -] - -[[package]] -name = "netlink-proto" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror", - "tokio", -] - -[[package]] -name = "netlink-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", - "static_assertions", -] - -[[package]] -name = "node-bench" -version = "0.9.0-dev" -dependencies = [ - "array-bytes", - "clap 4.1.4", - "derive_more", - "fs_extra", - "futures", - "hash-db", - "kitchensink-runtime", - "kvdb", - "kvdb-rocksdb", - "lazy_static", - "log", - "node-primitives", - "node-testing", - "parity-db", - "rand 0.8.5", - "sc-basic-authorship", - "sc-client-api", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-timestamp", - "sp-tracing", - "sp-trie", - "tempfile", -] - -[[package]] -name = "node-cli" -version = "3.0.0-dev" -dependencies = [ - "array-bytes", - "assert_cmd", - "clap 4.1.4", - "clap_complete", - "criterion", - "frame-benchmarking-cli", - "frame-system", - "frame-system-rpc-runtime-api", - "futures", - "jsonrpsee", - "kitchensink-runtime", - "log", - "nix 0.26.2", - "node-executor", - "node-inspect", - "node-primitives", - "node-rpc", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-balances", - "pallet-im-online", - "pallet-timestamp", - "pallet-transaction-payment", - "parity-scale-codec", - "platforms 2.0.0", - "rand 0.8.5", - "regex", - "sc-authority-discovery", - "sc-basic-authorship", - "sc-block-builder", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-executor", - "sc-finality-grandpa", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-rpc", - "sc-service", - "sc-service-test", - "sc-storage-monitor", - "sc-sync-state-rpc", - "sc-sysinfo", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "soketto", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "substrate-build-script-utils", - "substrate-frame-cli", - "substrate-rpc-client", - "tempfile", - "tokio", - "tokio-util", - "try-runtime-cli", - "wait-timeout", -] - -[[package]] -name = "node-executor" -version = "3.0.0-dev" -dependencies = [ - "criterion", - "frame-benchmarking", - "frame-support", - "frame-system", - "futures", - "kitchensink-runtime", - "node-primitives", - "node-testing", - "pallet-balances", - "pallet-contracts", - "pallet-im-online", - "pallet-root-testing", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-treasury", - "parity-scale-codec", - "sc-executor", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-externalities", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", - "wat", -] - -[[package]] -name = "node-inspect" -version = "0.9.0-dev" -dependencies = [ - "clap 4.1.4", - "parity-scale-codec", - "sc-cli", - "sc-client-api", - "sc-executor", - "sc-service", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "node-primitives" -version = "2.0.0" -dependencies = [ - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "node-rpc" -version = "3.0.0-dev" -dependencies = [ - "jsonrpsee", - "mmr-rpc", - "node-primitives", - "pallet-transaction-payment-rpc", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-babe-rpc", - "sc-consensus-epochs", - "sc-finality-grandpa", - "sc-finality-grandpa-rpc", - "sc-rpc", - "sc-rpc-api", - "sc-rpc-spec-v2", - "sc-sync-state-rpc", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-keystore", - "sp-runtime", - "substrate-frame-rpc-system", - "substrate-state-trie-migration-rpc", -] - -[[package]] -name = "node-runtime-generate-bags" -version = "3.0.0" -dependencies = [ - "clap 4.1.4", - "generate-bags", - "kitchensink-runtime", -] - -[[package]] -name = "node-template" -version = "4.0.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-system", - "futures", - "jsonrpsee", - "node-template-runtime", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc", - "sc-basic-authorship", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-executor", - "sc-finality-grandpa", - "sc-keystore", - "sc-rpc", - "sc-rpc-api", - "sc-service", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-core", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-timestamp", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "try-runtime-cli", -] - -[[package]] -name = "node-template-runtime" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "pallet-aura", - "pallet-balances", - "pallet-grandpa", - "pallet-insecure-randomness-collective-flip", - "pallet-sudo", - "pallet-template", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-version", - "substrate-wasm-builder", -] - -[[package]] -name = "node-testing" -version = "3.0.0-dev" -dependencies = [ - "frame-system", - "fs_extra", - "futures", - "kitchensink-runtime", - "log", - "node-executor", - "node-primitives", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-transaction-payment", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-service", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-timestamp", - "substrate-test-client", - "tempfile", -] - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec 0.7.2", - "itoa", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", - "libm 0.2.6", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", - "memchr", -] - -[[package]] -name = "object" -version = "0.30.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] - -[[package]] -name = "oid-registry" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" -dependencies = [ - "asn1-rs 0.3.1", -] - -[[package]] -name = "oid-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" -dependencies = [ - "asn1-rs 0.5.1", -] - -[[package]] -name = "once_cell" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "os_str_bytes" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" - -[[package]] -name = "output_vt100" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" -dependencies = [ - "winapi", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "p384" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "packed_simd_2" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" -dependencies = [ - "cfg-if", - "libm 0.1.4", -] - -[[package]] -name = "pallet-alliance" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-collective", - "pallet-identity", - "parity-scale-codec", - "scale-info", - "sha2 0.10.6", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-asset-tx-payment" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-assets", - "pallet-authorship", - "pallet-balances", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-storage", -] - -[[package]] -name = "pallet-assets" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-atomic-swap" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-aura" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-aura", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authority-discovery" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-authority-discovery", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authorship" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-babe" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-balances", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-consensus-vrf", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-bags-list" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-bags-list-fuzzer" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "honggfuzz", - "pallet-bags-list", - "rand 0.8.5", -] - -[[package]] -name = "pallet-bags-list-remote-tests" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-remote-externalities", - "frame-support", - "frame-system", - "log", - "pallet-bags-list", - "pallet-staking", - "sp-core", - "sp-runtime", - "sp-std", - "sp-storage", - "sp-tracing", -] - -[[package]] -name = "pallet-balances" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-beefy" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-beefy", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-beefy-mmr" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "binary-merkle-tree", - "frame-support", - "frame-system", - "log", - "pallet-beefy", - "pallet-mmr", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-beefy", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-bounties" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-child-bounties" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-bounties", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-collective" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-contracts" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "bitflags", - "env_logger 0.9.3", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-balances", - "pallet-contracts-primitives", - "pallet-contracts-proc-macro", - "pallet-insecure-randomness-collective-flip", - "pallet-timestamp", - "pallet-utility", - "parity-scale-codec", - "pretty_assertions", - "rand 0.8.5", - "rand_pcg", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std", - "wasm-instrument 0.4.0", - "wasmi 0.20.0", - "wasmparser-nostd", - "wat", -] - -[[package]] -name = "pallet-contracts-primitives" -version = "7.0.0" -dependencies = [ - "bitflags", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", - "sp-weights", -] - -[[package]] -name = "pallet-contracts-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pallet-conviction-voting" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-democracy" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-preimage", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-election-provider-support-benchmarking", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "sp-tracing", - "strum", -] - -[[package]] -name = "pallet-election-provider-support-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-system", - "parity-scale-codec", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "pallet-elections-phragmen" -version = "5.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-example-basic" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-example-offchain-worker" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "lite-json", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-fast-unstake" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -dependencies = [ - "finality-grandpa", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-balances", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-finality-grandpa", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-identity" -version = "4.0.0-dev" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-im-online" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-indices" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-insecure-randomness-collective-flip" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-lottery" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-membership" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-message-queue" -version = "7.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "rand 0.8.5", - "rand_distr", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "sp-weights", -] - -[[package]] -name = "pallet-mmr" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "env_logger 0.9.3", - "frame-benchmarking", - "frame-support", - "frame-system", - "itertools", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-multisig" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nfts" -version = "4.0.0-dev" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nicks" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nis" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-node-authorization" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools" -version = "1.0.0" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-nomination-pools-benchmarking" -version = "1.0.0" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-bags-list", - "pallet-balances", - "pallet-nomination-pools", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools-fuzzer" -version = "2.0.0" -dependencies = [ - "frame-support", - "frame-system", - "honggfuzz", - "log", - "pallet-nomination-pools", - "rand 0.8.5", - "sp-io", - "sp-runtime", - "sp-tracing", -] - -[[package]] -name = "pallet-nomination-pools-runtime-api" -version = "1.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools-test-staking" -version = "1.0.0" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-bags-list", - "pallet-balances", - "pallet-nomination-pools", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-offences" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-offences-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-babe", - "pallet-balances", - "pallet-grandpa", - "pallet-im-online", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-preimage" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-proxy" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-utility", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-ranked-collective" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-recovery" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-referenda" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-preimage", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-remark" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-root-offences" -version = "1.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-root-testing" -version = "1.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-scheduler" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-preimage", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", - "substrate-test-utils", -] - -[[package]] -name = "pallet-scored-pool" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-session" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-session-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-std", -] - -[[package]] -name = "pallet-society" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-staking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-bags-list", - "pallet-balances", - "pallet-session", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "serde", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-staking-reward-curve" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "sp-runtime", - "syn", -] - -[[package]] -name = "pallet-staking-reward-fn" -version = "4.0.0-dev" -dependencies = [ - "log", - "sp-arithmetic", -] - -[[package]] -name = "pallet-state-trie-migration" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-remote-externalities", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-state-trie-migration-rpc", - "thousands", - "tokio", - "zstd", -] - -[[package]] -name = "pallet-sudo" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-template" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", -] - -[[package]] -name = "pallet-timestamp" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "pallet-tips" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-storage", -] - -[[package]] -name = "pallet-transaction-payment" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-transaction-payment-rpc" -version = "4.0.0-dev" -dependencies = [ - "jsonrpsee", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-payment-rpc-runtime-api" -version = "4.0.0-dev" -dependencies = [ - "pallet-transaction-payment", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-storage" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-transaction-storage-proof", -] - -[[package]] -name = "pallet-treasury" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-uniques" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-utility" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-collective", - "pallet-root-testing", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-vesting" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-whitelist" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-preimage", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "parity-db" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" -dependencies = [ - "blake2", - "crc32fast", - "fs2", - "hex", - "libc", - "log", - "lz4", - "memmap2", - "parking_lot 0.12.1", - "rand 0.8.5", - "snap", -] - -[[package]] -name = "parity-scale-codec" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" -dependencies = [ - "arrayvec 0.7.2", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - -[[package]] -name = "parity-wasm" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.7", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pbkdf2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.6", -] - -[[package]] -name = "petgraph" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "platforms" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" - -[[package]] -name = "platforms" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" - -[[package]] -name = "plotters" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" - -[[package]] -name = "plotters-svg" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "polling" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" -dependencies = [ - "autocfg", - "cfg-if", - "libc", - "log", - "wepoll-ffi", - "windows-sys 0.42.0", -] - -[[package]] -name = "poly1305" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" -dependencies = [ - "cpuid-bool", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" - -[[package]] -name = "predicates-tree" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "pretty_assertions" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" -dependencies = [ - "ctor", - "diff", - "output_vt100", - "yansi", -] - -[[package]] -name = "prettyplease" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "primitive-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", - "scale-info", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot 0.12.1", - "thiserror", -] - -[[package]] -name = "prometheus-client" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" -dependencies = [ - "dtoa", - "itoa", - "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", -] - -[[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", - "which", -] - -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - -[[package]] -name = "prost-derive" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quickcheck" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "quicksink" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project-lite 0.1.12", -] - -[[package]] -name = "quinn-proto" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" -dependencies = [ - "bytes", - "rand 0.8.5", - "ring", - "rustc-hash", - "rustls 0.20.8", - "slab", - "thiserror", - "tinyvec", - "tracing", - "webpki 0.22.0", -] - -[[package]] -name = "quote" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem", - "ring", - "time 0.3.17", - "x509-parser 0.13.2", - "yasna", -] - -[[package]] -name = "rcgen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" -dependencies = [ - "pem", - "ring", - "time 0.3.17", - "yasna", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.8", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "ref-cast" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "regalloc2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "regex" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] - -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint", - "hmac 0.12.1", - "zeroize", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rocksdb" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" -dependencies = [ - "libc", - "librocksdb-sys", -] - -[[package]] -name = "rpassword" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" -dependencies = [ - "libc", - "rtoolbox", - "winapi", -] - -[[package]] -name = "rtcp" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" -dependencies = [ - "bytes", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "rtnetlink" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" -dependencies = [ - "futures", - "log", - "netlink-packet-route", - "netlink-proto", - "nix 0.24.3", - "thiserror", - "tokio", -] - -[[package]] -name = "rtoolbox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "rtp" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" -dependencies = [ - "async-trait", - "bytes", - "rand 0.8.5", - "serde", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.16", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "0.36.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64 0.13.1", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "rusty-fork" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" -dependencies = [ - "fnv", - "quick-error", - "tempfile", -] - -[[package]] -name = "rw-stream-sink" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" -dependencies = [ - "futures", - "pin-project", - "static_assertions", -] - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "safe-mix" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" -dependencies = [ - "rustc_version 0.2.3", -] - -[[package]] -name = "safe_arch" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "sc-allocator" -version = "4.1.0-dev" -dependencies = [ - "log", - "sp-core", - "sp-wasm-interface", - "thiserror", -] - -[[package]] -name = "sc-authority-discovery" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "quickcheck", - "rand 0.8.5", - "sc-client-api", - "sc-network-common", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", -] - -[[package]] -name = "sc-basic-authorship" -version = "0.10.0-dev" -dependencies = [ - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-proposer-metrics", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-block-builder" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "sc-client-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-chain-spec" -version = "4.0.0-dev" -dependencies = [ - "memmap2", - "sc-chain-spec-derive", - "sc-network-common", - "sc-telemetry", - "serde", - "serde_json", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sc-chain-spec-derive" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sc-cli" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "chrono", - "clap 4.1.4", - "fdlimit", - "futures", - "futures-timer", - "libp2p", - "log", - "names", - "parity-scale-codec", - "rand 0.8.5", - "regex", - "rpassword", - "sc-client-api", - "sc-client-db", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-service", - "sc-telemetry", - "sc-tracing", - "sc-utils", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-panic-handler", - "sp-runtime", - "sp-tracing", - "sp-version", - "tempfile", - "thiserror", - "tiny-bip39", - "tokio", -] - -[[package]] -name = "sc-client-api" -version = "4.0.0-dev" -dependencies = [ - "fnv", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-executor", - "sc-transaction-pool-api", - "sc-utils", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-database", - "sp-externalities", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-test-primitives", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "thiserror", -] - -[[package]] -name = "sc-client-db" -version = "0.10.0-dev" -dependencies = [ - "criterion", - "hash-db", - "kitchensink-runtime", - "kvdb", - "kvdb-memorydb", - "kvdb-rocksdb", - "linked-hash-map", - "log", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.1", - "quickcheck", - "rand 0.8.5", - "sc-client-api", - "sc-state-db", - "schnellru", - "sp-arithmetic", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", - "substrate-test-runtime-client", - "tempfile", -] - -[[package]] -name = "sc-consensus" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "libp2p", - "log", - "mockall", - "parking_lot 0.12.1", - "sc-client-api", - "sc-utils", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-test-primitives", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-aura" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-consensus-slots", - "sc-keystore", - "sc-network", - "sc-network-test", - "sc-telemetry", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-babe" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "fork-tree", - "futures", - "log", - "merlin", - "num-bigint", - "num-rational", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand_chacha 0.2.2", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-keystore", - "sc-network", - "sc-network-test", - "sc-telemetry", - "scale-info", - "schnorrkel", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-babe-rpc" -version = "0.10.0-dev" -dependencies = [ - "futures", - "jsonrpsee", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-keystore", - "sc-rpc-api", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-epochs" -version = "0.10.0-dev" -dependencies = [ - "fork-tree", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "sc-consensus-manual-seal" -version = "0.10.0-dev" -dependencies = [ - "assert_matches", - "async-trait", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-basic-authorship", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "substrate-test-runtime-transaction-pool", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-pow" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-client-api", - "sc-consensus", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-pow", - "sp-core", - "sp-inherents", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-slots" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sc-telemetry", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-executor" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "criterion", - "env_logger 0.9.3", - "lru", - "num_cpus", - "parity-scale-codec", - "parking_lot 0.12.1", - "paste", - "regex", - "sc-executor-common", - "sc-executor-wasmi", - "sc-executor-wasmtime", - "sc-runtime-test", - "sc-tracing", - "sp-api", - "sp-core", - "sp-externalities", - "sp-io", - "sp-maybe-compressed-blob", - "sp-panic-handler", - "sp-runtime", - "sp-runtime-interface", - "sp-state-machine", - "sp-trie", - "sp-version", - "sp-wasm-interface", - "substrate-test-runtime", - "tempfile", - "tracing", - "tracing-subscriber 0.2.25", - "wasmi 0.13.2", - "wat", -] - -[[package]] -name = "sc-executor-common" -version = "0.10.0-dev" -dependencies = [ - "sc-allocator", - "sp-maybe-compressed-blob", - "sp-wasm-interface", - "thiserror", - "wasm-instrument 0.3.0", - "wasmi 0.13.2", -] - -[[package]] -name = "sc-executor-wasmi" -version = "0.10.0-dev" -dependencies = [ - "log", - "sc-allocator", - "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", - "wasmi 0.13.2", -] - -[[package]] -name = "sc-executor-wasmtime" -version = "0.10.0-dev" -dependencies = [ - "anyhow", - "cargo_metadata", - "cfg-if", - "libc", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "rustix", - "sc-allocator", - "sc-executor-common", - "sc-runtime-test", - "sp-io", - "sp-runtime-interface", - "sp-wasm-interface", - "tempfile", - "wasmtime", - "wat", -] - -[[package]] -name = "sc-finality-grandpa" -version = "0.10.0-dev" -dependencies = [ - "ahash 0.8.3", - "array-bytes", - "assert_matches", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-network-test", - "sc-telemetry", - "sc-utils", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" -dependencies = [ - "finality-grandpa", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-finality-grandpa", - "sc-rpc", - "serde", - "sp-blockchain", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-informant" -version = "0.10.0-dev" -dependencies = [ - "ansi_term", - "futures", - "futures-timer", - "log", - "sc-client-api", - "sc-network-common", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "sc-keystore" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "parking_lot 0.12.1", - "serde_json", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "tempfile", - "thiserror", -] - -[[package]] -name = "sc-network" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "async-trait", - "asynchronous-codec", - "backtrace", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "log", - "lru", - "mockall", - "multistream-select", - "parity-scale-codec", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-peerset", - "sc-utils", - "serde", - "serde_json", - "smallvec", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-test-primitives", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "tokio-test", - "tokio-util", - "unsigned-varint", - "zeroize", -] - -[[package]] -name = "sc-network-bitswap" -version = "0.10.0-dev" -dependencies = [ - "cid", - "futures", - "libp2p", - "log", - "prost", - "prost-build", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "substrate-test-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", - "unsigned-varint", -] - -[[package]] -name = "sc-network-common" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "futures", - "futures-timer", - "libp2p", - "linked_hash_set", - "parity-scale-codec", - "prost-build", - "sc-consensus", - "sc-peerset", - "serde", - "smallvec", - "sp-blockchain", - "sp-consensus", - "sp-finality-grandpa", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-network-gossip" -version = "0.10.0-dev" -dependencies = [ - "ahash 0.8.3", - "futures", - "futures-timer", - "libp2p", - "log", - "lru", - "quickcheck", - "sc-network-common", - "sc-peerset", - "sp-runtime", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tokio", - "tracing", -] - -[[package]] -name = "sc-network-light" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "sc-client-api", - "sc-network-common", - "sc-peerset", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-network-sync" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "fork-tree", - "futures", - "libp2p", - "log", - "lru", - "mockall", - "parity-scale-codec", - "prost", - "prost-build", - "quickcheck", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sc-peerset", - "sc-utils", - "smallvec", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-runtime", - "sp-test-primitives", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-network-test" -version = "0.8.0" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "libp2p", - "log", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-service", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "sc-network-transactions" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "pin-project", - "sc-network-common", - "sc-peerset", - "sc-utils", - "sp-consensus", - "sp-runtime", - "substrate-prometheus-endpoint", -] - -[[package]] -name = "sc-offchain" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "bytes", - "fnv", - "futures", - "futures-timer", - "hyper", - "hyper-rustls", - "lazy_static", - "libp2p", - "num_cpus", - "once_cell", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-network-common", - "sc-peerset", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "sp-api", - "sp-consensus", - "sp-core", - "sp-offchain", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "threadpool", - "tokio", - "tracing", -] - -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -dependencies = [ - "futures", - "libp2p", - "log", - "rand 0.8.5", - "sc-utils", - "serde_json", - "wasm-timer", -] - -[[package]] -name = "sc-proposer-metrics" -version = "0.10.0-dev" -dependencies = [ - "log", - "substrate-prometheus-endpoint", -] - -[[package]] -name = "sc-rpc" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "env_logger 0.9.3", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-network", - "sc-network-common", - "sc-rpc-api", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-rpc", - "sp-runtime", - "sp-session", - "sp-version", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "sc-rpc-api" -version = "0.10.0-dev" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-transaction-pool-api", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-version", - "thiserror", -] - -[[package]] -name = "sc-rpc-server" -version = "4.0.0-dev" -dependencies = [ - "http", - "jsonrpsee", - "log", - "serde_json", - "substrate-prometheus-endpoint", - "tokio", - "tower", - "tower-http", -] - -[[package]] -name = "sc-rpc-spec-v2" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "futures", - "futures-util", - "hex", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-maybe-compressed-blob", - "sp-runtime", - "sp-version", - "substrate-test-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", - "tokio-stream", -] - -[[package]] -name = "sc-runtime-test" -version = "2.0.0" -dependencies = [ - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sc-service" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "directories", - "exit-future", - "futures", - "futures-timer", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-informant", - "sc-keystore", - "sc-network", - "sc-network-bitswap", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-network-transactions", - "sc-offchain", - "sc-rpc", - "sc-rpc-server", - "sc-rpc-spec-v2", - "sc-storage-monitor", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-storage", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "sp-trie", - "sp-version", - "static_init", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "tracing", - "tracing-futures", -] - -[[package]] -name = "sc-service-test" -version = "2.0.0" -dependencies = [ - "array-bytes", - "fdlimit", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-service", - "sc-transaction-pool-api", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-tracing", - "sp-trie", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "tokio", -] - -[[package]] -name = "sc-state-db" -version = "0.10.0-dev" -dependencies = [ - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sp-core", -] - -[[package]] -name = "sc-storage-monitor" -version = "0.1.0" -dependencies = [ - "clap 4.1.4", - "futures", - "log", - "nix 0.26.2", - "sc-client-db", - "sc-utils", - "sp-core", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-sync-state-rpc" -version = "0.10.0-dev" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-finality-grandpa", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-sysinfo" -version = "6.0.0-dev" -dependencies = [ - "futures", - "libc", - "log", - "rand 0.8.5", - "rand_pcg", - "regex", - "sc-telemetry", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sc-telemetry" -version = "4.0.0-dev" -dependencies = [ - "chrono", - "futures", - "libp2p", - "log", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-utils", - "serde", - "serde_json", - "thiserror", - "wasm-timer", -] - -[[package]] -name = "sc-tracing" -version = "4.0.0-dev" -dependencies = [ - "ansi_term", - "atty", - "chrono", - "criterion", - "lazy_static", - "libc", - "log", - "once_cell", - "parking_lot 0.12.1", - "regex", - "rustc-hash", - "sc-client-api", - "sc-rpc-server", - "sc-tracing-proc-macro", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-tracing", - "thiserror", - "tracing", - "tracing-log", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sc-tracing-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sc-transaction-pool" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "async-trait", - "criterion", - "futures", - "futures-timer", - "linked-hash-map", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-tracing", - "sp-transaction-pool", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "substrate-test-runtime-transaction-pool", - "thiserror", -] - -[[package]] -name = "sc-transaction-pool-api" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-utils" -version = "4.0.0-dev" -dependencies = [ - "backtrace", - "futures", - "futures-timer", - "lazy_static", - "log", - "parking_lot 0.12.1", - "prometheus", - "tokio-test", -] - -[[package]] -name = "scale-info" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" -dependencies = [ - "bitvec", - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", - "serde", -] - -[[package]] -name = "scale-info-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "schnellru" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" -dependencies = [ - "ahash 0.8.3", - "cfg-if", - "hashbrown 0.13.2", -] - -[[package]] -name = "schnorrkel" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "getrandom 0.1.16", - "merlin", - "rand 0.7.3", - "rand_core 0.5.1", - "sha2 0.8.2", - "subtle", - "zeroize", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" - -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sdp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" -dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.6", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" -dependencies = [ - "cc", -] - -[[package]] -name = "secrecy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" -dependencies = [ - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha3" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" -dependencies = [ - "digest 0.10.6", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.6", - "rand_core 0.6.4", -] - -[[package]] -name = "simba" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slice-group-by" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "snap" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" - -[[package]] -name = "snow" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" -dependencies = [ - "aes-gcm 0.9.4", - "blake2", - "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", - "rand_core 0.6.4", - "ring", - "rustc_version 0.4.0", - "sha2 0.10.6", - "subtle", -] - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "flate2", - "futures", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - -[[package]] -name = "sp-api" -version = "4.0.0-dev" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "sp-api-proc-macro", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-test-primitives", - "sp-trie", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-api-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "blake2", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-api-test" -version = "2.0.1" -dependencies = [ - "criterion", - "futures", - "log", - "parity-scale-codec", - "rustversion", - "sc-block-builder", - "sp-api", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-version", - "substrate-test-runtime-client", - "trybuild", -] - -[[package]] -name = "sp-application-crypto" -version = "7.0.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std", -] - -[[package]] -name = "sp-application-crypto-test" -version = "2.0.0" -dependencies = [ - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "substrate-test-runtime-client", -] - -[[package]] -name = "sp-arithmetic" -version = "6.0.0" -dependencies = [ - "criterion", - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "primitive-types", - "rand 0.8.5", - "scale-info", - "serde", - "sp-core", - "sp-std", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic-fuzzer" -version = "2.0.0" -dependencies = [ - "honggfuzz", - "num-bigint", - "primitive-types", - "sp-arithmetic", -] - -[[package]] -name = "sp-ark-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-bls12-377", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-bls12-381" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-bw6-761" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-bw6-761", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-ed-on-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-ed-on-bls12-377", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-ed-on-bls12-381" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-ed-on-bls12-381", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-models" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "getrandom 0.2.8", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "sp-ark-utils" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#19550ad950cb4a03248eeb70fd742b431a66608f" -dependencies = [ - "ark-serialize", - "ark-std", -] - -[[package]] -name = "sp-arkworks" -version = "0.4.0" -dependencies = [ - "ark-bls12-377", - "ark-bls12-381", - "ark-bw6-761", - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-std", -] - -[[package]] -name = "sp-arkworks-test" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-bls12-377", - "sp-ark-bls12-381", - "sp-ark-bw6-761", - "sp-ark-ed-on-bls12-377", - "sp-ark-ed-on-bls12-381", - "sp-ark-models", - "sp-io", -] - -[[package]] -name = "sp-authority-discovery" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-beefy" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "lazy_static", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", - "strum", -] - -[[package]] -name = "sp-block-builder" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-inherents", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-blockchain" -version = "4.0.0-dev" -dependencies = [ - "futures", - "log", - "lru", - "parity-scale-codec", - "parking_lot 0.12.1", - "sp-api", - "sp-consensus", - "sp-database", - "sp-runtime", - "sp-state-machine", - "thiserror", -] - -[[package]] -name = "sp-consensus" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "parity-scale-codec", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-test-primitives", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-consensus-aura" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-inherents", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-babe" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "merlin", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-pow" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-consensus-slots" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-vrf" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "schnorrkel", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-core" -version = "7.0.0" -dependencies = [ - "array-bytes", - "base58", - "bitflags", - "blake2", - "bounded-collections", - "criterion", - "dyn-clonable", - "ed25519-zebra", - "futures", - "hash-db", - "hash256-std-hasher", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "primitive-types", - "rand 0.8.5", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "serde_json", - "sp-core-hashing", - "sp-core-hashing-proc-macro", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-serializer", - "sp-std", - "sp-storage", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "zeroize", -] - -[[package]] -name = "sp-core-hashing" -version = "5.0.0" -dependencies = [ - "blake2", - "byteorder", - "digest 0.10.6", - "sha2 0.10.6", - "sha3", - "sp-std", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing-proc-macro" -version = "5.0.0" -dependencies = [ - "proc-macro2", - "quote", - "sp-core-hashing", - "syn", -] - -[[package]] -name = "sp-database" -version = "4.0.0-dev" -dependencies = [ - "kvdb", - "parking_lot 0.12.1", -] - -[[package]] -name = "sp-debug-derive" -version = "5.0.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-externalities" -version = "0.13.0" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std", - "sp-storage", -] - -[[package]] -name = "sp-finality-grandpa" -version = "4.0.0-dev" -dependencies = [ - "finality-grandpa", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-inherents" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-io" -version = "7.0.0" -dependencies = [ - "bytes", - "ed25519", - "ed25519-dalek", - "futures", - "libsecp256k1", - "log", - "parity-scale-codec", - "secp256k1", - "sp-arkworks", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keyring" -version = "7.0.0" -dependencies = [ - "lazy_static", - "sp-core", - "sp-runtime", - "strum", -] - -[[package]] -name = "sp-keystore" -version = "0.13.0" -dependencies = [ - "async-trait", - "futures", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.7.3", - "rand_chacha 0.2.2", - "schnorrkel", - "serde", - "sp-core", - "sp-externalities", - "thiserror", -] - -[[package]] -name = "sp-maybe-compressed-blob" -version = "4.1.0-dev" -dependencies = [ - "thiserror", - "zstd", -] - -[[package]] -name = "sp-mmr-primitives" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "ckb-merkle-mountain-range", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-core", - "sp-debug-derive", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-npos-elections" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", - "substrate-test-utils", -] - -[[package]] -name = "sp-npos-elections-fuzzer" -version = "2.0.0-alpha.5" -dependencies = [ - "clap 4.1.4", - "honggfuzz", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "sp-offchain" -version = "4.0.0-dev" -dependencies = [ - "sp-api", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sp-panic-handler" -version = "5.0.0" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-rpc" -version = "6.0.0" -dependencies = [ - "rustc-hash", - "serde", - "serde_json", - "sp-core", -] - -[[package]] -name = "sp-runtime" -version = "7.0.0" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand 0.8.5", - "scale-info", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "substrate-test-runtime-client", - "zstd", -] - -[[package]] -name = "sp-runtime-interface" -version = "7.0.0" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "rustversion", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface-proc-macro", - "sp-runtime-interface-test-wasm", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", - "static_assertions", - "trybuild", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-runtime-interface-test" -version = "2.0.0" -dependencies = [ - "sc-executor", - "sc-executor-common", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-runtime-interface-test-wasm", - "sp-runtime-interface-test-wasm-deprecated", - "sp-state-machine", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-runtime-interface-test-wasm" -version = "2.0.0" -dependencies = [ - "bytes", - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sp-runtime-interface-test-wasm-deprecated" -version = "2.0.0" -dependencies = [ - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sp-serializer" -version = "4.0.0-dev" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "sp-session" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "sp-staking" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-state-machine" -version = "0.13.0" -dependencies = [ - "array-bytes", - "assert_matches", - "hash-db", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "pretty_assertions", - "rand 0.8.5", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-runtime", - "sp-std", - "sp-trie", - "thiserror", - "tracing", - "trie-db", -] - -[[package]] -name = "sp-std" -version = "5.0.0" - -[[package]] -name = "sp-storage" -version = "7.0.0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive", - "sp-std", -] - -[[package]] -name = "sp-test-primitives" -version = "2.0.0" -dependencies = [ - "parity-scale-codec", - "serde", - "sp-application-crypto", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sp-timestamp" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures-timer", - "log", - "parity-scale-codec", - "sp-inherents", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-tracing" -version = "6.0.0" -dependencies = [ - "parity-scale-codec", - "sp-std", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-transaction-pool" -version = "4.0.0-dev" -dependencies = [ - "sp-api", - "sp-runtime", -] - -[[package]] -name = "sp-transaction-storage-proof" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-std", - "sp-trie", -] - -[[package]] -name = "sp-trie" -version = "7.0.0" -dependencies = [ - "ahash 0.8.3", - "array-bytes", - "criterion", - "hash-db", - "hashbrown 0.12.3", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "schnellru", - "sp-core", - "sp-runtime", - "sp-std", - "thiserror", - "tracing", - "trie-bench", - "trie-db", - "trie-root", - "trie-standardmap", -] - -[[package]] -name = "sp-version" -version = "5.0.0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "parity-wasm", - "scale-info", - "serde", - "sp-core-hashing-proc-macro", - "sp-runtime", - "sp-std", - "sp-version-proc-macro", - "thiserror", -] - -[[package]] -name = "sp-version-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "sp-version", - "syn", -] - -[[package]] -name = "sp-wasm-interface" -version = "7.0.0" -dependencies = [ - "anyhow", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std", - "wasmi 0.13.2", - "wasmtime", -] - -[[package]] -name = "sp-weights" -version = "4.0.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "ss58-registry" -version = "1.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" -dependencies = [ - "Inflector", - "num-format", - "proc-macro2", - "quote", - "serde", - "serde_json", - "unicode-xid", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "static_init" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" -dependencies = [ - "bitflags", - "cfg_aliases", - "libc", - "parking_lot 0.11.2", - "parking_lot_core 0.8.6", - "static_init_macro", - "winapi", -] - -[[package]] -name = "static_init_macro" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" -dependencies = [ - "cfg_aliases", - "memchr", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[package]] -name = "stun" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" -dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", -] - -[[package]] -name = "subkey" -version = "2.0.2" -dependencies = [ - "clap 4.1.4", - "sc-cli", -] - -[[package]] -name = "substrate-bip39" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" -dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "substrate-build-script-utils" -version = "3.0.0" -dependencies = [ - "platforms 2.0.0", -] - -[[package]] -name = "substrate-frame-cli" -version = "4.0.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-support", - "frame-system", - "sc-cli", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "substrate-frame-rpc-support" -version = "3.0.0" -dependencies = [ - "frame-support", - "frame-system", - "jsonrpsee", - "parity-scale-codec", - "sc-rpc-api", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-storage", - "tokio", -] - -[[package]] -name = "substrate-frame-rpc-system" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-system-rpc-runtime-api", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-rpc-api", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-core", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "substrate-prometheus-endpoint" -version = "0.10.0-dev" -dependencies = [ - "hyper", - "log", - "prometheus", - "thiserror", - "tokio", -] - -[[package]] -name = "substrate-rpc-client" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "jsonrpsee", - "log", - "sc-rpc-api", - "serde", - "sp-core", - "sp-runtime", - "tokio", -] - -[[package]] -name = "substrate-state-trie-migration-rpc" -version = "4.0.0-dev" -dependencies = [ - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-rpc-api", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-trie", - "trie-db", -] - -[[package]] -name = "substrate-test-client" -version = "2.0.1" -dependencies = [ - "array-bytes", - "async-trait", - "futures", - "parity-scale-codec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-offchain", - "sc-service", - "serde", - "serde_json", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", -] - -[[package]] -name = "substrate-test-runtime" -version = "2.0.0" -dependencies = [ - "cfg-if", - "frame-support", - "frame-system", - "frame-system-rpc-runtime-api", - "futures", - "log", - "memory-db", - "pallet-babe", - "pallet-beefy-mmr", - "pallet-timestamp", - "parity-scale-codec", - "sc-block-builder", - "sc-executor", - "sc-service", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-beefy", - "sp-block-builder", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-core", - "sp-externalities", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-offchain", - "sp-runtime", - "sp-runtime-interface", - "sp-session", - "sp-state-machine", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "substrate-test-runtime-client", - "substrate-wasm-builder", - "trie-db", -] - -[[package]] -name = "substrate-test-runtime-client" -version = "2.0.0" -dependencies = [ - "futures", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "substrate-test-client", - "substrate-test-runtime", -] - -[[package]] -name = "substrate-test-runtime-transaction-pool" -version = "2.0.0" -dependencies = [ - "futures", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-blockchain", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", -] - -[[package]] -name = "substrate-test-utils" -version = "4.0.0-dev" -dependencies = [ - "futures", - "sc-service", - "substrate-test-utils-derive", - "tokio", - "trybuild", -] - -[[package]] -name = "substrate-test-utils-derive" -version = "0.10.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "substrate-test-utils-test-crate" -version = "0.1.0" -dependencies = [ - "sc-service", - "substrate-test-utils", - "tokio", -] - -[[package]] -name = "substrate-wasm-builder" -version = "5.0.0-dev" -dependencies = [ - "ansi_term", - "build-helper", - "cargo_metadata", - "filetime", - "sp-maybe-compressed-blob", - "strum", - "tempfile", - "toml", - "walkdir", - "wasm-opt", -] - -[[package]] -name = "substring" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "system-configuration" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "target-lexicon" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "termtree" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" - -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - -[[package]] -name = "thiserror" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thousands" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" - -[[package]] -name = "thread_local" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f297120ff9d4efe680df143d5631bba9c75fa371992b7fcb33eb3453cb0a07" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny-bip39" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" -dependencies = [ - "anyhow", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.11.0", - "rand 0.8.5", - "rustc-hash", - "sha2 0.10.6", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite 0.2.9", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.42.0", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.8", - "tokio", - "webpki 0.22.0", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.9", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-util" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e267c18a719545b481171952a79f8c25c80361463ba44bc7fa9eba7c742ef4f" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite 0.2.9", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite 0.2.9", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite 0.2.9", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers 0.0.1", - "parking_lot 0.11.2", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers 0.1.0", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "trie-bench" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbb0a830db7c42ae97ce4e21b30e2cf9dbcc1b4f7853bd1aedad3d806c281d0" -dependencies = [ - "criterion", - "hash-db", - "keccak-hasher", - "memory-db", - "parity-scale-codec", - "trie-db", - "trie-root", - "trie-standardmap", -] - -[[package]] -name = "trie-db" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" -dependencies = [ - "hash-db", - "hashbrown 0.12.3", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" -dependencies = [ - "hash-db", -] - -[[package]] -name = "trie-standardmap" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3161ba520ab28cd8e6b68e1126f1009f6e335339d1a73b978139011703264c8" -dependencies = [ - "hash-db", - "keccak-hasher", -] - -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand 0.8.5", - "smallvec", - "socket2", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "lru-cache", - "parking_lot 0.12.1", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "try-runtime-cli" -version = "0.10.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-remote-externalities", - "frame-try-runtime", - "hex", - "log", - "parity-scale-codec", - "sc-cli", - "sc-executor", - "sc-service", - "serde", - "serde_json", - "sp-api", - "sp-core", - "sp-debug-derive", - "sp-externalities", - "sp-io", - "sp-keystore", - "sp-rpc", - "sp-runtime", - "sp-state-machine", - "sp-version", - "sp-weights", - "substrate-rpc-client", - "tokio", - "zstd", -] - -[[package]] -name = "trybuild" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" -dependencies = [ - "basic-toml", - "dissimilar", - "glob", - "once_cell", - "serde", - "serde_derive", - "serde_json", - "termcolor", -] - -[[package]] -name = "tt-call" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" - -[[package]] -name = "turn" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "futures", - "log", - "md-5", - "rand 0.8.5", - "ring", - "stun", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "digest 0.10.6", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "unsigned-varint" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures-io", - "futures-util", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna 0.3.0", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "wait-timeout" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" -dependencies = [ - "libc", -] - -[[package]] -name = "waitgroup" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" -dependencies = [ - "atomic-waker", -] - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-encoder" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasm-instrument" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasm-instrument" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasm-opt" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" -dependencies = [ - "anyhow", - "libc", - "strum", - "strum_macros", - "tempfile", - "thiserror", - "wasm-opt-cxx-sys", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-cxx-sys" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" -dependencies = [ - "anyhow", - "cxx", - "cxx-build", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-sys" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" -dependencies = [ - "anyhow", - "cc", - "cxx", - "cxx-build", - "regex", -] - -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmi" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" -dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core 0.2.1", -] - -[[package]] -name = "wasmi" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" -dependencies = [ - "spin 0.9.5", - "wasmi_arena", - "wasmi_core 0.5.0", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasmi_arena" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" - -[[package]] -name = "wasmi_core" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" -dependencies = [ - "downcast-rs", - "libm 0.2.6", - "memory_units", - "num-rational", - "num-traits", -] - -[[package]] -name = "wasmi_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" -dependencies = [ - "downcast-rs", - "libm 0.2.6", - "num-traits", -] - -[[package]] -name = "wasmparser" -version = "0.96.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adde01ade41ab9a5d10ec8ed0bb954238cf8625b5cd5a13093d6de2ad9c2be1a" -dependencies = [ - "indexmap", - "url", -] - -[[package]] -name = "wasmparser-nostd" -version = "0.91.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c37f310b5a62bfd5ae7c0f1d8e6f98af16a5d6d84ba764e9c36439ec14e318b" -dependencies = [ - "indexmap-nostd", -] - -[[package]] -name = "wasmtime" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5b183a159484980138cc05231419c536d395a7b25c1802091310ea2f74276a" -dependencies = [ - "anyhow", - "bincode", - "cfg-if", - "indexmap", - "libc", - "log", - "object 0.29.0", - "once_cell", - "paste", - "psm", - "rayon", - "serde", - "target-lexicon", - "wasmparser", - "wasmtime-cache", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-jit", - "wasmtime-runtime", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb1cb256d76cf07b20264c808351c8b525ece56de1ef4d93f87a0aaf342db" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "wasmtime-cache" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830570847f905b8f6d2ca635c33cf42ce701dd8e4abd7d1806c631f8f06e9e4b" -dependencies = [ - "anyhow", - "base64 0.13.1", - "bincode", - "directories-next", - "file-per-thread-logger", - "log", - "rustix", - "serde", - "sha2 0.10.6", - "toml", - "windows-sys 0.42.0", - "zstd", -] - -[[package]] -name = "wasmtime-cranelift" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7695d3814dcb508bf4d1c181a86ea6b97a209f6444478e95d86e2ffab8d1a3" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli 0.26.2", - "log", - "object 0.29.0", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-environ" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a2a5f0fb93aa837a727a48dd1076e8a9f882cc2fee20b433c04a18740ff63b" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli 0.26.2", - "indexmap", - "log", - "object 0.29.0", - "serde", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-jit" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c78f9fb2922dbb5a95f009539d4badb44866caeeb53d156bf2cf4d683c3afd" -dependencies = [ - "addr2line 0.17.0", - "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli 0.26.2", - "log", - "object 0.29.0", - "rustc-demangle", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cacdb52a77b8c8e744e510beeabf0bd698b1c94c59eed33c52b3fbd19639b0" -dependencies = [ - "object 0.29.0", - "once_cell", - "rustix", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fcba5ebd96da2a9f0747ab6337fe9788adfb3f63fa2c180520d665562d257e" -dependencies = [ - "cfg-if", - "libc", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-runtime" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0793210acf50d4c69182c916abaee1d423dc5d172cdfde6acfea2f9446725940" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap", - "libc", - "log", - "mach", - "memfd", - "memoffset 0.6.5", - "paste", - "rand 0.8.5", - "rustix", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-types" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d015ba8b231248a811e323cf7a525cd3f982d4be0b9e62d27685102e5f12b1" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - -[[package]] -name = "wast" -version = "53.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" -dependencies = [ - "wast", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "webrtc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "hex", - "interceptor", - "lazy_static", - "log", - "rand 0.8.5", - "rcgen 0.9.3", - "regex", - "ring", - "rtcp", - "rtp", - "rustls 0.19.1", - "sdp", - "serde", - "serde_json", - "sha2 0.10.6", - "stun", - "thiserror", - "time 0.3.17", - "tokio", - "turn", - "url", - "waitgroup", - "webrtc-data", - "webrtc-dtls", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "webrtc-data" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" -dependencies = [ - "bytes", - "derive_builder", - "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", -] - -[[package]] -name = "webrtc-dtls" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" -dependencies = [ - "aes 0.6.0", - "aes-gcm 0.8.0", - "async-trait", - "bincode", - "block-modes", - "byteorder", - "ccm", - "curve25519-dalek 3.2.0", - "der-parser 8.1.0", - "elliptic-curve", - "hkdf", - "hmac 0.10.1", - "log", - "oid-registry 0.6.1", - "p256", - "p384", - "rand 0.8.5", - "rand_core 0.6.4", - "rcgen 0.9.3", - "ring", - "rustls 0.19.1", - "sec1", - "serde", - "sha-1", - "sha2 0.9.9", - "signature", - "subtle", - "thiserror", - "tokio", - "webpki 0.21.4", - "webrtc-util", - "x25519-dalek 2.0.0-pre.1", - "x509-parser 0.13.2", -] - -[[package]] -name = "webrtc-ice" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" -dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", -] - -[[package]] -name = "webrtc-mdns" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" -dependencies = [ - "log", - "socket2", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-media" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" -dependencies = [ - "byteorder", - "bytes", - "derive_builder", - "displaydoc", - "rand 0.8.5", - "rtp", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "webrtc-sctp" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-srtp" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "aes-gcm 0.9.4", - "async-trait", - "byteorder", - "bytes", - "ctr 0.8.0", - "hmac 0.11.0", - "log", - "rtcp", - "rtp", - "sha-1", - "subtle", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-util" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix 0.24.3", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", -] - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "which" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "wide" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feff0a412894d67223777b6cc8d68c0dab06d52d95e9890d5f2d47f10dd9366c" -dependencies = [ - "bytemuck", - "safe_arch", -] - -[[package]] -name = "widestring" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" -dependencies = [ - "windows_aarch64_msvc 0.34.0", - "windows_i686_gnu 0.34.0", - "windows_i686_msvc 0.34.0", - "windows_x86_64_gnu 0.34.0", - "windows_x86_64_msvc 0.34.0", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_i686_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" -dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" -dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "x509-parser" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" -dependencies = [ - "asn1-rs 0.3.1", - "base64 0.13.1", - "data-encoding", - "der-parser 7.0.0", - "lazy_static", - "nom", - "oid-registry 0.4.0", - "ring", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "x509-parser" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" -dependencies = [ - "asn1-rs 0.5.1", - "base64 0.13.1", - "data-encoding", - "der-parser 8.1.0", - "lazy_static", - "nom", - "oid-registry 0.6.1", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "yamux" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "yasna" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" -dependencies = [ - "time 0.3.17", -] - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" -dependencies = [ - "cc", - "libc", - "pkg-config", -] From 3c8d315f88a4defe9fe11f1f6c7aa8f3d11866a1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Feb 2023 10:50:25 +0100 Subject: [PATCH 189/364] fix std leak --- Cargo.lock | 13049 +++++++++++++++++++++++++++++++++++++ primitives/io/Cargo.toml | 2 +- 2 files changed, 13050 insertions(+), 1 deletion(-) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000000..840badec4c038 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,13049 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli 0.26.2", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.1", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array 0.14.6", + "rand_core 0.6.4", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead 0.3.2", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash 0.3.1", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arbitrary" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "390ae58ca5e3ed40d8c1eb9c939931258562c1c331a0ea10d76091f450c50b43" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d7f0c52aff14f216200a9eee06a9990fee2e51fc9599e226df448ad3232886" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ee31d8869a353433524dbd5a8f51f95cdafe7c66d458956ec13aa737198562" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.6", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc8f7ec7fdcc20f3f110783c043d80479b42f500003cf92b71ca90f34a2ba0e" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15aa320e38052d644e569740bad208e5f9f5fafedcc9e6b1557f723be1b7ff8d" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-poly" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2e8741caf33ab3063f1fc65617716ffb18cba8e872998aa2eef0d4e4b56d1" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-r1cs-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de1d1472e5cb020cb3405ce2567c91c8d43f21b674aef37b0202f5c3304761db" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-std", + "derivative", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-serialize" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ea39d00a8a4c832e6f6520e58ccec7bf909c4845863512e9b8656fd47df355" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.6", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "101333772a4020c883890811500d5ecc704c545a90140629af5c3b9f00d78953" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "array-bytes" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "asn1-rs" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" +dependencies = [ + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + +[[package]] +name = "asn1-rs" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +dependencies = [ + "asn1-rs-derive 0.4.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "asn1_der" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" + +[[package]] +name = "assert_cmd" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +dependencies = [ + "bstr", + "doc-comment", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-io" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +dependencies = [ + "async-lock", + "autocfg", + "concurrent-queue", + "futures-lite", + "libc", + "log", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "windows-sys 0.42.0", +] + +[[package]] +name = "async-lock" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +dependencies = [ + "event-listener", + "futures-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +dependencies = [ + "async-stream-impl", + "futures-core", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.9", +] + +[[package]] +name = "atomic-waker" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +dependencies = [ + "addr2line 0.19.0", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.30.3", + "rustc-demangle", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "base64ct" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" + +[[package]] +name = "basic-toml" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" +dependencies = [ + "serde", +] + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "beefy-gadget" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "async-trait", + "fnv", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-network-test", + "sc-utils", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-beefy", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-keyring", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "tempfile", + "thiserror", + "tokio", + "wasm-timer", +] + +[[package]] +name = "beefy-gadget-rpc" +version = "4.0.0-dev" +dependencies = [ + "beefy-gadget", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-rpc", + "serde", + "serde_json", + "sp-beefy", + "sp-core", + "sp-runtime", + "substrate-test-runtime-client", + "thiserror", + "tokio", +] + +[[package]] +name = "binary-merkle-tree" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "env_logger 0.9.3", + "hash-db", + "log", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.64.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.6", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding 0.1.5", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "block-modes" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" +dependencies = [ + "block-padding 0.2.1", + "cipher 0.2.5", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bounded-collections" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de2aff4807e40f478132150d80b031f2461d88f061851afcab537d7600c24120" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bstr" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +dependencies = [ + "memchr", + "once_cell", + "regex-automata", + "serde", +] + +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytemuck" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "camino" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.16", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "ccm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" +dependencies = [ + "aead 0.3.2", + "cipher 0.2.5", + "subtle", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-expr" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chacha20" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +dependencies = [ + "aead 0.4.3", + "chacha20", + "cipher 0.3.0", + "poly1305", + "zeroize", +] + +[[package]] +name = "chain-spec-builder" +version = "2.0.0" +dependencies = [ + "ansi_term", + "clap 4.1.4", + "node-cli", + "rand 0.8.5", + "sc-chain-spec", + "sc-keystore", + "sp-core", + "sp-keystore", +] + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time 0.1.45", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "cid" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" +dependencies = [ + "core2", + "multibase", + "multihash", + "serde", + "unsigned-varint", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "ckb-merkle-mountain-range" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "clang-sys" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "bitflags", + "clap_lex 0.2.4", + "indexmap", + "textwrap", +] + +[[package]] +name = "clap" +version = "4.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" +dependencies = [ + "bitflags", + "clap_derive", + "clap_lex 0.3.1", + "is-terminal", + "once_cell", + "strsim", + "termcolor", +] + +[[package]] +name = "clap_complete" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6540eedc41f8a5a76cf3d8d458057dcdf817be4158a55b5f861f7a5483de75" +dependencies = [ + "clap 4.1.4", +] + +[[package]] +name = "clap_derive" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "clap_lex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "comfy-table" +version = "6.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +dependencies = [ + "strum", + "strum_macros", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" + +[[package]] +name = "constant_time_eq" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + +[[package]] +name = "cranelift-bforest" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3d54eab028f5805ae3b26fd60eca3f3a9cfb76b989d9bab173be3f61356cc3" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2be1d5f2c3cca1efb691844bc1988b89c77291f13f778499a3f3c0cf49c0ed61" +dependencies = [ + "arrayvec 0.7.2", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli 0.26.2", + "hashbrown 0.12.3", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9b1b1089750ce4005893af7ee00bb08a2cf1c9779999c0f7164cbc8ad2e0d2" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5fbaec51de47297fd7304986fd53c8c0030abbe69728a60d72e1c63559318d" + +[[package]] +name = "cranelift-entity" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab984c94593f876090fae92e984bdcc74d9b1acf740ab5f79036001c65cba13" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0cb3102d21a2fe5f3210af608748ddd0cd09825ac12d42dc56ed5ed8725fe0" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72101dd1f441d629735143c41e00b3428f9267738176983ef588ff43382af0a0" + +[[package]] +name = "cranelift-native" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22b0d9fcbe3fc5a1af9e7021b44ce42b930bcefac446ce22e02e8f9a0d67120" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddebe32fb14fbfd9efa5f130ffb8f4665795de019928dcd7247b136c46f9249" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap 3.2.23", + "criterion-plot", + "futures", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.7.1", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array 0.14.6", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.6", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" +dependencies = [ + "generic-array 0.14.6", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.6", + "subtle", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ctr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + +[[package]] +name = "curve25519-dalek" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +dependencies = [ + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +dependencies = [ + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms 3.0.2", + "subtle", + "zeroize", +] + +[[package]] +name = "cxx" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90d59d9acd2a682b4e40605a242f6670eaa58c5957471cbf85e8aa6a0b97a5e8" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebfa40bda659dd5c864e65f4c9a2b0aff19bea56b017b9b77c73d3766a453a38" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457ce6757c5c70dc6ecdbda6925b958aae7f959bda7d8fb9bde889e34a09dc03" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf883b7aacd7b2aeb2a7b338648ee19f57c140d4ee8e52c68979c6b2f7f2263" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "darling" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "data-encoding" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" + +[[package]] +name = "data-encoding-macro" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +dependencies = [ + "data-encoding", + "syn", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +dependencies = [ + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +dependencies = [ + "asn1-rs 0.5.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer 0.10.3", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dissimilar" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e" + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "dtoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dyn-clone" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der", + "elliptic-curve", + "rfc6979", + "signature", +] + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint", + "der", + "digest 0.10.6", + "ff", + "generic-array 0.14.6", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "enum-as-inner" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enumflags2" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "exit-future" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +dependencies = [ + "futures", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "fdlimit" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +dependencies = [ + "libc", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" + +[[package]] +name = "file-per-thread-logger" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger 0.10.0", + "log", +] + +[[package]] +name = "filetime" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.45.0", +] + +[[package]] +name = "finality-grandpa" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +dependencies = [ + "either", + "futures", + "futures-timer", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "scale-info", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fork-tree" +version = "3.0.0" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + +[[package]] +name = "frame-benchmarking" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", + "parity-scale-codec", + "paste", + "rusty-fork", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "static_assertions", +] + +[[package]] +name = "frame-benchmarking-cli" +version = "4.0.0-dev" +dependencies = [ + "Inflector", + "array-bytes", + "chrono", + "clap 4.1.4", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools", + "lazy_static", + "linked-hash-map", + "log", + "parity-scale-codec", + "rand 0.8.5", + "rand_pcg", + "sc-block-builder", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-service", + "sc-sysinfo", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-trie", + "thiserror", + "thousands", +] + +[[package]] +name = "frame-benchmarking-pallet-pov" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "frame-election-provider-solution-type" +version = "4.0.0-dev" +dependencies = [ + "frame-election-provider-support", + "frame-support", + "parity-scale-codec", + "proc-macro-crate", + "proc-macro2", + "quote", + "scale-info", + "sp-arithmetic", + "syn", + "trybuild", +] + +[[package]] +name = "frame-election-provider-support" +version = "4.0.0-dev" +dependencies = [ + "frame-election-provider-solution-type", + "frame-support", + "frame-system", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "frame-election-solution-type-fuzzer" +version = "2.0.0-alpha.5" +dependencies = [ + "clap 4.1.4", + "frame-election-provider-solution-type", + "frame-election-provider-support", + "frame-support", + "honggfuzz", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-arithmetic", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "frame-executive" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "frame-support", + "frame-system", + "frame-try-runtime", + "pallet-balances", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "sp-version", +] + +[[package]] +name = "frame-metadata" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "frame-remote-externalities" +version = "0.10.0-dev" +dependencies = [ + "frame-support", + "futures", + "log", + "pallet-elections-phragmen", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "substrate-rpc-client", + "tokio", + "tracing-subscriber 0.3.16", +] + +[[package]] +name = "frame-support" +version = "4.0.0-dev" +dependencies = [ + "assert_matches", + "bitflags", + "frame-metadata", + "frame-support-procedural", + "frame-system", + "impl-trait-for-tuples", + "k256", + "log", + "once_cell", + "parity-scale-codec", + "paste", + "pretty_assertions", + "scale-info", + "serde", + "serde_json", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-core-hashing-proc-macro", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-weights", + "tt-call", +] + +[[package]] +name = "frame-support-procedural" +version = "4.0.0-dev" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "frame-support-procedural-tools", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "frame-support-test" +version = "3.0.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-support-test-pallet", + "frame-system", + "parity-scale-codec", + "pretty_assertions", + "rustversion", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", + "trybuild", +] + +[[package]] +name = "frame-support-test-compile-pass" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-version", +] + +[[package]] +name = "frame-support-test-pallet" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "frame-system" +version = "4.0.0-dev" +dependencies = [ + "criterion", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", + "sp-weights", + "substrate-test-runtime-client", +] + +[[package]] +name = "frame-system-benchmarking" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "frame-system-rpc-runtime-api" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "frame-try-runtime" +version = "0.10.0-dev" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" + +[[package]] +name = "futures-executor" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.9", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +dependencies = [ + "futures-io", + "rustls 0.20.8", + "webpki 0.22.0", +] + +[[package]] +name = "futures-sink" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" + +[[package]] +name = "futures-task" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + +[[package]] +name = "futures-util" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.9", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generate-bags" +version = "4.0.0-dev" +dependencies = [ + "chrono", + "frame-election-provider-support", + "frame-support", + "frame-system", + "git2", + "num-format", + "pallet-staking", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.4.5", +] + +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.5.3", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" + +[[package]] +name = "git2" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "handlebars" +version = "4.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hash-db" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.6", +] + +[[package]] +name = "honggfuzz" +version = "0.5.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" +dependencies = [ + "arbitrary", + "lazy_static", + "memmap2", + "rustc_version 0.4.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite 0.2.9", +] + +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.9", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "log", + "rustls 0.20.8", + "rustls-native-certs", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if-addrs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "if-watch" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" +dependencies = [ + "async-io", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "rtnetlink", + "system-configuration", + "tokio", + "windows", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "interceptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +dependencies = [ + "async-trait", + "bytes", + "log", + "rand 0.8.5", + "rtcp", + "rtp", + "thiserror", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +dependencies = [ + "socket2", + "widestring", + "winapi", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + +[[package]] +name = "is-terminal" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "jobserver" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonrpsee" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" +dependencies = [ + "jsonrpsee-core", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" +dependencies = [ + "futures-util", + "http", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" +dependencies = [ + "anyhow", + "arrayvec 0.7.2", + "async-lock", + "async-trait", + "beef", + "futures-channel", + "futures-timer", + "futures-util", + "globset", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" +dependencies = [ + "futures-channel", + "futures-util", + "http", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "soketto", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" +dependencies = [ + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + +[[package]] +name = "k256" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "keccak" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-hasher" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711adba9940a039f4374fc5724c0a5eaca84a2d558cce62256bfe26f0dbef05e" +dependencies = [ + "hash-db", + "hash256-std-hasher", + "tiny-keccak", +] + +[[package]] +name = "kitchensink-runtime" +version = "3.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-benchmarking-pallet-pov", + "frame-election-provider-support", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "node-primitives", + "pallet-alliance", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-contracts", + "pallet-contracts-primitives", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-insecure-randomness-collective-flip", + "pallet-lottery", + "pallet-membership", + "pallet-message-queue", + "pallet-mmr", + "pallet-multisig", + "pallet-nfts", + "pallet-nis", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-remark", + "pallet-root-testing", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-core", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "static_assertions", + "substrate-wasm-builder", +] + +[[package]] +name = "kvdb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +dependencies = [ + "smallvec", +] + +[[package]] +name = "kvdb-memorydb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +dependencies = [ + "kvdb", + "parking_lot 0.12.1", +] + +[[package]] +name = "kvdb-rocksdb" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" +dependencies = [ + "kvdb", + "num_cpus", + "parking_lot 0.12.1", + "regex", + "rocksdb", + "smallvec", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "libgit2-sys" +version = "0.14.2+1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "libp2p" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "getrandom 0.2.8", + "instant", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-mplex", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-wasm-ext", + "libp2p-webrtc", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr", + "parking_lot 0.12.1", + "pin-project", + "smallvec", +] + +[[package]] +name = "libp2p-core" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "log", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "prost", + "prost-build", + "rand 0.8.5", + "rw-stream-sink", + "sec1", + "sha2 0.10.6", + "smallvec", + "thiserror", + "unsigned-varint", + "void", + "zeroize", +] + +[[package]] +name = "libp2p-dns" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +dependencies = [ + "futures", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "smallvec", + "trust-dns-resolver", +] + +[[package]] +name = "libp2p-identify" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +dependencies = [ + "asynchronous-codec", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-swarm", + "log", + "lru", + "prost", + "prost-build", + "prost-codec", + "smallvec", + "thiserror", + "void", +] + +[[package]] +name = "libp2p-kad" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +dependencies = [ + "arrayvec 0.7.2", + "asynchronous-codec", + "bytes", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "prost", + "prost-build", + "rand 0.8.5", + "sha2 0.10.6", + "smallvec", + "thiserror", + "uint", + "unsigned-varint", + "void", +] + +[[package]] +name = "libp2p-mdns" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +dependencies = [ + "data-encoding", + "futures", + "if-watch", + "libp2p-core", + "libp2p-swarm", + "log", + "rand 0.8.5", + "smallvec", + "socket2", + "tokio", + "trust-dns-proto", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +dependencies = [ + "libp2p-core", + "libp2p-identify", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "prometheus-client", +] + +[[package]] +name = "libp2p-mplex" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures", + "libp2p-core", + "log", + "nohash-hasher", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "unsigned-varint", +] + +[[package]] +name = "libp2p-noise" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" +dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core", + "log", + "once_cell", + "prost", + "prost-build", + "rand 0.8.5", + "sha2 0.10.6", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", +] + +[[package]] +name = "libp2p-ping" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +dependencies = [ + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "rand 0.8.5", + "void", +] + +[[package]] +name = "libp2p-quic" +version = "0.7.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-tls", + "log", + "parking_lot 0.12.1", + "quinn-proto", + "rand 0.8.5", + "rustls 0.20.8", + "thiserror", + "tokio", +] + +[[package]] +name = "libp2p-request-response" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +dependencies = [ + "async-trait", + "bytes", + "futures", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "rand 0.8.5", + "smallvec", + "unsigned-varint", +] + +[[package]] +name = "libp2p-swarm" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm-derive", + "log", + "pin-project", + "rand 0.8.5", + "smallvec", + "thiserror", + "tokio", + "void", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +dependencies = [ + "heck", + "quote", + "syn", +] + +[[package]] +name = "libp2p-tcp" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "log", + "socket2", + "tokio", +] + +[[package]] +name = "libp2p-tls" +version = "0.1.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "rcgen 0.10.0", + "ring", + "rustls 0.20.8", + "thiserror", + "webpki 0.22.0", + "x509-parser 0.14.0", + "yasna", +] + +[[package]] +name = "libp2p-wasm-ext" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +dependencies = [ + "futures", + "js-sys", + "libp2p-core", + "parity-send-wrapper", + "wasm-bindgen", + "wasm-bindgen-futures", +] + +[[package]] +name = "libp2p-webrtc" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +dependencies = [ + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core", + "libp2p-noise", + "log", + "multihash", + "prost", + "prost-build", + "prost-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", +] + +[[package]] +name = "libp2p-websocket" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +dependencies = [ + "either", + "futures", + "futures-rustls", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "quicksink", + "rw-stream-sink", + "soketto", + "url", + "webpki-roots", +] + +[[package]] +name = "libp2p-yamux" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +dependencies = [ + "futures", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "thiserror", + "yamux", +] + +[[package]] +name = "librocksdb-sys" +version = "0.8.3+7.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "linregress" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" +dependencies = [ + "nalgebra", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "lite-json" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0e787ffe1153141a0f6f6d759fdf1cc34b1226e088444523812fd412a5cca2" +dependencies = [ + "lite-parser", +] + +[[package]] +name = "lite-parser" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d5f9dc37c52d889a21fd701983d02bb6a84f852c5140a6c80ef4557f7dc29e" +dependencies = [ + "paste", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "lru" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "rawpointer", +] + +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.6", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memfd" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +dependencies = [ + "rustix", +] + +[[package]] +name = "memmap2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory-db" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" +dependencies = [ + "hash-db", + "hashbrown 0.12.3", +] + +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + +[[package]] +name = "merlin" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.42.0", +] + +[[package]] +name = "mmr-gadget" +version = "4.0.0-dev" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-offchain", + "sp-api", + "sp-beefy", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", + "sp-tracing", + "substrate-test-runtime-client", + "tokio", +] + +[[package]] +name = "mmr-rpc" +version = "4.0.0-dev" +dependencies = [ + "anyhow", + "jsonrpsee", + "parity-scale-codec", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", +] + +[[package]] +name = "mockall" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "multiaddr" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.6", + "multihash-derive", + "sha2 0.10.6", + "sha3", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "multistream-select" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" +dependencies = [ + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint", +] + +[[package]] +name = "nalgebra" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "names" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "netlink-packet-core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +dependencies = [ + "anyhow", + "bitflags", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror", +] + +[[package]] +name = "netlink-proto" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", + "static_assertions", +] + +[[package]] +name = "node-bench" +version = "0.9.0-dev" +dependencies = [ + "array-bytes", + "clap 4.1.4", + "derive_more", + "fs_extra", + "futures", + "hash-db", + "kitchensink-runtime", + "kvdb", + "kvdb-rocksdb", + "lazy_static", + "log", + "node-primitives", + "node-testing", + "parity-db", + "rand 0.8.5", + "sc-basic-authorship", + "sc-client-api", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "serde_json", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", + "sp-tracing", + "sp-trie", + "tempfile", +] + +[[package]] +name = "node-cli" +version = "3.0.0-dev" +dependencies = [ + "array-bytes", + "assert_cmd", + "clap 4.1.4", + "clap_complete", + "criterion", + "frame-benchmarking-cli", + "frame-system", + "frame-system-rpc-runtime-api", + "futures", + "jsonrpsee", + "kitchensink-runtime", + "log", + "nix 0.26.2", + "node-executor", + "node-inspect", + "node-primitives", + "node-rpc", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-balances", + "pallet-im-online", + "pallet-timestamp", + "pallet-transaction-payment", + "parity-scale-codec", + "platforms 2.0.0", + "rand 0.8.5", + "regex", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-block-builder", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-executor", + "sc-finality-grandpa", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-rpc", + "sc-service", + "sc-service-test", + "sc-storage-monitor", + "sc-sync-state-rpc", + "sc-sysinfo", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "serde_json", + "soketto", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-finality-grandpa", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "sp-tracing", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "substrate-build-script-utils", + "substrate-frame-cli", + "substrate-rpc-client", + "tempfile", + "tokio", + "tokio-util", + "try-runtime-cli", + "wait-timeout", +] + +[[package]] +name = "node-executor" +version = "3.0.0-dev" +dependencies = [ + "criterion", + "frame-benchmarking", + "frame-support", + "frame-system", + "futures", + "kitchensink-runtime", + "node-primitives", + "node-testing", + "pallet-balances", + "pallet-contracts", + "pallet-im-online", + "pallet-root-testing", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury", + "parity-scale-codec", + "sc-executor", + "scale-info", + "sp-application-crypto", + "sp-consensus-babe", + "sp-core", + "sp-externalities", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-tracing", + "sp-trie", + "wat", +] + +[[package]] +name = "node-inspect" +version = "0.9.0-dev" +dependencies = [ + "clap 4.1.4", + "parity-scale-codec", + "sc-cli", + "sc-client-api", + "sc-executor", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "node-primitives" +version = "2.0.0" +dependencies = [ + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "node-rpc" +version = "3.0.0-dev" +dependencies = [ + "jsonrpsee", + "mmr-rpc", + "node-primitives", + "pallet-transaction-payment-rpc", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-babe-rpc", + "sc-consensus-epochs", + "sc-finality-grandpa", + "sc-finality-grandpa-rpc", + "sc-rpc", + "sc-rpc-api", + "sc-rpc-spec-v2", + "sc-sync-state-rpc", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-keystore", + "sp-runtime", + "substrate-frame-rpc-system", + "substrate-state-trie-migration-rpc", +] + +[[package]] +name = "node-runtime-generate-bags" +version = "3.0.0" +dependencies = [ + "clap 4.1.4", + "generate-bags", + "kitchensink-runtime", +] + +[[package]] +name = "node-template" +version = "4.0.0-dev" +dependencies = [ + "clap 4.1.4", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "futures", + "jsonrpsee", + "node-template-runtime", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", + "sc-basic-authorship", + "sc-cli", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-executor", + "sc-finality-grandpa", + "sc-keystore", + "sc-rpc", + "sc-rpc-api", + "sc-service", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-core", + "sp-finality-grandpa", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-timestamp", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "try-runtime-cli", +] + +[[package]] +name = "node-template-runtime" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-aura", + "pallet-balances", + "pallet-grandpa", + "pallet-insecure-randomness-collective-flip", + "pallet-sudo", + "pallet-template", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-std", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", +] + +[[package]] +name = "node-testing" +version = "3.0.0-dev" +dependencies = [ + "frame-system", + "fs_extra", + "futures", + "kitchensink-runtime", + "log", + "node-executor", + "node-primitives", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-transaction-payment", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-service", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-timestamp", + "substrate-test-client", + "tempfile", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.2", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", + "libm 0.2.6", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "object" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +dependencies = [ + "crc32fast", + "hashbrown 0.12.3", + "indexmap", + "memchr", +] + +[[package]] +name = "object" +version = "0.30.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.1", +] + +[[package]] +name = "once_cell" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "output_vt100" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" +dependencies = [ + "winapi", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + +[[package]] +name = "pallet-alliance" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-collective", + "pallet-identity", + "parity-scale-codec", + "scale-info", + "sha2 0.10.6", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-asset-tx-payment" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-storage", +] + +[[package]] +name = "pallet-assets" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-atomic-swap" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-aura" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-authority-discovery" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-authority-discovery", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-authorship" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-babe" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-balances", + "pallet-offences", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-vrf", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-bags-list" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "pallet-bags-list-fuzzer" +version = "4.0.0-dev" +dependencies = [ + "frame-election-provider-support", + "honggfuzz", + "pallet-bags-list", + "rand 0.8.5", +] + +[[package]] +name = "pallet-bags-list-remote-tests" +version = "4.0.0-dev" +dependencies = [ + "frame-election-provider-support", + "frame-remote-externalities", + "frame-support", + "frame-system", + "log", + "pallet-bags-list", + "pallet-staking", + "sp-core", + "sp-runtime", + "sp-std", + "sp-storage", + "sp-tracing", +] + +[[package]] +name = "pallet-balances" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-beefy" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-beefy", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-beefy-mmr" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "binary-merkle-tree", + "frame-support", + "frame-system", + "log", + "pallet-beefy", + "pallet-mmr", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-beefy", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-bounties" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-child-bounties" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-bounties", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-collective" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-contracts" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "assert_matches", + "bitflags", + "env_logger 0.9.3", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-contracts-primitives", + "pallet-contracts-proc-macro", + "pallet-insecure-randomness-collective-flip", + "pallet-timestamp", + "pallet-utility", + "parity-scale-codec", + "pretty_assertions", + "rand 0.8.5", + "rand_pcg", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-std", + "wasm-instrument 0.4.0", + "wasmi 0.20.0", + "wasmparser-nostd", + "wat", +] + +[[package]] +name = "pallet-contracts-primitives" +version = "7.0.0" +dependencies = [ + "bitflags", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", + "sp-weights", +] + +[[package]] +name = "pallet-contracts-proc-macro" +version = "4.0.0-dev" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pallet-conviction-voting" +version = "4.0.0-dev" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-scheduler", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-democracy" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-preimage", + "pallet-scheduler", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-election-provider-multi-phase" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-election-provider-support-benchmarking", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-std", + "sp-tracing", + "strum", +] + +[[package]] +name = "pallet-election-provider-support-benchmarking" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-system", + "parity-scale-codec", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "pallet-elections-phragmen" +version = "5.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", +] + +[[package]] +name = "pallet-example-basic" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-example-offchain-worker" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "lite-json", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-fast-unstake" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-tracing", + "substrate-test-utils", +] + +[[package]] +name = "pallet-grandpa" +version = "4.0.0-dev" +dependencies = [ + "finality-grandpa", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-balances", + "pallet-offences", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-finality-grandpa", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-identity" +version = "4.0.0-dev" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-im-online" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-indices" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-insecure-randomness-collective-flip" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-lottery" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-membership" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-message-queue" +version = "7.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "rand 0.8.5", + "rand_distr", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "sp-weights", +] + +[[package]] +name = "pallet-mmr" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "env_logger 0.9.3", + "frame-benchmarking", + "frame-support", + "frame-system", + "itertools", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-multisig" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nfts" +version = "4.0.0-dev" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nicks" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nis" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-node-authorization" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools" +version = "1.0.0" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "pallet-nomination-pools-benchmarking" +version = "1.0.0" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-bags-list", + "pallet-balances", + "pallet-nomination-pools", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools-fuzzer" +version = "2.0.0" +dependencies = [ + "frame-support", + "frame-system", + "honggfuzz", + "log", + "pallet-nomination-pools", + "rand 0.8.5", + "sp-io", + "sp-runtime", + "sp-tracing", +] + +[[package]] +name = "pallet-nomination-pools-runtime-api" +version = "1.0.0-dev" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools-test-staking" +version = "1.0.0" +dependencies = [ + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-bags-list", + "pallet-balances", + "pallet-nomination-pools", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "pallet-offences" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-offences-benchmarking" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", + "pallet-im-online", + "pallet-offences", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-preimage" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-proxy" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-ranked-collective" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-recovery" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-referenda" +version = "4.0.0-dev" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-preimage", + "pallet-scheduler", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-remark" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-root-offences" +version = "1.0.0-dev" +dependencies = [ + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-root-testing" +version = "1.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-scheduler" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-preimage", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-weights", + "substrate-test-utils", +] + +[[package]] +name = "pallet-scored-pool" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-session" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-trie", +] + +[[package]] +name = "pallet-session-benchmarking" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-std", +] + +[[package]] +name = "pallet-society" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "rand_chacha 0.2.2", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-staking" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-bags-list", + "pallet-balances", + "pallet-session", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "rand_chacha 0.2.2", + "scale-info", + "serde", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-tracing", + "substrate-test-utils", +] + +[[package]] +name = "pallet-staking-reward-curve" +version = "4.0.0-dev" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "sp-runtime", + "syn", +] + +[[package]] +name = "pallet-staking-reward-fn" +version = "4.0.0-dev" +dependencies = [ + "log", + "sp-arithmetic", +] + +[[package]] +name = "pallet-state-trie-migration" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-remote-externalities", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-state-trie-migration-rpc", + "thousands", + "tokio", + "zstd", +] + +[[package]] +name = "pallet-sudo" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-template" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-timestamp" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "pallet-tips" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-storage", +] + +[[package]] +name = "pallet-transaction-payment" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-transaction-payment-rpc" +version = "4.0.0-dev" +dependencies = [ + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-transaction-payment-rpc-runtime-api" +version = "4.0.0-dev" +dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-transaction-storage" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-transaction-storage-proof", +] + +[[package]] +name = "pallet-treasury" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-uniques" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-utility" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collective", + "pallet-root-testing", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-vesting" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-whitelist" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-preimage", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "parity-db" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" +dependencies = [ + "blake2", + "crc32fast", + "fs2", + "hex", + "libc", + "log", + "lz4", + "memmap2", + "parking_lot 0.12.1", + "rand 0.8.5", + "snap", +] + +[[package]] +name = "parity-scale-codec" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +dependencies = [ + "arrayvec 0.7.2", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "parity-send-wrapper" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" + +[[package]] +name = "parity-wasm" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.7", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac 0.11.1", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.6", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pest" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.6", +] + +[[package]] +name = "petgraph" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "platforms" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" + +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + +[[package]] +name = "plotters" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" + +[[package]] +name = "plotters-svg" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "polling" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +dependencies = [ + "autocfg", + "cfg-if", + "libc", + "log", + "wepoll-ffi", + "windows-sys 0.42.0", +] + +[[package]] +name = "poly1305" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "predicates" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +dependencies = [ + "difflib", + "float-cmp", + "itertools", + "normalize-line-endings", + "predicates-core", + "regex", +] + +[[package]] +name = "predicates-core" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" + +[[package]] +name = "predicates-tree" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "pretty_assertions" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" +dependencies = [ + "ctor", + "diff", + "output_vt100", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "primitive-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.1", + "thiserror", +] + +[[package]] +name = "prometheus-client" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +dependencies = [ + "dtoa", + "itoa", + "parking_lot 0.12.1", + "prometheus-client-derive-text-encode", +] + +[[package]] +name = "prometheus-client-derive-text-encode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn", + "tempfile", + "which", +] + +[[package]] +name = "prost-codec" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" +dependencies = [ + "asynchronous-codec", + "bytes", + "prost", + "thiserror", + "unsigned-varint", +] + +[[package]] +name = "prost-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +dependencies = [ + "bytes", + "prost", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quickcheck" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "quicksink" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" +dependencies = [ + "futures-core", + "futures-sink", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "quinn-proto" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls 0.20.8", + "slab", + "thiserror", + "tinyvec", + "tracing", + "webpki 0.22.0", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "rcgen" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" +dependencies = [ + "pem", + "ring", + "time 0.3.17", + "x509-parser 0.13.2", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring", + "time 0.3.17", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.8", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "regalloc2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint", + "hmac 0.12.1", + "zeroize", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rocksdb" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rpassword" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +dependencies = [ + "libc", + "rtoolbox", + "winapi", +] + +[[package]] +name = "rtcp" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +dependencies = [ + "bytes", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "rtnetlink" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +dependencies = [ + "futures", + "log", + "netlink-packet-route", + "netlink-proto", + "nix 0.24.3", + "thiserror", + "tokio", +] + +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "rtp" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" +dependencies = [ + "async-trait", + "bytes", + "rand 0.8.5", + "serde", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.16", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.36.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring", + "sct 0.6.1", + "webpki 0.21.4", +] + +[[package]] +name = "rustls" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +dependencies = [ + "log", + "ring", + "sct 0.7.0", + "webpki 0.22.0", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.0", +] + +[[package]] +name = "rustversion" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", +] + +[[package]] +name = "rw-stream-sink" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "safe-mix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version 0.2.3", +] + +[[package]] +name = "safe_arch" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sc-allocator" +version = "4.1.0-dev" +dependencies = [ + "log", + "sp-core", + "sp-wasm-interface", + "thiserror", +] + +[[package]] +name = "sc-authority-discovery" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "ip_network", + "libp2p", + "log", + "parity-scale-codec", + "prost", + "prost-build", + "quickcheck", + "rand 0.8.5", + "sc-client-api", + "sc-network-common", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "thiserror", +] + +[[package]] +name = "sc-basic-authorship" +version = "0.10.0-dev" +dependencies = [ + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-proposer-metrics", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", +] + +[[package]] +name = "sc-block-builder" +version = "0.10.0-dev" +dependencies = [ + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "substrate-test-runtime-client", +] + +[[package]] +name = "sc-chain-spec" +version = "4.0.0-dev" +dependencies = [ + "memmap2", + "sc-chain-spec-derive", + "sc-network-common", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sc-chain-spec-derive" +version = "4.0.0-dev" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sc-cli" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "chrono", + "clap 4.1.4", + "fdlimit", + "futures", + "futures-timer", + "libp2p", + "log", + "names", + "parity-scale-codec", + "rand 0.8.5", + "regex", + "rpassword", + "sc-client-api", + "sc-client-db", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-service", + "sc-telemetry", + "sc-tracing", + "sc-utils", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", + "sp-tracing", + "sp-version", + "tempfile", + "thiserror", + "tiny-bip39", + "tokio", +] + +[[package]] +name = "sc-client-api" +version = "4.0.0-dev" +dependencies = [ + "fnv", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-executor", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-test-primitives", + "substrate-prometheus-endpoint", + "substrate-test-runtime", + "thiserror", +] + +[[package]] +name = "sc-client-db" +version = "0.10.0-dev" +dependencies = [ + "criterion", + "hash-db", + "kitchensink-runtime", + "kvdb", + "kvdb-memorydb", + "kvdb-rocksdb", + "linked-hash-map", + "log", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.1", + "quickcheck", + "rand 0.8.5", + "sc-client-api", + "sc-state-db", + "schnellru", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "sp-tracing", + "sp-trie", + "substrate-test-runtime-client", + "tempfile", +] + +[[package]] +name = "sc-consensus" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "libp2p", + "log", + "mockall", + "parking_lot 0.12.1", + "sc-client-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-test-primitives", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-aura" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-consensus-slots", + "sc-keystore", + "sc-network", + "sc-network-test", + "sc-telemetry", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "tempfile", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-consensus-babe" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "fork-tree", + "futures", + "log", + "merlin", + "num-bigint", + "num-rational", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand_chacha 0.2.2", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-keystore", + "sc-network", + "sc-network-test", + "sc-telemetry", + "scale-info", + "schnorrkel", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-consensus-babe-rpc" +version = "0.10.0-dev" +dependencies = [ + "futures", + "jsonrpsee", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-keystore", + "sc-rpc-api", + "serde", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "substrate-test-runtime-client", + "tempfile", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.10.0-dev" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-manual-seal" +version = "0.10.0-dev" +dependencies = [ + "assert_matches", + "async-trait", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-basic-authorship", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "substrate-test-runtime-transaction-pool", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-consensus-pow" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-consensus", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-pow", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-slots" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-telemetry", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "substrate-test-runtime-client", +] + +[[package]] +name = "sc-executor" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "assert_matches", + "criterion", + "env_logger 0.9.3", + "lru", + "num_cpus", + "parity-scale-codec", + "parking_lot 0.12.1", + "paste", + "regex", + "sc-executor-common", + "sc-executor-wasmi", + "sc-executor-wasmtime", + "sc-runtime-test", + "sc-tracing", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-maybe-compressed-blob", + "sp-panic-handler", + "sp-runtime", + "sp-runtime-interface", + "sp-state-machine", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "substrate-test-runtime", + "tempfile", + "tracing", + "tracing-subscriber 0.2.25", + "wasmi 0.13.2", + "wat", +] + +[[package]] +name = "sc-executor-common" +version = "0.10.0-dev" +dependencies = [ + "sc-allocator", + "sp-maybe-compressed-blob", + "sp-wasm-interface", + "thiserror", + "wasm-instrument 0.3.0", + "wasmi 0.13.2", +] + +[[package]] +name = "sc-executor-wasmi" +version = "0.10.0-dev" +dependencies = [ + "log", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmi 0.13.2", +] + +[[package]] +name = "sc-executor-wasmtime" +version = "0.10.0-dev" +dependencies = [ + "anyhow", + "cargo_metadata", + "cfg-if", + "libc", + "log", + "once_cell", + "parity-scale-codec", + "paste", + "rustix", + "sc-allocator", + "sc-executor-common", + "sc-runtime-test", + "sp-io", + "sp-runtime-interface", + "sp-wasm-interface", + "tempfile", + "wasmtime", + "wat", +] + +[[package]] +name = "sc-finality-grandpa" +version = "0.10.0-dev" +dependencies = [ + "ahash 0.8.3", + "array-bytes", + "assert_matches", + "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-network-test", + "sc-telemetry", + "sc-utils", + "serde", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-finality-grandpa-rpc" +version = "0.10.0-dev" +dependencies = [ + "finality-grandpa", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-finality-grandpa", + "sc-rpc", + "serde", + "sp-blockchain", + "sp-core", + "sp-finality-grandpa", + "sp-keyring", + "sp-runtime", + "substrate-test-runtime-client", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-informant" +version = "0.10.0-dev" +dependencies = [ + "ansi_term", + "futures", + "futures-timer", + "log", + "sc-client-api", + "sc-network-common", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-keystore" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "async-trait", + "parking_lot 0.12.1", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "tempfile", + "thiserror", +] + +[[package]] +name = "sc-network" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "assert_matches", + "async-trait", + "asynchronous-codec", + "backtrace", + "bytes", + "either", + "fnv", + "futures", + "futures-timer", + "ip_network", + "libp2p", + "log", + "lru", + "mockall", + "multistream-select", + "parity-scale-codec", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-peerset", + "sc-utils", + "serde", + "serde_json", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-test-primitives", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime", + "substrate-test-runtime-client", + "tempfile", + "thiserror", + "tokio", + "tokio-test", + "tokio-util", + "unsigned-varint", + "zeroize", +] + +[[package]] +name = "sc-network-bitswap" +version = "0.10.0-dev" +dependencies = [ + "cid", + "futures", + "libp2p", + "log", + "prost", + "prost-build", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-network-common", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "substrate-test-runtime", + "substrate-test-runtime-client", + "thiserror", + "tokio", + "unsigned-varint", +] + +[[package]] +name = "sc-network-common" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "bitflags", + "bytes", + "futures", + "futures-timer", + "libp2p", + "linked_hash_set", + "parity-scale-codec", + "prost-build", + "sc-consensus", + "sc-peerset", + "serde", + "smallvec", + "sp-blockchain", + "sp-consensus", + "sp-finality-grandpa", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-network-gossip" +version = "0.10.0-dev" +dependencies = [ + "ahash 0.8.3", + "futures", + "futures-timer", + "libp2p", + "log", + "lru", + "quickcheck", + "sc-network-common", + "sc-peerset", + "sp-runtime", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "tokio", + "tracing", +] + +[[package]] +name = "sc-network-light" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "futures", + "libp2p", + "log", + "parity-scale-codec", + "prost", + "prost-build", + "sc-client-api", + "sc-network-common", + "sc-peerset", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-network-sync" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "async-trait", + "fork-tree", + "futures", + "libp2p", + "log", + "lru", + "mockall", + "parity-scale-codec", + "prost", + "prost-build", + "quickcheck", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-network-common", + "sc-peerset", + "sc-utils", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-runtime", + "sp-test-primitives", + "sp-tracing", + "substrate-prometheus-endpoint", + "substrate-test-runtime-client", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-network-test" +version = "0.8.0" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "libp2p", + "log", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-service", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-runtime", + "sp-tracing", + "substrate-test-runtime", + "substrate-test-runtime-client", + "tokio", +] + +[[package]] +name = "sc-network-transactions" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "futures", + "libp2p", + "log", + "parity-scale-codec", + "pin-project", + "sc-network-common", + "sc-peerset", + "sc-utils", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-offchain" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "bytes", + "fnv", + "futures", + "futures-timer", + "hyper", + "hyper-rustls", + "lazy_static", + "libp2p", + "num_cpus", + "once_cell", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-client-api", + "sc-client-db", + "sc-network-common", + "sc-peerset", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-consensus", + "sp-core", + "sp-offchain", + "sp-runtime", + "sp-tracing", + "substrate-test-runtime-client", + "threadpool", + "tokio", + "tracing", +] + +[[package]] +name = "sc-peerset" +version = "4.0.0-dev" +dependencies = [ + "futures", + "libp2p", + "log", + "rand 0.8.5", + "sc-utils", + "serde_json", + "wasm-timer", +] + +[[package]] +name = "sc-proposer-metrics" +version = "0.10.0-dev" +dependencies = [ + "log", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-rpc" +version = "4.0.0-dev" +dependencies = [ + "assert_matches", + "env_logger 0.9.3", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-rpc-api", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-io", + "sp-keystore", + "sp-offchain", + "sp-rpc", + "sp-runtime", + "sp-session", + "sp-version", + "substrate-test-runtime-client", + "tokio", +] + +[[package]] +name = "sc-rpc-api" +version = "0.10.0-dev" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-transaction-pool-api", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror", +] + +[[package]] +name = "sc-rpc-server" +version = "4.0.0-dev" +dependencies = [ + "http", + "jsonrpsee", + "log", + "serde_json", + "substrate-prometheus-endpoint", + "tokio", + "tower", + "tower-http", +] + +[[package]] +name = "sc-rpc-spec-v2" +version = "0.10.0-dev" +dependencies = [ + "array-bytes", + "assert_matches", + "futures", + "futures-util", + "hex", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-transaction-pool-api", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-maybe-compressed-blob", + "sp-runtime", + "sp-version", + "substrate-test-runtime", + "substrate-test-runtime-client", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "sc-runtime-test" +version = "2.0.0" +dependencies = [ + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "substrate-wasm-builder", +] + +[[package]] +name = "sc-service" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "directories", + "exit-future", + "futures", + "futures-timer", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-informant", + "sc-keystore", + "sc-network", + "sc-network-bitswap", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-network-transactions", + "sc-offchain", + "sc-rpc", + "sc-rpc-server", + "sc-rpc-spec-v2", + "sc-storage-monitor", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "static_init", + "substrate-prometheus-endpoint", + "substrate-test-runtime", + "substrate-test-runtime-client", + "tempfile", + "thiserror", + "tokio", + "tracing", + "tracing-futures", +] + +[[package]] +name = "sc-service-test" +version = "2.0.0" +dependencies = [ + "array-bytes", + "fdlimit", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-network", + "sc-network-common", + "sc-service", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-tracing", + "sp-trie", + "substrate-test-runtime", + "substrate-test-runtime-client", + "tempfile", + "tokio", +] + +[[package]] +name = "sc-state-db" +version = "0.10.0-dev" +dependencies = [ + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sp-core", +] + +[[package]] +name = "sc-storage-monitor" +version = "0.1.0" +dependencies = [ + "clap 4.1.4", + "futures", + "log", + "nix 0.26.2", + "sc-client-db", + "sc-utils", + "sp-core", + "thiserror", + "tokio", +] + +[[package]] +name = "sc-sync-state-rpc" +version = "0.10.0-dev" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-finality-grandpa", + "serde", + "serde_json", + "sp-blockchain", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-sysinfo" +version = "6.0.0-dev" +dependencies = [ + "futures", + "libc", + "log", + "rand 0.8.5", + "rand_pcg", + "regex", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sc-telemetry" +version = "4.0.0-dev" +dependencies = [ + "chrono", + "futures", + "libp2p", + "log", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "sc-utils", + "serde", + "serde_json", + "thiserror", + "wasm-timer", +] + +[[package]] +name = "sc-tracing" +version = "4.0.0-dev" +dependencies = [ + "ansi_term", + "atty", + "chrono", + "criterion", + "lazy_static", + "libc", + "log", + "once_cell", + "parking_lot 0.12.1", + "regex", + "rustc-hash", + "sc-client-api", + "sc-rpc-server", + "sc-tracing-proc-macro", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-tracing", + "thiserror", + "tracing", + "tracing-log", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sc-tracing-proc-macro" +version = "4.0.0-dev" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sc-transaction-pool" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "assert_matches", + "async-trait", + "criterion", + "futures", + "futures-timer", + "linked-hash-map", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-client-api", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-tracing", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "substrate-test-runtime", + "substrate-test-runtime-client", + "substrate-test-runtime-transaction-pool", + "thiserror", +] + +[[package]] +name = "sc-transaction-pool-api" +version = "4.0.0-dev" +dependencies = [ + "async-trait", + "futures", + "log", + "serde", + "serde_json", + "sp-blockchain", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-utils" +version = "4.0.0-dev" +dependencies = [ + "backtrace", + "futures", + "futures-timer", + "lazy_static", + "log", + "parking_lot 0.12.1", + "prometheus", + "tokio-test", +] + +[[package]] +name = "scale-info" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] +name = "schnellru" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +dependencies = [ + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "curve25519-dalek 2.1.3", + "getrandom 0.1.16", + "merlin", + "rand 0.7.3", + "rand_core 0.5.1", + "sha2 0.8.2", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sdp" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" +dependencies = [ + "rand 0.8.5", + "substring", + "thiserror", + "url", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.6", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + +[[package]] +name = "sha3" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +dependencies = [ + "digest 0.10.6", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.6", + "rand_core 0.6.4", +] + +[[package]] +name = "simba" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "snow" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +dependencies = [ + "aes-gcm 0.9.4", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.0.0-rc.0", + "rand_core 0.6.4", + "ring", + "rustc_version 0.4.0", + "sha2 0.10.6", + "subtle", +] + +[[package]] +name = "socket2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "flate2", + "futures", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "sp-api" +version = "4.0.0-dev" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "sp-api-proc-macro", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-test-primitives", + "sp-trie", + "sp-version", + "thiserror", +] + +[[package]] +name = "sp-api-proc-macro" +version = "4.0.0-dev" +dependencies = [ + "blake2", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sp-api-test" +version = "2.0.1" +dependencies = [ + "criterion", + "futures", + "log", + "parity-scale-codec", + "rustversion", + "sc-block-builder", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-tracing", + "sp-version", + "substrate-test-runtime-client", + "trybuild", +] + +[[package]] +name = "sp-application-crypto" +version = "7.0.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std", +] + +[[package]] +name = "sp-application-crypto-test" +version = "2.0.0" +dependencies = [ + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-test-runtime-client", +] + +[[package]] +name = "sp-arithmetic" +version = "6.0.0" +dependencies = [ + "criterion", + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "primitive-types", + "rand 0.8.5", + "scale-info", + "serde", + "sp-core", + "sp-std", + "static_assertions", +] + +[[package]] +name = "sp-arithmetic-fuzzer" +version = "2.0.0" +dependencies = [ + "honggfuzz", + "num-bigint", + "primitive-types", + "sp-arithmetic", +] + +[[package]] +name = "sp-ark-bls12-377" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-bls12-377", + "ark-ff", + "ark-r1cs-std", + "ark-serialize", + "ark-std", + "sp-ark-models", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-bls12-381" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "sp-ark-models", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-bw6-761" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-bw6-761", + "ark-ff", + "ark-serialize", + "ark-std", + "sp-ark-models", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-ed-on-bls12-377" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-ed-on-bls12-377", + "ark-ff", + "ark-r1cs-std", + "ark-serialize", + "ark-std", + "sp-ark-models", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-ed-on-bls12-381", + "ark-ff", + "ark-r1cs-std", + "ark-serialize", + "ark-std", + "sp-ark-models", + "sp-ark-utils", +] + +[[package]] +name = "sp-ark-models" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.8", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "sp-ark-utils" +version = "0.4.0" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "sp-arkworks" +version = "0.4.0" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bw6-761", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ff", + "ark-serialize", + "ark-std", + "sp-std", +] + +[[package]] +name = "sp-arkworks-test" +version = "0.4.0" +dependencies = [ + "ark-algebra-test-templates", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", + "sp-ark-bls12-381", + "sp-ark-bw6-761", + "sp-ark-ed-on-bls12-377", + "sp-ark-ed-on-bls12-381", + "sp-ark-models", + "sp-io", +] + +[[package]] +name = "sp-authority-discovery" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-beefy" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "lazy_static", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", + "strum", +] + +[[package]] +name = "sp-block-builder" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-blockchain" +version = "4.0.0-dev" +dependencies = [ + "futures", + "log", + "lru", + "parity-scale-codec", + "parking_lot 0.12.1", + "sp-api", + "sp-consensus", + "sp-database", + "sp-runtime", + "sp-state-machine", + "thiserror", +] + +[[package]] +name = "sp-consensus" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "futures", + "log", + "parity-scale-codec", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-test-primitives", + "sp-version", + "thiserror", +] + +[[package]] +name = "sp-consensus-aura" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-babe" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "merlin", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-pow" +version = "0.10.0-dev" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-consensus-slots" +version = "0.10.0-dev" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-vrf" +version = "0.10.0-dev" +dependencies = [ + "parity-scale-codec", + "scale-info", + "schnorrkel", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-core" +version = "7.0.0" +dependencies = [ + "array-bytes", + "base58", + "bitflags", + "blake2", + "bounded-collections", + "criterion", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "lazy_static", + "libsecp256k1", + "log", + "merlin", + "parity-scale-codec", + "parking_lot 0.12.1", + "primitive-types", + "rand 0.8.5", + "regex", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "serde_json", + "sp-core-hashing", + "sp-core-hashing-proc-macro", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-serializer", + "sp-std", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tiny-bip39", + "zeroize", +] + +[[package]] +name = "sp-core-hashing" +version = "5.0.0" +dependencies = [ + "blake2", + "byteorder", + "digest 0.10.6", + "sha2 0.10.6", + "sha3", + "sp-std", + "twox-hash", +] + +[[package]] +name = "sp-core-hashing-proc-macro" +version = "5.0.0" +dependencies = [ + "proc-macro2", + "quote", + "sp-core-hashing", + "syn", +] + +[[package]] +name = "sp-database" +version = "4.0.0-dev" +dependencies = [ + "kvdb", + "parking_lot 0.12.1", +] + +[[package]] +name = "sp-debug-derive" +version = "5.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sp-externalities" +version = "0.13.0" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std", + "sp-storage", +] + +[[package]] +name = "sp-finality-grandpa" +version = "4.0.0-dev" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-inherents" +version = "4.0.0-dev" +dependencies = [ + "async-trait", + "futures", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", + "thiserror", +] + +[[package]] +name = "sp-io" +version = "7.0.0" +dependencies = [ + "bytes", + "ed25519", + "ed25519-dalek", + "futures", + "libsecp256k1", + "log", + "parity-scale-codec", + "secp256k1", + "sp-arkworks", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keyring" +version = "7.0.0" +dependencies = [ + "lazy_static", + "sp-core", + "sp-runtime", + "strum", +] + +[[package]] +name = "sp-keystore" +version = "0.13.0" +dependencies = [ + "async-trait", + "futures", + "merlin", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.7.3", + "rand_chacha 0.2.2", + "schnorrkel", + "serde", + "sp-core", + "sp-externalities", + "thiserror", +] + +[[package]] +name = "sp-maybe-compressed-blob" +version = "4.1.0-dev" +dependencies = [ + "thiserror", + "zstd", +] + +[[package]] +name = "sp-mmr-primitives" +version = "4.0.0-dev" +dependencies = [ + "array-bytes", + "ckb-merkle-mountain-range", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "sp-std", + "thiserror", +] + +[[package]] +name = "sp-npos-elections" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-runtime", + "sp-std", + "substrate-test-utils", +] + +[[package]] +name = "sp-npos-elections-fuzzer" +version = "2.0.0-alpha.5" +dependencies = [ + "clap 4.1.4", + "honggfuzz", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "sp-offchain" +version = "4.0.0-dev" +dependencies = [ + "sp-api", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-panic-handler" +version = "5.0.0" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + +[[package]] +name = "sp-rpc" +version = "6.0.0" +dependencies = [ + "rustc-hash", + "serde", + "serde_json", + "sp-core", +] + +[[package]] +name = "sp-runtime" +version = "7.0.0" +dependencies = [ + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "rand 0.8.5", + "scale-info", + "serde", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-weights", + "substrate-test-runtime-client", + "zstd", +] + +[[package]] +name = "sp-runtime-interface" +version = "7.0.0" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "rustversion", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime-interface-proc-macro", + "sp-runtime-interface-test-wasm", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", + "trybuild", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "6.0.0" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sp-runtime-interface-test" +version = "2.0.0" +dependencies = [ + "sc-executor", + "sc-executor-common", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-runtime-interface-test-wasm", + "sp-runtime-interface-test-wasm-deprecated", + "sp-state-machine", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-runtime-interface-test-wasm" +version = "2.0.0" +dependencies = [ + "bytes", + "sp-core", + "sp-io", + "sp-runtime-interface", + "sp-std", + "substrate-wasm-builder", +] + +[[package]] +name = "sp-runtime-interface-test-wasm-deprecated" +version = "2.0.0" +dependencies = [ + "sp-core", + "sp-io", + "sp-runtime-interface", + "sp-std", + "substrate-wasm-builder", +] + +[[package]] +name = "sp-serializer" +version = "4.0.0-dev" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "sp-session" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "sp-staking" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-state-machine" +version = "0.13.0" +dependencies = [ + "array-bytes", + "assert_matches", + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "pretty_assertions", + "rand 0.8.5", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-runtime", + "sp-std", + "sp-trie", + "thiserror", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-std" +version = "5.0.0" + +[[package]] +name = "sp-storage" +version = "7.0.0" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "sp-test-primitives" +version = "2.0.0" +dependencies = [ + "parity-scale-codec", + "serde", + "sp-application-crypto", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-timestamp" +version = "4.0.0-dev" +dependencies = [ + "async-trait", + "futures-timer", + "log", + "parity-scale-codec", + "sp-inherents", + "sp-runtime", + "sp-std", + "thiserror", +] + +[[package]] +name = "sp-tracing" +version = "6.0.0" +dependencies = [ + "parity-scale-codec", + "sp-std", + "tracing", + "tracing-core", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sp-transaction-pool" +version = "4.0.0-dev" +dependencies = [ + "sp-api", + "sp-runtime", +] + +[[package]] +name = "sp-transaction-storage-proof" +version = "4.0.0-dev" +dependencies = [ + "async-trait", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-trie", +] + +[[package]] +name = "sp-trie" +version = "7.0.0" +dependencies = [ + "ahash 0.8.3", + "array-bytes", + "criterion", + "hash-db", + "hashbrown 0.12.3", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", + "schnellru", + "sp-core", + "sp-runtime", + "sp-std", + "thiserror", + "tracing", + "trie-bench", + "trie-db", + "trie-root", + "trie-standardmap", +] + +[[package]] +name = "sp-version" +version = "5.0.0" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "parity-wasm", + "scale-info", + "serde", + "sp-core-hashing-proc-macro", + "sp-runtime", + "sp-std", + "sp-version-proc-macro", + "thiserror", +] + +[[package]] +name = "sp-version-proc-macro" +version = "4.0.0-dev" +dependencies = [ + "parity-scale-codec", + "proc-macro2", + "quote", + "sp-version", + "syn", +] + +[[package]] +name = "sp-wasm-interface" +version = "7.0.0" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "sp-std", + "wasmi 0.13.2", + "wasmtime", +] + +[[package]] +name = "sp-weights" +version = "4.0.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ss58-registry" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "static_init" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" +dependencies = [ + "bitflags", + "cfg_aliases", + "libc", + "parking_lot 0.11.2", + "parking_lot_core 0.8.6", + "static_init_macro", + "winapi", +] + +[[package]] +name = "static_init_macro" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +dependencies = [ + "cfg_aliases", + "memchr", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "stun" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +dependencies = [ + "base64 0.13.1", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "subkey" +version = "2.0.2" +dependencies = [ + "clap 4.1.4", + "sc-cli", +] + +[[package]] +name = "substrate-bip39" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" +dependencies = [ + "hmac 0.11.0", + "pbkdf2 0.8.0", + "schnorrkel", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "substrate-build-script-utils" +version = "3.0.0" +dependencies = [ + "platforms 2.0.0", +] + +[[package]] +name = "substrate-frame-cli" +version = "4.0.0-dev" +dependencies = [ + "clap 4.1.4", + "frame-support", + "frame-system", + "sc-cli", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "substrate-frame-rpc-support" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "jsonrpsee", + "parity-scale-codec", + "sc-rpc-api", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-storage", + "tokio", +] + +[[package]] +name = "substrate-frame-rpc-system" +version = "4.0.0-dev" +dependencies = [ + "assert_matches", + "frame-system-rpc-runtime-api", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-rpc-api", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-tracing", + "substrate-test-runtime-client", + "tokio", +] + +[[package]] +name = "substrate-prometheus-endpoint" +version = "0.10.0-dev" +dependencies = [ + "hyper", + "log", + "prometheus", + "thiserror", + "tokio", +] + +[[package]] +name = "substrate-rpc-client" +version = "0.10.0-dev" +dependencies = [ + "async-trait", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "sp-core", + "sp-runtime", + "tokio", +] + +[[package]] +name = "substrate-state-trie-migration-rpc" +version = "4.0.0-dev" +dependencies = [ + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-rpc-api", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-trie", + "trie-db", +] + +[[package]] +name = "substrate-test-client" +version = "2.0.1" +dependencies = [ + "array-bytes", + "async-trait", + "futures", + "parity-scale-codec", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-offchain", + "sc-service", + "serde", + "serde_json", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "substrate-test-runtime" +version = "2.0.0" +dependencies = [ + "cfg-if", + "frame-support", + "frame-system", + "frame-system-rpc-runtime-api", + "futures", + "log", + "memory-db", + "pallet-babe", + "pallet-beefy-mmr", + "pallet-timestamp", + "parity-scale-codec", + "sc-block-builder", + "sc-executor", + "sc-service", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-beefy", + "sp-block-builder", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-core", + "sp-externalities", + "sp-finality-grandpa", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-offchain", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-state-machine", + "sp-std", + "sp-transaction-pool", + "sp-trie", + "sp-version", + "substrate-test-runtime-client", + "substrate-wasm-builder", + "trie-db", +] + +[[package]] +name = "substrate-test-runtime-client" +version = "2.0.0" +dependencies = [ + "futures", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "substrate-test-client", + "substrate-test-runtime", +] + +[[package]] +name = "substrate-test-runtime-transaction-pool" +version = "2.0.0" +dependencies = [ + "futures", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-blockchain", + "sp-runtime", + "substrate-test-runtime-client", + "thiserror", +] + +[[package]] +name = "substrate-test-utils" +version = "4.0.0-dev" +dependencies = [ + "futures", + "sc-service", + "substrate-test-utils-derive", + "tokio", + "trybuild", +] + +[[package]] +name = "substrate-test-utils-derive" +version = "0.10.0-dev" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "substrate-test-utils-test-crate" +version = "0.1.0" +dependencies = [ + "sc-service", + "substrate-test-utils", + "tokio", +] + +[[package]] +name = "substrate-wasm-builder" +version = "5.0.0-dev" +dependencies = [ + "ansi_term", + "build-helper", + "cargo_metadata", + "filetime", + "sp-maybe-compressed-blob", + "strum", + "tempfile", + "toml", + "walkdir", + "wasm-opt", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "system-configuration" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "termtree" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.3+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" +dependencies = [ + "anyhow", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.11.0", + "rand 0.8.5", + "rustc-hash", + "sha2 0.10.6", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite 0.2.9", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.42.0", +] + +[[package]] +name = "tokio-macros" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls 0.20.8", + "tokio", + "webpki 0.22.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.9", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-test" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-util" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite 0.2.9", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite 0.2.9", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite 0.2.9", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers 0.0.1", + "parking_lot 0.11.2", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +dependencies = [ + "matchers 0.1.0", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "trie-bench" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbb0a830db7c42ae97ce4e21b30e2cf9dbcc1b4f7853bd1aedad3d806c281d0" +dependencies = [ + "criterion", + "hash-db", + "keccak-hasher", + "memory-db", + "parity-scale-codec", + "trie-db", + "trie-root", + "trie-standardmap", +] + +[[package]] +name = "trie-db" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" +dependencies = [ + "hash-db", + "hashbrown 0.12.3", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" +dependencies = [ + "hash-db", +] + +[[package]] +name = "trie-standardmap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3161ba520ab28cd8e6b68e1126f1009f6e335339d1a73b978139011703264c8" +dependencies = [ + "hash-db", + "keccak-hasher", +] + +[[package]] +name = "trust-dns-proto" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.2.3", + "ipnet", + "lazy_static", + "rand 0.8.5", + "smallvec", + "socket2", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lazy_static", + "lru-cache", + "parking_lot 0.12.1", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", + "trust-dns-proto", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "try-runtime-cli" +version = "0.10.0-dev" +dependencies = [ + "clap 4.1.4", + "frame-remote-externalities", + "frame-try-runtime", + "hex", + "log", + "parity-scale-codec", + "sc-cli", + "sc-executor", + "sc-service", + "serde", + "serde_json", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-externalities", + "sp-io", + "sp-keystore", + "sp-rpc", + "sp-runtime", + "sp-state-machine", + "sp-version", + "sp-weights", + "substrate-rpc-client", + "tokio", + "zstd", +] + +[[package]] +name = "trybuild" +version = "1.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" +dependencies = [ + "basic-toml", + "dissimilar", + "glob", + "once_cell", + "serde", + "serde_derive", + "serde_json", + "termcolor", +] + +[[package]] +name = "tt-call" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + +[[package]] +name = "turn" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" +dependencies = [ + "async-trait", + "base64 0.13.1", + "futures", + "log", + "md-5", + "rand 0.8.5", + "ring", + "stun", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.6", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array 0.14.6", + "subtle", +] + +[[package]] +name = "unsigned-varint" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures-io", + "futures-util", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna 0.3.0", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-encoder" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-instrument" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasm-instrument" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasm-opt" +version = "0.111.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" +dependencies = [ + "anyhow", + "libc", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "wasm-opt-cxx-sys", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-cxx-sys" +version = "0.111.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +dependencies = [ + "anyhow", + "cxx", + "cxx-build", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-sys" +version = "0.111.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" +dependencies = [ + "anyhow", + "cc", + "cxx", + "cxx-build", + "regex", +] + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmi" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" +dependencies = [ + "parity-wasm", + "wasmi-validation", + "wasmi_core 0.2.1", +] + +[[package]] +name = "wasmi" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" +dependencies = [ + "spin 0.9.5", + "wasmi_arena", + "wasmi_core 0.5.0", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi-validation" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasmi_arena" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" + +[[package]] +name = "wasmi_core" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" +dependencies = [ + "downcast-rs", + "libm 0.2.6", + "memory_units", + "num-rational", + "num-traits", +] + +[[package]] +name = "wasmi_core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" +dependencies = [ + "downcast-rs", + "libm 0.2.6", + "num-traits", +] + +[[package]] +name = "wasmparser" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adde01ade41ab9a5d10ec8ed0bb954238cf8625b5cd5a13093d6de2ad9c2be1a" +dependencies = [ + "indexmap", + "url", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.91.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c37f310b5a62bfd5ae7c0f1d8e6f98af16a5d6d84ba764e9c36439ec14e318b" +dependencies = [ + "indexmap-nostd", +] + +[[package]] +name = "wasmtime" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e5b183a159484980138cc05231419c536d395a7b25c1802091310ea2f74276a" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "indexmap", + "libc", + "log", + "object 0.29.0", + "once_cell", + "paste", + "psm", + "rayon", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-runtime", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0aeb1cb256d76cf07b20264c808351c8b525ece56de1ef4d93f87a0aaf342db" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cache" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830570847f905b8f6d2ca635c33cf42ce701dd8e4abd7d1806c631f8f06e9e4b" +dependencies = [ + "anyhow", + "base64 0.13.1", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix", + "serde", + "sha2 0.10.6", + "toml", + "windows-sys 0.42.0", + "zstd", +] + +[[package]] +name = "wasmtime-cranelift" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f7695d3814dcb508bf4d1c181a86ea6b97a209f6444478e95d86e2ffab8d1a3" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.26.2", + "log", + "object 0.29.0", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a2a5f0fb93aa837a727a48dd1076e8a9f882cc2fee20b433c04a18740ff63b" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli 0.26.2", + "indexmap", + "log", + "object 0.29.0", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c78f9fb2922dbb5a95f009539d4badb44866caeeb53d156bf2cf4d683c3afd" +dependencies = [ + "addr2line 0.17.0", + "anyhow", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli 0.26.2", + "log", + "object 0.29.0", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cacdb52a77b8c8e744e510beeabf0bd698b1c94c59eed33c52b3fbd19639b0" +dependencies = [ + "object 0.29.0", + "once_cell", + "rustix", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08fcba5ebd96da2a9f0747ab6337fe9788adfb3f63fa2c180520d665562d257e" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0793210acf50d4c69182c916abaee1d423dc5d172cdfde6acfea2f9446725940" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.6.5", + "paste", + "rand 0.8.5", + "rustix", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-types" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d015ba8b231248a811e323cf7a525cd3f982d4be0b9e62d27685102e5f12b1" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "wast" +version = "53.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" +dependencies = [ + "wast", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki 0.22.0", +] + +[[package]] +name = "webrtc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "hex", + "interceptor", + "lazy_static", + "log", + "rand 0.8.5", + "rcgen 0.9.3", + "regex", + "ring", + "rtcp", + "rtp", + "rustls 0.19.1", + "sdp", + "serde", + "serde_json", + "sha2 0.10.6", + "stun", + "thiserror", + "time 0.3.17", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" +dependencies = [ + "bytes", + "derive_builder", + "log", + "thiserror", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-dtls" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" +dependencies = [ + "aes 0.6.0", + "aes-gcm 0.8.0", + "async-trait", + "bincode", + "block-modes", + "byteorder", + "ccm", + "curve25519-dalek 3.2.0", + "der-parser 8.1.0", + "elliptic-curve", + "hkdf", + "hmac 0.10.1", + "log", + "oid-registry 0.6.1", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.9.3", + "ring", + "rustls 0.19.1", + "sec1", + "serde", + "sha-1", + "sha2 0.9.9", + "signature", + "subtle", + "thiserror", + "tokio", + "webpki 0.21.4", + "webrtc-util", + "x25519-dalek 2.0.0-pre.1", + "x509-parser 0.13.2", +] + +[[package]] +name = "webrtc-ice" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" +dependencies = [ + "arc-swap", + "async-trait", + "crc", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "stun", + "thiserror", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" +dependencies = [ + "log", + "socket2", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" +dependencies = [ + "byteorder", + "bytes", + "derive_builder", + "displaydoc", + "rand 0.8.5", + "rtp", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "webrtc-sctp" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "rand 0.8.5", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-srtp" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", + "async-trait", + "byteorder", + "bytes", + "ctr 0.8.0", + "hmac 0.11.0", + "log", + "rtcp", + "rtp", + "sha-1", + "subtle", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-util" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +dependencies = [ + "async-trait", + "bitflags", + "bytes", + "cc", + "ipnet", + "lazy_static", + "libc", + "log", + "nix 0.24.3", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi", +] + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "which" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] +name = "wide" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feff0a412894d67223777b6cc8d68c0dab06d52d95e9890d5f2d47f10dd9366c" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +dependencies = [ + "asn1-rs 0.3.1", + "base64 0.13.1", + "data-encoding", + "der-parser 7.0.0", + "lazy_static", + "nom", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs 0.5.1", + "base64 0.13.1", + "data-encoding", + "der-parser 8.1.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + +[[package]] +name = "yamux" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot 0.12.1", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yasna" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" +dependencies = [ + "time 0.3.17", +] + +[[package]] +name = "zeroize" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.7+zstd.1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index 95502ccd6304e..e459c0b2c87e2 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -20,7 +20,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = sp-core = { version = "7.0.0", default-features = false, path = "../core" } sp-keystore = { version = "0.13.0", default-features = false, optional = true, path = "../keystore" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } -libsecp256k1 = { version = "0.7", optional = true } +libsecp256k1 = { version = "0.7", default-features = false, optional = true } sp-state-machine = { version = "0.13.0", default-features = false, optional = true, path = "../state-machine" } sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../runtime-interface" } sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } From 0f581bf603c7e6e28ef05385041c5c214169c7d4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Feb 2023 13:40:57 +0100 Subject: [PATCH 190/364] merge master --- Cargo.lock | 282 +++++++++++++++++++++++++++++------------------------ 1 file changed, 153 insertions(+), 129 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c0871092a8ea9..a18457d9af838 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", @@ -794,9 +794,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.60.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ "bitflags", "cexpr", @@ -809,6 +809,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", + "syn", ] [[package]] @@ -840,24 +841,24 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] @@ -870,7 +871,7 @@ dependencies = [ "arrayvec 0.7.2", "cc", "cfg-if", - "constant_time_eq 0.2.4", + "constant_time_eq", ] [[package]] @@ -936,9 +937,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" dependencies = [ "memchr", "once_cell", @@ -981,9 +982,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -1318,12 +1319,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.2.4" @@ -1710,9 +1705,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.88" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8" +checksum = "90d59d9acd2a682b4e40605a242f6670eaa58c5957471cbf85e8aa6a0b97a5e8" dependencies = [ "cc", "cxxbridge-flags", @@ -1722,9 +1717,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.88" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8" +checksum = "ebfa40bda659dd5c864e65f4c9a2b0aff19bea56b017b9b77c73d3766a453a38" dependencies = [ "cc", "codespan-reporting", @@ -1737,15 +1732,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.88" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971" +checksum = "457ce6757c5c70dc6ecdbda6925b958aae7f959bda7d8fb9bde889e34a09dc03" [[package]] name = "cxxbridge-macro" -version = "1.0.88" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" +checksum = "ebf883b7aacd7b2aeb2a7b338648ee19f57c140d4ee8e52c68979c6b2f7f2263" dependencies = [ "proc-macro2", "quote", @@ -1754,9 +1749,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1764,9 +1759,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", @@ -1778,9 +1773,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", @@ -2301,14 +2296,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -2764,9 +2759,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "funty" @@ -3125,9 +3120,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -3147,6 +3142,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -3283,9 +3284,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3491,12 +3492,12 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -3525,14 +3526,14 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes 1.0.4", - "rustix 0.36.7", - "windows-sys 0.42.0", + "hermit-abi 0.3.1", + "io-lifetimes 1.0.5", + "rustix 0.36.8", + "windows-sys 0.45.0", ] [[package]] @@ -3561,9 +3562,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -4319,9 +4320,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.8.0+7.4.4" +version = "0.8.3+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" dependencies = [ "bindgen", "bzip2-sys", @@ -4582,7 +4583,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.7", + "rustix 0.36.8", ] [[package]] @@ -6969,9 +6970,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -7030,7 +7031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.6", + "parking_lot_core 0.9.7", ] [[package]] @@ -7049,15 +7050,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -7116,9 +7117,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7126,9 +7127,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7136,9 +7137,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", @@ -7149,9 +7150,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7160,9 +7161,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", @@ -7417,9 +7418,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ "unicode-ident", ] @@ -7995,16 +7996,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.7" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.4", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -9639,9 +9640,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", "ryu", @@ -9782,9 +9783,9 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" dependencies = [ "aes-gcm 0.9.4", "blake2", @@ -9928,7 +9929,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9942,7 +9943,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-bls12-381", "ark-ff", @@ -9955,7 +9956,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9968,7 +9969,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9982,7 +9983,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9996,7 +9997,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-ec", "ark-ff", @@ -10012,7 +10013,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#00333c8ecf57a4a85970b7363f0184363c9ef4eb" +source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" dependencies = [ "ark-serialize", "ark-std", @@ -10781,9 +10782,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11252,9 +11253,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" @@ -11337,12 +11338,11 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] @@ -11433,9 +11433,9 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -11506,9 +11506,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" dependencies = [ "bytes", "futures-core", @@ -11957,9 +11957,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ "getrandom 0.2.8", ] @@ -12053,9 +12053,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", "wasm-bindgen-macro", @@ -12063,9 +12063,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", @@ -12078,9 +12078,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -12090,9 +12090,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", "wasm-bindgen-macro-support", @@ -12100,9 +12100,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", "quote", @@ -12113,15 +12113,15 @@ 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-encoder" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" +checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" dependencies = [ "leb128", ] @@ -12217,7 +12217,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.4", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12452,9 +12452,9 @@ dependencies = [ [[package]] name = "wast" -version = "52.0.2" +version = "53.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707a9fd59b0144c530f0a31f21737036ffea6ece492918cae0843dd09b6f9bc9" +checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" dependencies = [ "leb128", "memchr", @@ -12464,18 +12464,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d73cbaa81acc2f8a3303e2289205c971d99c89245c2f56ab8765c4daabc2be" +checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -12820,6 +12820,30 @@ dependencies = [ "windows_x86_64_msvc 0.42.1", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.1" @@ -13070,9 +13094,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.5+zstd.1.5.2" +version = "2.0.7+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" dependencies = [ "cc", "libc", From 24d18f8a400379fa5cad0ca71e9bf3970db767ab Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Feb 2023 13:41:29 +0100 Subject: [PATCH 191/364] merge master --- Cargo.lock | 13104 --------------------------------------------------- 1 file changed, 13104 deletions(-) delete mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index a18457d9af838..0000000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13104 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli 0.26.2", -] - -[[package]] -name = "addr2line" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" -dependencies = [ - "gimli 0.27.1", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.4", -] - -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aes-gcm" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", -] - -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.8", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "getrandom 0.2.8", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "arbitrary" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" - -[[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "ark-algebra-test-templates" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390ae58ca5e3ed40d8c1eb9c939931258562c1c331a0ea10d76091f450c50b43" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "hex", - "num-bigint", - "num-integer", - "num-traits", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.6", -] - -[[package]] -name = "ark-bls12-377" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-bw6-761" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" -dependencies = [ - "ark-bls12-377", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d7f0c52aff14f216200a9eee06a9990fee2e51fc9599e226df448ad3232886" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ed-on-bls12-377" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" -dependencies = [ - "ark-bls12-377", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ed-on-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ee31d8869a353433524dbd5a8f51f95cdafe7c66d458956ec13aa737198562" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.6", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc8f7ec7fdcc20f3f110783c043d80479b42f500003cf92b71ca90f34a2ba0e" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15aa320e38052d644e569740bad208e5f9f5fafedcc9e6b1557f723be1b7ff8d" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ark-poly" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2e8741caf33ab3063f1fc65617716ffb18cba8e872998aa2eef0d4e4b56d1" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-r1cs-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de1d1472e5cb020cb3405ce2567c91c8d43f21b674aef37b0202f5c3304761db" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-std", - "derivative", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "ark-serialize" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea39d00a8a4c832e6f6520e58ccec7bf909c4845863512e9b8656fd47df355" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.6", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "101333772a4020c883890811500d5ecc704c545a90140629af5c3b9f00d78953" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "array-bytes" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "asn1-rs" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" -dependencies = [ - "asn1-rs-derive 0.1.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "asn1-rs" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" -dependencies = [ - "asn1-rs-derive 0.4.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" - -[[package]] -name = "assert_cmd" -version = "2.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" -dependencies = [ - "bstr", - "doc-comment", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", -] - -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-io" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" -dependencies = [ - "async-lock", - "autocfg", - "concurrent-queue", - "futures-lite", - "libc", - "log", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "windows-sys 0.42.0", -] - -[[package]] -name = "async-lock" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" -dependencies = [ - "event-listener", - "futures-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "asynchronous-codec" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "atomic-waker" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" -dependencies = [ - "addr2line 0.19.0", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.30.3", - "rustc-demangle", -] - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "basic-toml" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" -dependencies = [ - "serde", -] - -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - -[[package]] -name = "beefy-gadget" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "fnv", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-network-test", - "sc-utils", - "serde", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-beefy", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "sp-tracing", - "strum", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "wasm-timer", -] - -[[package]] -name = "beefy-gadget-rpc" -version = "4.0.0-dev" -dependencies = [ - "beefy-gadget", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-rpc", - "serde", - "serde_json", - "sp-beefy", - "sp-core", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "beefy-merkle-tree" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "env_logger 0.9.3", - "log", - "sp-api", - "sp-beefy", - "sp-runtime", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bindgen" -version = "0.64.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "constant_time_eq", -] - -[[package]] -name = "blake2s_simd" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "cc", - "cfg-if", - "constant_time_eq", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding 0.1.5", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bstr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" -dependencies = [ - "memchr", - "once_cell", - "regex-automata", - "serde", -] - -[[package]] -name = "build-helper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" -dependencies = [ - "semver 0.6.0", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "camino" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.16", - "serde", - "serde_json", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -dependencies = [ - "jobserver", -] - -[[package]] -name = "ccm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" -dependencies = [ - "aead 0.3.2", - "cipher 0.2.5", - "subtle", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - -[[package]] -name = "cfg-expr" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "chacha20" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "zeroize", -] - -[[package]] -name = "chacha20poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" -dependencies = [ - "aead 0.4.3", - "chacha20", - "cipher 0.3.0", - "poly1305", - "zeroize", -] - -[[package]] -name = "chain-spec-builder" -version = "2.0.0" -dependencies = [ - "ansi_term", - "clap 4.1.4", - "node-cli", - "rand 0.8.5", - "sc-chain-spec", - "sc-keystore", - "sp-core", - "sp-keystore", -] - -[[package]] -name = "chrono" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "time 0.1.45", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "ciborium" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" - -[[package]] -name = "ciborium-ll" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cid" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" -dependencies = [ - "core2", - "multibase", - "multihash", - "serde", - "unsigned-varint", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "ckb-merkle-mountain-range" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "clang-sys" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" -dependencies = [ - "glob", - "libc", - "libloading", -] - -[[package]] -name = "clap" -version = "3.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" -dependencies = [ - "bitflags", - "clap_lex 0.2.4", - "indexmap", - "textwrap", -] - -[[package]] -name = "clap" -version = "4.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" -dependencies = [ - "bitflags", - "clap_derive", - "clap_lex 0.3.1", - "is-terminal", - "once_cell", - "strsim", - "termcolor", -] - -[[package]] -name = "clap_complete" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6540eedc41f8a5a76cf3d8d458057dcdf817be4158a55b5f861f7a5483de75" -dependencies = [ - "clap 4.1.4", -] - -[[package]] -name = "clap_derive" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "clap_lex" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "comfy-table" -version = "6.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" -dependencies = [ - "strum", - "strum_macros", - "unicode-width", -] - -[[package]] -name = "concurrent-queue" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" - -[[package]] -name = "constant_time_eq" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - -[[package]] -name = "cpp_demangle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - -[[package]] -name = "cranelift-bforest" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52056f6d0584484b57fa6c1a65c1fcb15f3780d8b6a758426d9e3084169b2ddd" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fed94c8770dc25d01154c3ffa64ed0b3ba9d583736f305fed7beebe5d9cf74" -dependencies = [ - "arrayvec 0.7.2", - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-entity", - "cranelift-isle", - "gimli 0.26.2", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c451b81faf237d11c7e4f3165eeb6bac61112762c5cfe7b4c0fb7241474358f" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c940133198426d26128f08be2b40b0bd117b84771fd36798969c4d712d81fc" - -[[package]] -name = "cranelift-entity" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352" -dependencies = [ - "serde", -] - -[[package]] -name = "cranelift-frontend" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34897538b36b216cc8dd324e73263596d51b8cf610da6498322838b2546baf8a" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2629a569fae540f16a76b70afcc87ad7decb38dc28fa6c648ac73b51e78470" - -[[package]] -name = "cranelift-native" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20937dab4e14d3e225c5adfc9c7106bafd4ac669bdb43027b911ff794c6fb318" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.88.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fc2288957a94fd342a015811479de1837850924166d1f1856d8406e6f3609b" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" -dependencies = [ - "anes", - "atty", - "cast", - "ciborium", - "clap 3.2.23", - "criterion-plot", - "futures", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset 0.7.1", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.6", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher 0.2.5", -] - -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - -[[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" -dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.0.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" -dependencies = [ - "cfg-if", - "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", - "subtle", - "zeroize", -] - -[[package]] -name = "cxx" -version = "1.0.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90d59d9acd2a682b4e40605a242f6670eaa58c5957471cbf85e8aa6a0b97a5e8" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfa40bda659dd5c864e65f4c9a2b0aff19bea56b017b9b77c73d3766a453a38" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457ce6757c5c70dc6ecdbda6925b958aae7f959bda7d8fb9bde889e34a09dc03" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebf883b7aacd7b2aeb2a7b338648ee19f57c140d4ee8e52c68979c6b2f7f2263" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "darling" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "data-encoding" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" - -[[package]] -name = "data-encoding-macro" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" -dependencies = [ - "data-encoding", - "syn", -] - -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" -dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der-parser" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" -dependencies = [ - "asn1-rs 0.5.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive-syn-parse" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" -dependencies = [ - "derive_builder_core", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer 0.10.3", - "crypto-common", - "subtle", -] - -[[package]] -name = "directories" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dissimilar" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e" - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "dtoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" - -[[package]] -name = "dyn-clonable" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" -dependencies = [ - "dyn-clonable-impl", - "dyn-clone", -] - -[[package]] -name = "dyn-clonable-impl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dyn-clone" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" - -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", -] - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.6", - "ff", - "generic-array 0.14.6", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "enum-as-inner" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "enumflags2" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "environmental" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "exit-future" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" -dependencies = [ - "futures", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fdlimit" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" -dependencies = [ - "libc", -] - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" - -[[package]] -name = "file-per-thread-logger" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" -dependencies = [ - "env_logger 0.10.0", - "log", -] - -[[package]] -name = "filetime" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.45.0", -] - -[[package]] -name = "finality-grandpa" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" -dependencies = [ - "either", - "futures", - "futures-timer", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "scale-info", -] - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fork-tree" -version = "3.0.0" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - -[[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-support", - "frame-support-procedural", - "frame-system", - "linregress", - "log", - "parity-scale-codec", - "paste", - "rusty-fork", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", - "static_assertions", -] - -[[package]] -name = "frame-benchmarking-cli" -version = "4.0.0-dev" -dependencies = [ - "Inflector", - "array-bytes", - "chrono", - "clap 4.1.4", - "comfy-table", - "frame-benchmarking", - "frame-support", - "frame-system", - "gethostname", - "handlebars", - "itertools", - "lazy_static", - "linked-hash-map", - "log", - "parity-scale-codec", - "rand 0.8.5", - "rand_pcg", - "sc-block-builder", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-executor", - "sc-service", - "sc-sysinfo", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-externalities", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", - "thiserror", - "thousands", -] - -[[package]] -name = "frame-benchmarking-pallet-pov" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "parity-scale-codec", - "proc-macro-crate", - "proc-macro2", - "quote", - "scale-info", - "sp-arithmetic", - "syn", - "trybuild", -] - -[[package]] -name = "frame-election-provider-support" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-solution-type", - "frame-support", - "frame-system", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-election-solution-type-fuzzer" -version = "2.0.0-alpha.5" -dependencies = [ - "clap 4.1.4", - "frame-election-provider-solution-type", - "frame-election-provider-support", - "frame-support", - "honggfuzz", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "frame-executive" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-support", - "frame-system", - "frame-try-runtime", - "pallet-balances", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "sp-version", -] - -[[package]] -name = "frame-metadata" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "frame-remote-externalities" -version = "0.10.0-dev" -dependencies = [ - "frame-support", - "futures", - "log", - "pallet-elections-phragmen", - "parity-scale-codec", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "substrate-rpc-client", - "tokio", - "tracing-subscriber 0.3.16", -] - -[[package]] -name = "frame-support" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "bitflags", - "frame-metadata", - "frame-support-procedural", - "frame-system", - "impl-trait-for-tuples", - "k256", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "pretty_assertions", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "tt-call", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-test" -version = "3.0.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test-pallet", - "frame-system", - "parity-scale-codec", - "pretty_assertions", - "rustversion", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-version", - "trybuild", -] - -[[package]] -name = "frame-support-test-compile-pass" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-version", -] - -[[package]] -name = "frame-support-test-pallet" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "frame-system" -version = "4.0.0-dev" -dependencies = [ - "criterion", - "frame-support", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", - "sp-weights", - "substrate-test-runtime-client", -] - -[[package]] -name = "frame-system-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "frame-system-rpc-runtime-api" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", -] - -[[package]] -name = "frame-try-runtime" -version = "0.10.0-dev" -dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" - -[[package]] -name = "futures-executor" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - -[[package]] -name = "futures-io" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-rustls" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" -dependencies = [ - "futures-io", - "rustls 0.20.8", - "webpki 0.22.0", -] - -[[package]] -name = "futures-sink" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" - -[[package]] -name = "futures-task" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" - -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" - -[[package]] -name = "futures-util" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.9", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generate-bags" -version = "4.0.0-dev" -dependencies = [ - "chrono", - "frame-election-provider-support", - "frame-support", - "frame-system", - "git2", - "num-format", - "pallet-staking", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.4.5", -] - -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap", - "stable_deref_trait", -] - -[[package]] -name = "gimli" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" - -[[package]] -name = "git2" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "url", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - -[[package]] -name = "handlebars" -version = "4.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "hash-db" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.6", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.3", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" -dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.6", - "hmac 0.8.1", -] - -[[package]] -name = "honggfuzz" -version = "0.5.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" -dependencies = [ - "arbitrary", - "lazy_static", - "memmap2", - "rustc_version 0.4.0", -] - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite 0.2.9", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http", - "hyper", - "log", - "rustls 0.20.8", - "rustls-native-certs", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "if-addrs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "if-watch" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" -dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "rtnetlink", - "system-configuration", - "tokio", - "windows", -] - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap-nostd" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - -[[package]] -name = "interceptor" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" -dependencies = [ - "async-trait", - "bytes", - "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - -[[package]] -name = "io-lifetimes" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" -dependencies = [ - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" -dependencies = [ - "socket2", - "widestring", - "winapi", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" - -[[package]] -name = "is-terminal" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", - "rustix 0.36.8", - "windows-sys 0.45.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "jobserver" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "jsonrpsee" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" -dependencies = [ - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "tracing", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" -dependencies = [ - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" -dependencies = [ - "anyhow", - "arrayvec 0.7.2", - "async-lock", - "async-trait", - "beef", - "futures-channel", - "futures-timer", - "futures-util", - "globset", - "hyper", - "jsonrpsee-types", - "parking_lot 0.12.1", - "rand 0.8.5", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" -dependencies = [ - "heck", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "jsonrpsee-server" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", - "serde", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" -dependencies = [ - "http", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", -] - -[[package]] -name = "k256" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "keccak" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "keccak-hasher" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711adba9940a039f4374fc5724c0a5eaca84a2d558cce62256bfe26f0dbef05e" -dependencies = [ - "hash-db", - "hash256-std-hasher", - "tiny-keccak", -] - -[[package]] -name = "kitchensink-runtime" -version = "3.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-benchmarking-pallet-pov", - "frame-election-provider-support", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "log", - "node-primitives", - "pallet-alliance", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-bags-list", - "pallet-balances", - "pallet-bounties", - "pallet-child-bounties", - "pallet-collective", - "pallet-contracts", - "pallet-contracts-primitives", - "pallet-conviction-voting", - "pallet-democracy", - "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking", - "pallet-elections-phragmen", - "pallet-fast-unstake", - "pallet-grandpa", - "pallet-identity", - "pallet-im-online", - "pallet-indices", - "pallet-lottery", - "pallet-membership", - "pallet-message-queue", - "pallet-mmr", - "pallet-multisig", - "pallet-nfts", - "pallet-nis", - "pallet-nomination-pools", - "pallet-nomination-pools-benchmarking", - "pallet-nomination-pools-runtime-api", - "pallet-offences", - "pallet-offences-benchmarking", - "pallet-preimage", - "pallet-proxy", - "pallet-randomness-collective-flip", - "pallet-ranked-collective", - "pallet-recovery", - "pallet-referenda", - "pallet-remark", - "pallet-root-testing", - "pallet-scheduler", - "pallet-session", - "pallet-session-benchmarking", - "pallet-society", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-state-trie-migration", - "pallet-sudo", - "pallet-timestamp", - "pallet-tips", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-transaction-storage", - "pallet-treasury", - "pallet-uniques", - "pallet-utility", - "pallet-vesting", - "pallet-whitelist", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-authority-discovery", - "sp-block-builder", - "sp-consensus-babe", - "sp-core", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-transaction-pool", - "sp-version", - "static_assertions", - "substrate-wasm-builder", -] - -[[package]] -name = "kvdb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" -dependencies = [ - "smallvec", -] - -[[package]] -name = "kvdb-memorydb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" -dependencies = [ - "kvdb", - "parking_lot 0.12.1", -] - -[[package]] -name = "kvdb-rocksdb" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" -dependencies = [ - "kvdb", - "num_cpus", - "parking_lot 0.12.1", - "regex", - "rocksdb", - "smallvec", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "libgit2-sys" -version = "0.14.2+1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libm" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "libp2p" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" -dependencies = [ - "bytes", - "futures", - "futures-timer", - "getrandom 0.2.8", - "instant", - "libp2p-core", - "libp2p-dns", - "libp2p-identify", - "libp2p-kad", - "libp2p-mdns", - "libp2p-metrics", - "libp2p-mplex", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-request-response", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-wasm-ext", - "libp2p-webrtc", - "libp2p-websocket", - "libp2p-yamux", - "multiaddr", - "parking_lot 0.12.1", - "pin-project", - "smallvec", -] - -[[package]] -name = "libp2p-core" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" -dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr", - "multihash", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1", - "sha2 0.10.6", - "smallvec", - "thiserror", - "unsigned-varint", - "void", - "zeroize", -] - -[[package]] -name = "libp2p-dns" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" -dependencies = [ - "futures", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "smallvec", - "trust-dns-resolver", -] - -[[package]] -name = "libp2p-identify" -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" -dependencies = [ - "asynchronous-codec", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-swarm", - "log", - "lru", - "prost", - "prost-build", - "prost-codec", - "smallvec", - "thiserror", - "void", -] - -[[package]] -name = "libp2p-kad" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" -dependencies = [ - "arrayvec 0.7.2", - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "smallvec", - "thiserror", - "uint", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-mdns" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" -dependencies = [ - "data-encoding", - "futures", - "if-watch", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "smallvec", - "socket2", - "tokio", - "trust-dns-proto", - "void", -] - -[[package]] -name = "libp2p-metrics" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" -dependencies = [ - "libp2p-core", - "libp2p-identify", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "prometheus-client", -] - -[[package]] -name = "libp2p-mplex" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "libp2p-noise" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - -[[package]] -name = "libp2p-ping" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" -dependencies = [ - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "void", -] - -[[package]] -name = "libp2p-quic" -version = "0.7.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" -dependencies = [ - "bytes", - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-tls", - "log", - "parking_lot 0.12.1", - "quinn-proto", - "rand 0.8.5", - "rustls 0.20.8", - "thiserror", - "tokio", -] - -[[package]] -name = "libp2p-request-response" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" -dependencies = [ - "async-trait", - "bytes", - "futures", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "libp2p-swarm" -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm-derive", - "log", - "pin-project", - "rand 0.8.5", - "smallvec", - "thiserror", - "tokio", - "void", -] - -[[package]] -name = "libp2p-swarm-derive" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" -dependencies = [ - "heck", - "quote", - "syn", -] - -[[package]] -name = "libp2p-tcp" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" -dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "log", - "socket2", - "tokio", -] - -[[package]] -name = "libp2p-tls" -version = "0.1.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" -dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "rcgen 0.10.0", - "ring", - "rustls 0.20.8", - "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", - "yasna", -] - -[[package]] -name = "libp2p-wasm-ext" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "parity-send-wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" -dependencies = [ - "async-trait", - "asynchronous-codec", - "bytes", - "futures", - "futures-timer", - "hex", - "if-watch", - "libp2p-core", - "libp2p-noise", - "log", - "multihash", - "prost", - "prost-build", - "prost-codec", - "rand 0.8.5", - "rcgen 0.9.3", - "serde", - "stun", - "thiserror", - "tinytemplate", - "tokio", - "tokio-util", - "webrtc", -] - -[[package]] -name = "libp2p-websocket" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" -dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "quicksink", - "rw-stream-sink", - "soketto", - "url", - "webpki-roots", -] - -[[package]] -name = "libp2p-yamux" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" -dependencies = [ - "futures", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "thiserror", - "yamux", -] - -[[package]] -name = "librocksdb-sys" -version = "0.8.3+7.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" -dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "tikv-jemalloc-sys", -] - -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libz-sys" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linked_hash_set" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "linregress" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8" -dependencies = [ - "nalgebra", - "statrs", -] - -[[package]] -name = "linux-raw-sys" -version = "0.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" - -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "lite-json" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0e787ffe1153141a0f6f6d759fdf1cc34b1226e088444523812fd412a5cca2" -dependencies = [ - "lite-parser", -] - -[[package]] -name = "lite-parser" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d5f9dc37c52d889a21fd701983d02bb6a84f852c5140a6c80ef4557f7dc29e" -dependencies = [ - "paste", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "lru" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" -dependencies = [ - "hashbrown 0.12.3", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "lz4" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" -dependencies = [ - "libc", - "lz4-sys", -] - -[[package]] -name = "lz4-sys" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matrixmultiply" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" -dependencies = [ - "rawpointer", -] - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memfd" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" -dependencies = [ - "rustix 0.36.8", -] - -[[package]] -name = "memmap2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memory-db" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" -dependencies = [ - "hash-db", - "hashbrown 0.12.3", -] - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "merlin" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", -] - -[[package]] -name = "mmr-gadget" -version = "4.0.0-dev" -dependencies = [ - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-offchain", - "sp-api", - "sp-beefy", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "mmr-rpc" -version = "4.0.0-dev" -dependencies = [ - "anyhow", - "jsonrpsee", - "parity-scale-codec", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", -] - -[[package]] -name = "mockall" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.6", - "multihash-derive", - "sha2 0.10.6", - "sha3", - "unsigned-varint", -] - -[[package]] -name = "multihash-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" -dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multistream-select" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" -dependencies = [ - "bytes", - "futures", - "log", - "pin-project", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "nalgebra" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "rand 0.8.5", - "rand_distr", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "names" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "netlink-packet-core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" -dependencies = [ - "anyhow", - "bitflags", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", -] - -[[package]] -name = "netlink-proto" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror", - "tokio", -] - -[[package]] -name = "netlink-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", - "static_assertions", -] - -[[package]] -name = "node-bench" -version = "0.9.0-dev" -dependencies = [ - "array-bytes", - "clap 4.1.4", - "derive_more", - "fs_extra", - "futures", - "hash-db", - "kitchensink-runtime", - "kvdb", - "kvdb-rocksdb", - "lazy_static", - "log", - "node-primitives", - "node-testing", - "parity-db", - "rand 0.8.5", - "sc-basic-authorship", - "sc-client-api", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-timestamp", - "sp-tracing", - "sp-trie", - "tempfile", -] - -[[package]] -name = "node-cli" -version = "3.0.0-dev" -dependencies = [ - "array-bytes", - "assert_cmd", - "clap 4.1.4", - "clap_complete", - "criterion", - "frame-benchmarking-cli", - "frame-system", - "frame-system-rpc-runtime-api", - "futures", - "jsonrpsee", - "kitchensink-runtime", - "log", - "nix 0.26.2", - "node-executor", - "node-inspect", - "node-primitives", - "node-rpc", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-balances", - "pallet-im-online", - "pallet-timestamp", - "pallet-transaction-payment", - "parity-scale-codec", - "platforms 2.0.0", - "rand 0.8.5", - "regex", - "sc-authority-discovery", - "sc-basic-authorship", - "sc-block-builder", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-executor", - "sc-finality-grandpa", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-rpc", - "sc-service", - "sc-service-test", - "sc-storage-monitor", - "sc-sync-state-rpc", - "sc-sysinfo", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "soketto", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "substrate-build-script-utils", - "substrate-frame-cli", - "substrate-rpc-client", - "tempfile", - "tokio", - "tokio-util", - "try-runtime-cli", - "wait-timeout", -] - -[[package]] -name = "node-executor" -version = "3.0.0-dev" -dependencies = [ - "criterion", - "frame-benchmarking", - "frame-support", - "frame-system", - "futures", - "kitchensink-runtime", - "node-primitives", - "node-testing", - "pallet-balances", - "pallet-contracts", - "pallet-im-online", - "pallet-root-testing", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-treasury", - "parity-scale-codec", - "sc-executor", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-externalities", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", - "wat", -] - -[[package]] -name = "node-inspect" -version = "0.9.0-dev" -dependencies = [ - "clap 4.1.4", - "parity-scale-codec", - "sc-cli", - "sc-client-api", - "sc-executor", - "sc-service", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "node-primitives" -version = "2.0.0" -dependencies = [ - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "node-rpc" -version = "3.0.0-dev" -dependencies = [ - "jsonrpsee", - "mmr-rpc", - "node-primitives", - "pallet-transaction-payment-rpc", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-babe-rpc", - "sc-consensus-epochs", - "sc-finality-grandpa", - "sc-finality-grandpa-rpc", - "sc-rpc", - "sc-rpc-api", - "sc-rpc-spec-v2", - "sc-sync-state-rpc", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-keystore", - "sp-runtime", - "substrate-frame-rpc-system", - "substrate-state-trie-migration-rpc", -] - -[[package]] -name = "node-runtime-generate-bags" -version = "3.0.0" -dependencies = [ - "clap 4.1.4", - "generate-bags", - "kitchensink-runtime", -] - -[[package]] -name = "node-template" -version = "4.0.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-system", - "futures", - "jsonrpsee", - "node-template-runtime", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc", - "sc-basic-authorship", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-executor", - "sc-finality-grandpa", - "sc-keystore", - "sc-rpc", - "sc-rpc-api", - "sc-service", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-core", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-timestamp", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "try-runtime-cli", -] - -[[package]] -name = "node-template-runtime" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "pallet-aura", - "pallet-balances", - "pallet-grandpa", - "pallet-randomness-collective-flip", - "pallet-sudo", - "pallet-template", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-version", - "substrate-wasm-builder", -] - -[[package]] -name = "node-testing" -version = "3.0.0-dev" -dependencies = [ - "frame-system", - "fs_extra", - "futures", - "kitchensink-runtime", - "log", - "node-executor", - "node-primitives", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-transaction-payment", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-service", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-timestamp", - "substrate-test-client", - "tempfile", -] - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec 0.7.2", - "itoa", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", - "libm 0.2.6", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", - "memchr", -] - -[[package]] -name = "object" -version = "0.30.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] - -[[package]] -name = "oid-registry" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" -dependencies = [ - "asn1-rs 0.3.1", -] - -[[package]] -name = "oid-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" -dependencies = [ - "asn1-rs 0.5.1", -] - -[[package]] -name = "once_cell" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "os_str_bytes" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" - -[[package]] -name = "output_vt100" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" -dependencies = [ - "winapi", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "p384" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "packed_simd_2" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" -dependencies = [ - "cfg-if", - "libm 0.1.4", -] - -[[package]] -name = "pallet-alliance" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-collective", - "pallet-identity", - "parity-scale-codec", - "scale-info", - "sha2 0.10.6", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-asset-tx-payment" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-assets", - "pallet-authorship", - "pallet-balances", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-storage", -] - -[[package]] -name = "pallet-assets" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-atomic-swap" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-aura" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-aura", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authority-discovery" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-authority-discovery", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authorship" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-babe" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-balances", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-consensus-vrf", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-bags-list" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-bags-list-fuzzer" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "honggfuzz", - "pallet-bags-list", - "rand 0.8.5", -] - -[[package]] -name = "pallet-bags-list-remote-tests" -version = "4.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-remote-externalities", - "frame-support", - "frame-system", - "log", - "pallet-bags-list", - "pallet-staking", - "sp-core", - "sp-runtime", - "sp-std", - "sp-storage", - "sp-tracing", -] - -[[package]] -name = "pallet-balances" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-beefy" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-beefy", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-beefy-mmr" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "beefy-merkle-tree", - "frame-support", - "frame-system", - "log", - "pallet-beefy", - "pallet-mmr", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-beefy", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-bounties" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-child-bounties" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-bounties", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-collective" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-contracts" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "bitflags", - "env_logger 0.9.3", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-balances", - "pallet-contracts-primitives", - "pallet-contracts-proc-macro", - "pallet-randomness-collective-flip", - "pallet-timestamp", - "pallet-utility", - "parity-scale-codec", - "pretty_assertions", - "rand 0.8.5", - "rand_pcg", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std", - "wasm-instrument 0.4.0", - "wasmi 0.20.0", - "wasmparser-nostd", - "wat", -] - -[[package]] -name = "pallet-contracts-primitives" -version = "7.0.0" -dependencies = [ - "bitflags", - "parity-scale-codec", - "sp-runtime", - "sp-std", - "sp-weights", -] - -[[package]] -name = "pallet-contracts-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pallet-conviction-voting" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-democracy" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-preimage", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-election-provider-support-benchmarking", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "sp-tracing", - "strum", -] - -[[package]] -name = "pallet-election-provider-support-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-system", - "parity-scale-codec", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "pallet-elections-phragmen" -version = "5.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-example-basic" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-example-offchain-worker" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "lite-json", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-fast-unstake" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -dependencies = [ - "finality-grandpa", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-balances", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-finality-grandpa", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-identity" -version = "4.0.0-dev" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-im-online" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-indices" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-lottery" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-membership" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-message-queue" -version = "7.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "rand 0.8.5", - "rand_distr", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "sp-weights", -] - -[[package]] -name = "pallet-mmr" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "env_logger 0.9.3", - "frame-benchmarking", - "frame-support", - "frame-system", - "itertools", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-multisig" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nfts" -version = "4.0.0-dev" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nicks" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nis" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-node-authorization" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools" -version = "1.0.0" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-nomination-pools-benchmarking" -version = "1.0.0" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-bags-list", - "pallet-balances", - "pallet-nomination-pools", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools-fuzzer" -version = "2.0.0" -dependencies = [ - "frame-support", - "frame-system", - "honggfuzz", - "log", - "pallet-nomination-pools", - "rand 0.8.5", - "sp-io", - "sp-runtime", - "sp-tracing", -] - -[[package]] -name = "pallet-nomination-pools-runtime-api" -version = "1.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools-test-staking" -version = "1.0.0" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-bags-list", - "pallet-balances", - "pallet-nomination-pools", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-offences" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-offences-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-babe", - "pallet-balances", - "pallet-grandpa", - "pallet-im-online", - "pallet-offences", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-preimage" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-proxy" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-utility", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-randomness-collective-flip" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-ranked-collective" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-recovery" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-referenda" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-preimage", - "pallet-scheduler", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-remark" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-root-offences" -version = "1.0.0-dev" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-root-testing" -version = "1.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-scheduler" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-preimage", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", - "substrate-test-utils", -] - -[[package]] -name = "pallet-scored-pool" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-session" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-session-benchmarking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-std", -] - -[[package]] -name = "pallet-society" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-staking" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-bags-list", - "pallet-balances", - "pallet-session", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "serde", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", - "substrate-test-utils", -] - -[[package]] -name = "pallet-staking-reward-curve" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "sp-runtime", - "syn", -] - -[[package]] -name = "pallet-staking-reward-fn" -version = "4.0.0-dev" -dependencies = [ - "log", - "sp-arithmetic", -] - -[[package]] -name = "pallet-state-trie-migration" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-remote-externalities", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-state-trie-migration-rpc", - "thousands", - "tokio", - "zstd", -] - -[[package]] -name = "pallet-sudo" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-template" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", -] - -[[package]] -name = "pallet-timestamp" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "pallet-tips" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-storage", -] - -[[package]] -name = "pallet-transaction-payment" -version = "4.0.0-dev" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-transaction-payment-rpc" -version = "4.0.0-dev" -dependencies = [ - "jsonrpsee", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-payment-rpc-runtime-api" -version = "4.0.0-dev" -dependencies = [ - "pallet-transaction-payment", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-storage" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-transaction-storage-proof", -] - -[[package]] -name = "pallet-treasury" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-uniques" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-utility" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-collective", - "pallet-root-testing", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-vesting" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-whitelist" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-preimage", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "parity-db" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" -dependencies = [ - "blake2", - "crc32fast", - "fs2", - "hex", - "libc", - "log", - "lz4", - "memmap2", - "parking_lot 0.12.1", - "rand 0.8.5", - "snap", -] - -[[package]] -name = "parity-scale-codec" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" -dependencies = [ - "arrayvec 0.7.2", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - -[[package]] -name = "parity-wasm" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.7", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pbkdf2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.6", -] - -[[package]] -name = "petgraph" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "platforms" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" - -[[package]] -name = "platforms" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" - -[[package]] -name = "plotters" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" - -[[package]] -name = "plotters-svg" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "polling" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" -dependencies = [ - "autocfg", - "cfg-if", - "libc", - "log", - "wepoll-ffi", - "windows-sys 0.42.0", -] - -[[package]] -name = "poly1305" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" -dependencies = [ - "cpuid-bool", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" - -[[package]] -name = "predicates-tree" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "pretty_assertions" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" -dependencies = [ - "ctor", - "diff", - "output_vt100", - "yansi", -] - -[[package]] -name = "prettyplease" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "primitive-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", - "scale-info", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot 0.12.1", - "thiserror", -] - -[[package]] -name = "prometheus-client" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" -dependencies = [ - "dtoa", - "itoa", - "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", -] - -[[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", - "which", -] - -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - -[[package]] -name = "prost-derive" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quickcheck" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "quicksink" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project-lite 0.1.12", -] - -[[package]] -name = "quinn-proto" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" -dependencies = [ - "bytes", - "rand 0.8.5", - "ring", - "rustc-hash", - "rustls 0.20.8", - "slab", - "thiserror", - "tinyvec", - "tracing", - "webpki 0.22.0", -] - -[[package]] -name = "quote" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem", - "ring", - "time 0.3.17", - "x509-parser 0.13.2", - "yasna", -] - -[[package]] -name = "rcgen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" -dependencies = [ - "pem", - "ring", - "time 0.3.17", - "yasna", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.8", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "ref-cast" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "regalloc2" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "regex" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] - -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint", - "hmac 0.12.1", - "zeroize", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rocksdb" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" -dependencies = [ - "libc", - "librocksdb-sys", -] - -[[package]] -name = "rpassword" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" -dependencies = [ - "libc", - "rtoolbox", - "winapi", -] - -[[package]] -name = "rtcp" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" -dependencies = [ - "bytes", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "rtnetlink" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" -dependencies = [ - "futures", - "log", - "netlink-packet-route", - "netlink-proto", - "nix 0.24.3", - "thiserror", - "tokio", -] - -[[package]] -name = "rtoolbox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "rtp" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" -dependencies = [ - "async-trait", - "bytes", - "rand 0.8.5", - "serde", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.16", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "0.35.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 0.7.5", - "libc", - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - -[[package]] -name = "rustix" -version = "0.36.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 1.0.5", - "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64 0.13.1", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "rusty-fork" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" -dependencies = [ - "fnv", - "quick-error", - "tempfile", -] - -[[package]] -name = "rw-stream-sink" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" -dependencies = [ - "futures", - "pin-project", - "static_assertions", -] - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "safe-mix" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" -dependencies = [ - "rustc_version 0.2.3", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "sc-allocator" -version = "4.1.0-dev" -dependencies = [ - "log", - "sp-core", - "sp-wasm-interface", - "thiserror", -] - -[[package]] -name = "sc-authority-discovery" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "quickcheck", - "rand 0.8.5", - "sc-client-api", - "sc-network-common", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", -] - -[[package]] -name = "sc-basic-authorship" -version = "0.10.0-dev" -dependencies = [ - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-proposer-metrics", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-block-builder" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "sc-client-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-chain-spec" -version = "4.0.0-dev" -dependencies = [ - "memmap2", - "sc-chain-spec-derive", - "sc-network-common", - "sc-telemetry", - "serde", - "serde_json", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sc-chain-spec-derive" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sc-cli" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "chrono", - "clap 4.1.4", - "fdlimit", - "futures", - "futures-timer", - "libp2p", - "log", - "names", - "parity-scale-codec", - "rand 0.8.5", - "regex", - "rpassword", - "sc-client-api", - "sc-client-db", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-service", - "sc-telemetry", - "sc-tracing", - "sc-utils", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-panic-handler", - "sp-runtime", - "sp-tracing", - "sp-version", - "tempfile", - "thiserror", - "tiny-bip39", - "tokio", -] - -[[package]] -name = "sc-client-api" -version = "4.0.0-dev" -dependencies = [ - "fnv", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-executor", - "sc-transaction-pool-api", - "sc-utils", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-database", - "sp-externalities", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-test-primitives", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "thiserror", -] - -[[package]] -name = "sc-client-db" -version = "0.10.0-dev" -dependencies = [ - "criterion", - "hash-db", - "kitchensink-runtime", - "kvdb", - "kvdb-memorydb", - "kvdb-rocksdb", - "linked-hash-map", - "log", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.1", - "quickcheck", - "rand 0.8.5", - "sc-client-api", - "sc-state-db", - "schnellru", - "sp-arithmetic", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", - "substrate-test-runtime-client", - "tempfile", -] - -[[package]] -name = "sc-consensus" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "libp2p", - "log", - "mockall", - "parking_lot 0.12.1", - "sc-client-api", - "sc-utils", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-test-primitives", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-aura" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-consensus-slots", - "sc-keystore", - "sc-network", - "sc-network-test", - "sc-telemetry", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-babe" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "fork-tree", - "futures", - "log", - "merlin", - "num-bigint", - "num-rational", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand_chacha 0.2.2", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-keystore", - "sc-network", - "sc-network-test", - "sc-telemetry", - "schnorrkel", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-babe-rpc" -version = "0.10.0-dev" -dependencies = [ - "futures", - "jsonrpsee", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-keystore", - "sc-rpc-api", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-epochs" -version = "0.10.0-dev" -dependencies = [ - "fork-tree", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "sc-consensus-manual-seal" -version = "0.10.0-dev" -dependencies = [ - "assert_matches", - "async-trait", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-basic-authorship", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "substrate-test-runtime-transaction-pool", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-consensus-pow" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-client-api", - "sc-consensus", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-pow", - "sp-core", - "sp-inherents", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-slots" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sc-telemetry", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "substrate-test-runtime-client", -] - -[[package]] -name = "sc-executor" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "criterion", - "env_logger 0.9.3", - "lru", - "num_cpus", - "parity-scale-codec", - "parking_lot 0.12.1", - "paste", - "regex", - "sc-executor-common", - "sc-executor-wasmi", - "sc-executor-wasmtime", - "sc-runtime-test", - "sc-tracing", - "sp-api", - "sp-core", - "sp-externalities", - "sp-io", - "sp-maybe-compressed-blob", - "sp-panic-handler", - "sp-runtime", - "sp-runtime-interface", - "sp-state-machine", - "sp-trie", - "sp-version", - "sp-wasm-interface", - "substrate-test-runtime", - "tempfile", - "tracing", - "tracing-subscriber 0.2.25", - "wasmi 0.13.2", - "wat", -] - -[[package]] -name = "sc-executor-common" -version = "0.10.0-dev" -dependencies = [ - "sc-allocator", - "sp-maybe-compressed-blob", - "sp-wasm-interface", - "thiserror", - "wasm-instrument 0.3.0", - "wasmi 0.13.2", -] - -[[package]] -name = "sc-executor-wasmi" -version = "0.10.0-dev" -dependencies = [ - "log", - "sc-allocator", - "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", - "wasmi 0.13.2", -] - -[[package]] -name = "sc-executor-wasmtime" -version = "0.10.0-dev" -dependencies = [ - "cfg-if", - "libc", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "rustix 0.35.13", - "sc-allocator", - "sc-executor-common", - "sc-runtime-test", - "sp-io", - "sp-runtime-interface", - "sp-wasm-interface", - "tempfile", - "wasmtime", - "wat", -] - -[[package]] -name = "sc-finality-grandpa" -version = "0.10.0-dev" -dependencies = [ - "ahash 0.8.3", - "array-bytes", - "assert_matches", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-network-test", - "sc-telemetry", - "sc-utils", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" -dependencies = [ - "finality-grandpa", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-finality-grandpa", - "sc-rpc", - "serde", - "sp-blockchain", - "sp-core", - "sp-finality-grandpa", - "sp-keyring", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-informant" -version = "0.10.0-dev" -dependencies = [ - "ansi_term", - "futures", - "futures-timer", - "log", - "sc-client-api", - "sc-network-common", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "sc-keystore" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "parking_lot 0.12.1", - "serde_json", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "tempfile", - "thiserror", -] - -[[package]] -name = "sc-network" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "async-trait", - "asynchronous-codec", - "backtrace", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "log", - "lru", - "parity-scale-codec", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-peerset", - "sc-utils", - "serde", - "serde_json", - "smallvec", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-test-primitives", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "tokio-util", - "unsigned-varint", - "zeroize", -] - -[[package]] -name = "sc-network-bitswap" -version = "0.10.0-dev" -dependencies = [ - "cid", - "futures", - "libp2p", - "log", - "prost", - "prost-build", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "substrate-test-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", - "unsigned-varint", -] - -[[package]] -name = "sc-network-common" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "futures", - "futures-timer", - "libp2p", - "linked_hash_set", - "parity-scale-codec", - "prost-build", - "sc-consensus", - "sc-peerset", - "serde", - "smallvec", - "sp-blockchain", - "sp-consensus", - "sp-finality-grandpa", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-network-gossip" -version = "0.10.0-dev" -dependencies = [ - "ahash 0.8.3", - "futures", - "futures-timer", - "libp2p", - "log", - "lru", - "quickcheck", - "sc-network-common", - "sc-peerset", - "sp-runtime", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tokio", - "tracing", -] - -[[package]] -name = "sc-network-light" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "prost", - "prost-build", - "sc-client-api", - "sc-network-common", - "sc-peerset", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-network-sync" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "async-trait", - "fork-tree", - "futures", - "libp2p", - "log", - "lru", - "mockall", - "parity-scale-codec", - "prost", - "prost-build", - "quickcheck", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network-common", - "sc-peerset", - "sc-utils", - "smallvec", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-runtime", - "sp-test-primitives", - "sp-tracing", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-network-test" -version = "0.8.0" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "libp2p", - "log", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-service", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "sc-network-transactions" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "futures", - "libp2p", - "log", - "parity-scale-codec", - "pin-project", - "sc-network-common", - "sc-peerset", - "sc-utils", - "sp-consensus", - "sp-runtime", - "substrate-prometheus-endpoint", -] - -[[package]] -name = "sc-offchain" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "bytes", - "fnv", - "futures", - "futures-timer", - "hyper", - "hyper-rustls", - "lazy_static", - "libp2p", - "num_cpus", - "once_cell", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-network-common", - "sc-peerset", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "sp-api", - "sp-consensus", - "sp-core", - "sp-offchain", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "threadpool", - "tokio", - "tracing", -] - -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -dependencies = [ - "futures", - "libp2p", - "log", - "rand 0.8.5", - "sc-utils", - "serde_json", - "wasm-timer", -] - -[[package]] -name = "sc-proposer-metrics" -version = "0.10.0-dev" -dependencies = [ - "log", - "substrate-prometheus-endpoint", -] - -[[package]] -name = "sc-rpc" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "env_logger 0.9.3", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-network", - "sc-network-common", - "sc-rpc-api", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-rpc", - "sp-runtime", - "sp-session", - "sp-version", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "sc-rpc-api" -version = "0.10.0-dev" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-transaction-pool-api", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-version", - "thiserror", -] - -[[package]] -name = "sc-rpc-server" -version = "4.0.0-dev" -dependencies = [ - "http", - "jsonrpsee", - "log", - "serde_json", - "substrate-prometheus-endpoint", - "tokio", - "tower", - "tower-http", -] - -[[package]] -name = "sc-rpc-spec-v2" -version = "0.10.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "futures", - "futures-util", - "hex", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-maybe-compressed-blob", - "sp-runtime", - "sp-version", - "substrate-test-runtime", - "substrate-test-runtime-client", - "thiserror", - "tokio", - "tokio-stream", -] - -[[package]] -name = "sc-runtime-test" -version = "2.0.0" -dependencies = [ - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sc-service" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "directories", - "exit-future", - "futures", - "futures-timer", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-informant", - "sc-keystore", - "sc-network", - "sc-network-bitswap", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-network-transactions", - "sc-offchain", - "sc-rpc", - "sc-rpc-server", - "sc-rpc-spec-v2", - "sc-storage-monitor", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-storage", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "sp-trie", - "sp-version", - "static_init", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "thiserror", - "tokio", - "tracing", - "tracing-futures", -] - -[[package]] -name = "sc-service-test" -version = "2.0.0" -dependencies = [ - "array-bytes", - "fdlimit", - "futures", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-service", - "sc-transaction-pool-api", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-tracing", - "sp-trie", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tempfile", - "tokio", -] - -[[package]] -name = "sc-state-db" -version = "0.10.0-dev" -dependencies = [ - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sp-core", -] - -[[package]] -name = "sc-storage-monitor" -version = "0.1.0" -dependencies = [ - "clap 4.1.4", - "futures", - "log", - "nix 0.26.2", - "sc-client-db", - "sc-utils", - "sp-core", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-sync-state-rpc" -version = "0.10.0-dev" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-finality-grandpa", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-sysinfo" -version = "6.0.0-dev" -dependencies = [ - "futures", - "libc", - "log", - "rand 0.8.5", - "rand_pcg", - "regex", - "sc-telemetry", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sc-telemetry" -version = "4.0.0-dev" -dependencies = [ - "chrono", - "futures", - "libp2p", - "log", - "parking_lot 0.12.1", - "pin-project", - "rand 0.8.5", - "sc-utils", - "serde", - "serde_json", - "thiserror", - "wasm-timer", -] - -[[package]] -name = "sc-tracing" -version = "4.0.0-dev" -dependencies = [ - "ansi_term", - "atty", - "chrono", - "criterion", - "lazy_static", - "libc", - "log", - "once_cell", - "parking_lot 0.12.1", - "regex", - "rustc-hash", - "sc-client-api", - "sc-rpc-server", - "sc-tracing-proc-macro", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-tracing", - "thiserror", - "tracing", - "tracing-log", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sc-tracing-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sc-transaction-pool" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "assert_matches", - "async-trait", - "criterion", - "futures", - "futures-timer", - "linked-hash-map", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-block-builder", - "sc-client-api", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-tracing", - "sp-transaction-pool", - "substrate-prometheus-endpoint", - "substrate-test-runtime", - "substrate-test-runtime-client", - "substrate-test-runtime-transaction-pool", - "thiserror", -] - -[[package]] -name = "sc-transaction-pool-api" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-utils" -version = "4.0.0-dev" -dependencies = [ - "backtrace", - "futures", - "futures-timer", - "lazy_static", - "log", - "parking_lot 0.12.1", - "prometheus", - "tokio-test", -] - -[[package]] -name = "scale-info" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" -dependencies = [ - "bitvec", - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", - "serde", -] - -[[package]] -name = "scale-info-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "schnellru" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" -dependencies = [ - "ahash 0.8.3", - "cfg-if", - "hashbrown 0.13.2", -] - -[[package]] -name = "schnorrkel" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "getrandom 0.1.16", - "merlin", - "rand 0.7.3", - "rand_core 0.5.1", - "sha2 0.8.2", - "subtle", - "zeroize", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" - -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sdp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" -dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.6", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" -dependencies = [ - "cc", -] - -[[package]] -name = "secrecy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" -dependencies = [ - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha3" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" -dependencies = [ - "digest 0.10.6", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.6", - "rand_core 0.6.4", -] - -[[package]] -name = "simba" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slice-group-by" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "snap" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" - -[[package]] -name = "snow" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" -dependencies = [ - "aes-gcm 0.9.4", - "blake2", - "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", - "rand_core 0.6.4", - "ring", - "rustc_version 0.4.0", - "sha2 0.10.6", - "subtle", -] - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "flate2", - "futures", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - -[[package]] -name = "sp-api" -version = "4.0.0-dev" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "sp-api-proc-macro", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-test-primitives", - "sp-trie", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-api-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "blake2", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-api-test" -version = "2.0.1" -dependencies = [ - "criterion", - "futures", - "log", - "parity-scale-codec", - "rustversion", - "sc-block-builder", - "sp-api", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-version", - "substrate-test-runtime-client", - "trybuild", -] - -[[package]] -name = "sp-application-crypto" -version = "7.0.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std", -] - -[[package]] -name = "sp-application-crypto-test" -version = "2.0.0" -dependencies = [ - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "substrate-test-runtime-client", -] - -[[package]] -name = "sp-arithmetic" -version = "6.0.0" -dependencies = [ - "criterion", - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "primitive-types", - "rand 0.8.5", - "scale-info", - "serde", - "sp-core", - "sp-std", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic-fuzzer" -version = "2.0.0" -dependencies = [ - "honggfuzz", - "num-bigint", - "primitive-types", - "sp-arithmetic", -] - -[[package]] -name = "sp-ark-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-bls12-377", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-bls12-381" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-bls12-381", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-bw6-761" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-bw6-761", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-ed-on-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-ed-on-bls12-377", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-ed-on-bls12-381" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-ed-on-bls12-381", - "ark-ff", - "ark-r1cs-std", - "ark-serialize", - "ark-std", - "sp-ark-models", - "sp-ark-utils", -] - -[[package]] -name = "sp-ark-models" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "getrandom 0.2.8", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "sp-ark-utils" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d05d2f213b6e715fec0b46cf3d63991c833aa62b" -dependencies = [ - "ark-serialize", - "ark-std", -] - -[[package]] -name = "sp-arkworks" -version = "0.4.0" -dependencies = [ - "ark-bls12-377", - "ark-bls12-381", - "ark-bw6-761", - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-std", -] - -[[package]] -name = "sp-arkworks-test" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "sp-ark-bls12-377", - "sp-ark-bls12-381", - "sp-ark-bw6-761", - "sp-ark-ed-on-bls12-377", - "sp-ark-ed-on-bls12-381", - "sp-ark-models", - "sp-io", -] - -[[package]] -name = "sp-authority-discovery" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-beefy" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-block-builder" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-inherents", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-blockchain" -version = "4.0.0-dev" -dependencies = [ - "futures", - "log", - "lru", - "parity-scale-codec", - "parking_lot 0.12.1", - "sp-api", - "sp-consensus", - "sp-database", - "sp-runtime", - "sp-state-machine", - "thiserror", -] - -[[package]] -name = "sp-consensus" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "futures", - "log", - "parity-scale-codec", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-test-primitives", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-consensus-aura" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-inherents", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-babe" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "merlin", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-pow" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-consensus-slots" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-std", - "sp-timestamp", -] - -[[package]] -name = "sp-consensus-vrf" -version = "0.10.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "schnorrkel", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-core" -version = "7.0.0" -dependencies = [ - "array-bytes", - "base58", - "bitflags", - "blake2", - "criterion", - "dyn-clonable", - "ed25519-zebra", - "futures", - "hash-db", - "hash256-std-hasher", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "primitive-types", - "rand 0.8.5", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "serde_json", - "sp-core-hashing", - "sp-core-hashing-proc-macro", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-serializer", - "sp-std", - "sp-storage", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "zeroize", -] - -[[package]] -name = "sp-core-hashing" -version = "5.0.0" -dependencies = [ - "blake2", - "byteorder", - "digest 0.10.6", - "sha2 0.10.6", - "sha3", - "sp-std", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing-proc-macro" -version = "5.0.0" -dependencies = [ - "proc-macro2", - "quote", - "sp-core-hashing", - "syn", -] - -[[package]] -name = "sp-database" -version = "4.0.0-dev" -dependencies = [ - "kvdb", - "parking_lot 0.12.1", -] - -[[package]] -name = "sp-debug-derive" -version = "5.0.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-externalities" -version = "0.13.0" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std", - "sp-storage", -] - -[[package]] -name = "sp-finality-grandpa" -version = "4.0.0-dev" -dependencies = [ - "finality-grandpa", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-inherents" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures", - "impl-trait-for-tuples", - "parity-scale-codec", - "sp-core", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-io" -version = "7.0.0" -dependencies = [ - "bytes", - "ed25519", - "ed25519-dalek", - "futures", - "libsecp256k1", - "log", - "parity-scale-codec", - "secp256k1", - "sp-arkworks", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keyring" -version = "7.0.0" -dependencies = [ - "lazy_static", - "sp-core", - "sp-runtime", - "strum", -] - -[[package]] -name = "sp-keystore" -version = "0.13.0" -dependencies = [ - "async-trait", - "futures", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.7.3", - "rand_chacha 0.2.2", - "schnorrkel", - "serde", - "sp-core", - "sp-externalities", - "thiserror", -] - -[[package]] -name = "sp-maybe-compressed-blob" -version = "4.1.0-dev" -dependencies = [ - "thiserror", - "zstd", -] - -[[package]] -name = "sp-mmr-primitives" -version = "4.0.0-dev" -dependencies = [ - "array-bytes", - "ckb-merkle-mountain-range", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-core", - "sp-debug-derive", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-npos-elections" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", - "substrate-test-utils", -] - -[[package]] -name = "sp-npos-elections-fuzzer" -version = "2.0.0-alpha.5" -dependencies = [ - "clap 4.1.4", - "honggfuzz", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "sp-npos-elections", - "sp-runtime", -] - -[[package]] -name = "sp-offchain" -version = "4.0.0-dev" -dependencies = [ - "sp-api", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sp-panic-handler" -version = "5.0.0" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-rpc" -version = "6.0.0" -dependencies = [ - "rustc-hash", - "serde", - "serde_json", - "sp-core", -] - -[[package]] -name = "sp-runtime" -version = "7.0.0" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand 0.8.5", - "scale-info", - "serde", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "substrate-test-runtime-client", - "zstd", -] - -[[package]] -name = "sp-runtime-interface" -version = "7.0.0" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "rustversion", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface-proc-macro", - "sp-runtime-interface-test-wasm", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", - "static_assertions", - "trybuild", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-runtime-interface-test" -version = "2.0.0" -dependencies = [ - "sc-executor", - "sc-executor-common", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-runtime-interface-test-wasm", - "sp-runtime-interface-test-wasm-deprecated", - "sp-state-machine", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-runtime-interface-test-wasm" -version = "2.0.0" -dependencies = [ - "bytes", - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sp-runtime-interface-test-wasm-deprecated" -version = "2.0.0" -dependencies = [ - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", - "substrate-wasm-builder", -] - -[[package]] -name = "sp-serializer" -version = "4.0.0-dev" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "sp-session" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "sp-staking" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-state-machine" -version = "0.13.0" -dependencies = [ - "array-bytes", - "assert_matches", - "hash-db", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "pretty_assertions", - "rand 0.8.5", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-runtime", - "sp-std", - "sp-trie", - "thiserror", - "tracing", - "trie-db", -] - -[[package]] -name = "sp-std" -version = "5.0.0" - -[[package]] -name = "sp-storage" -version = "7.0.0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive", - "sp-std", -] - -[[package]] -name = "sp-test-primitives" -version = "2.0.0" -dependencies = [ - "parity-scale-codec", - "serde", - "sp-application-crypto", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "sp-timestamp" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "futures-timer", - "log", - "parity-scale-codec", - "sp-inherents", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-tracing" -version = "6.0.0" -dependencies = [ - "parity-scale-codec", - "sp-std", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-transaction-pool" -version = "4.0.0-dev" -dependencies = [ - "sp-api", - "sp-runtime", -] - -[[package]] -name = "sp-transaction-storage-proof" -version = "4.0.0-dev" -dependencies = [ - "async-trait", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-std", - "sp-trie", -] - -[[package]] -name = "sp-trie" -version = "7.0.0" -dependencies = [ - "ahash 0.8.3", - "array-bytes", - "criterion", - "hash-db", - "hashbrown 0.12.3", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "schnellru", - "sp-core", - "sp-runtime", - "sp-std", - "thiserror", - "tracing", - "trie-bench", - "trie-db", - "trie-root", - "trie-standardmap", -] - -[[package]] -name = "sp-version" -version = "5.0.0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "parity-wasm", - "scale-info", - "serde", - "sp-core-hashing-proc-macro", - "sp-runtime", - "sp-std", - "sp-version-proc-macro", - "thiserror", -] - -[[package]] -name = "sp-version-proc-macro" -version = "4.0.0-dev" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "sp-version", - "syn", -] - -[[package]] -name = "sp-wasm-interface" -version = "7.0.0" -dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std", - "wasmi 0.13.2", - "wasmtime", -] - -[[package]] -name = "sp-weights" -version = "4.0.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "ss58-registry" -version = "1.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" -dependencies = [ - "Inflector", - "num-format", - "proc-macro2", - "quote", - "serde", - "serde_json", - "unicode-xid", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "static_init" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" -dependencies = [ - "bitflags", - "cfg_aliases", - "libc", - "parking_lot 0.11.2", - "parking_lot_core 0.8.6", - "static_init_macro", - "winapi", -] - -[[package]] -name = "static_init_macro" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" -dependencies = [ - "cfg_aliases", - "memchr", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "statrs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05" -dependencies = [ - "approx", - "lazy_static", - "nalgebra", - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[package]] -name = "stun" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" -dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", -] - -[[package]] -name = "subkey" -version = "2.0.2" -dependencies = [ - "clap 4.1.4", - "sc-cli", -] - -[[package]] -name = "substrate-bip39" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" -dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "substrate-build-script-utils" -version = "3.0.0" -dependencies = [ - "platforms 2.0.0", -] - -[[package]] -name = "substrate-frame-cli" -version = "4.0.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-support", - "frame-system", - "sc-cli", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "substrate-frame-rpc-support" -version = "3.0.0" -dependencies = [ - "frame-support", - "frame-system", - "jsonrpsee", - "parity-scale-codec", - "sc-rpc-api", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-storage", - "tokio", -] - -[[package]] -name = "substrate-frame-rpc-system" -version = "4.0.0-dev" -dependencies = [ - "assert_matches", - "frame-system-rpc-runtime-api", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-rpc-api", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-core", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime-client", - "tokio", -] - -[[package]] -name = "substrate-prometheus-endpoint" -version = "0.10.0-dev" -dependencies = [ - "hyper", - "log", - "prometheus", - "thiserror", - "tokio", -] - -[[package]] -name = "substrate-rpc-client" -version = "0.10.0-dev" -dependencies = [ - "async-trait", - "jsonrpsee", - "log", - "sc-rpc-api", - "serde", - "sp-core", - "sp-runtime", - "tokio", -] - -[[package]] -name = "substrate-state-trie-migration-rpc" -version = "4.0.0-dev" -dependencies = [ - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-rpc-api", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-trie", - "trie-db", -] - -[[package]] -name = "substrate-test-client" -version = "2.0.1" -dependencies = [ - "array-bytes", - "async-trait", - "futures", - "parity-scale-codec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-offchain", - "sc-service", - "serde", - "serde_json", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", -] - -[[package]] -name = "substrate-test-runtime" -version = "2.0.0" -dependencies = [ - "beefy-merkle-tree", - "cfg-if", - "frame-support", - "frame-system", - "frame-system-rpc-runtime-api", - "futures", - "log", - "memory-db", - "pallet-babe", - "pallet-timestamp", - "parity-scale-codec", - "sc-block-builder", - "sc-executor", - "sc-service", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-beefy", - "sp-block-builder", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-core", - "sp-externalities", - "sp-finality-grandpa", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-offchain", - "sp-runtime", - "sp-runtime-interface", - "sp-session", - "sp-state-machine", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "substrate-test-runtime-client", - "substrate-wasm-builder", - "trie-db", -] - -[[package]] -name = "substrate-test-runtime-client" -version = "2.0.0" -dependencies = [ - "futures", - "parity-scale-codec", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "substrate-test-client", - "substrate-test-runtime", -] - -[[package]] -name = "substrate-test-runtime-transaction-pool" -version = "2.0.0" -dependencies = [ - "futures", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-blockchain", - "sp-runtime", - "substrate-test-runtime-client", - "thiserror", -] - -[[package]] -name = "substrate-test-utils" -version = "4.0.0-dev" -dependencies = [ - "futures", - "sc-service", - "substrate-test-utils-derive", - "tokio", - "trybuild", -] - -[[package]] -name = "substrate-test-utils-derive" -version = "0.10.0-dev" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "substrate-test-utils-test-crate" -version = "0.1.0" -dependencies = [ - "sc-service", - "substrate-test-utils", - "tokio", -] - -[[package]] -name = "substrate-wasm-builder" -version = "5.0.0-dev" -dependencies = [ - "ansi_term", - "build-helper", - "cargo_metadata", - "filetime", - "sp-maybe-compressed-blob", - "strum", - "tempfile", - "toml", - "walkdir", - "wasm-opt", -] - -[[package]] -name = "substring" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "system-configuration" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "target-lexicon" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "termtree" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" - -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - -[[package]] -name = "thiserror" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thousands" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny-bip39" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" -dependencies = [ - "anyhow", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.11.0", - "rand 0.8.5", - "rustc-hash", - "sha2 0.10.6", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite 0.2.9", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.42.0", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.8", - "tokio", - "webpki 0.22.0", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.9", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-util" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite 0.2.9", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite 0.2.9", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite 0.2.9", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers 0.0.1", - "parking_lot 0.11.2", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers 0.1.0", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "trie-bench" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbb0a830db7c42ae97ce4e21b30e2cf9dbcc1b4f7853bd1aedad3d806c281d0" -dependencies = [ - "criterion", - "hash-db", - "keccak-hasher", - "memory-db", - "parity-scale-codec", - "trie-db", - "trie-root", - "trie-standardmap", -] - -[[package]] -name = "trie-db" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" -dependencies = [ - "hash-db", - "hashbrown 0.12.3", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" -dependencies = [ - "hash-db", -] - -[[package]] -name = "trie-standardmap" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3161ba520ab28cd8e6b68e1126f1009f6e335339d1a73b978139011703264c8" -dependencies = [ - "hash-db", - "keccak-hasher", -] - -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand 0.8.5", - "smallvec", - "socket2", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "lru-cache", - "parking_lot 0.12.1", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "try-runtime-cli" -version = "0.10.0-dev" -dependencies = [ - "clap 4.1.4", - "frame-remote-externalities", - "frame-try-runtime", - "hex", - "log", - "parity-scale-codec", - "sc-cli", - "sc-executor", - "sc-service", - "serde", - "serde_json", - "sp-api", - "sp-core", - "sp-debug-derive", - "sp-externalities", - "sp-io", - "sp-keystore", - "sp-rpc", - "sp-runtime", - "sp-state-machine", - "sp-version", - "sp-weights", - "substrate-rpc-client", - "tokio", - "zstd", -] - -[[package]] -name = "trybuild" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" -dependencies = [ - "basic-toml", - "dissimilar", - "glob", - "once_cell", - "serde", - "serde_derive", - "serde_json", - "termcolor", -] - -[[package]] -name = "tt-call" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" - -[[package]] -name = "turn" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "futures", - "log", - "md-5", - "rand 0.8.5", - "ring", - "stun", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "digest 0.10.6", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "unsigned-varint" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures-io", - "futures-util", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna 0.3.0", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "wait-timeout" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" -dependencies = [ - "libc", -] - -[[package]] -name = "waitgroup" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" -dependencies = [ - "atomic-waker", -] - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-encoder" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasm-instrument" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasm-instrument" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasm-opt" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" -dependencies = [ - "anyhow", - "libc", - "strum", - "strum_macros", - "tempfile", - "thiserror", - "wasm-opt-cxx-sys", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-cxx-sys" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" -dependencies = [ - "anyhow", - "cxx", - "cxx-build", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-sys" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" -dependencies = [ - "anyhow", - "cc", - "cxx", - "cxx-build", - "regex", -] - -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmi" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" -dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core 0.2.1", -] - -[[package]] -name = "wasmi" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" -dependencies = [ - "spin 0.9.5", - "wasmi_arena", - "wasmi_core 0.5.0", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasmi_arena" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" - -[[package]] -name = "wasmi_core" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" -dependencies = [ - "downcast-rs", - "libm 0.2.6", - "memory_units", - "num-rational", - "num-traits", -] - -[[package]] -name = "wasmi_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" -dependencies = [ - "downcast-rs", - "libm 0.2.6", - "num-traits", -] - -[[package]] -name = "wasmparser" -version = "0.89.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef" -dependencies = [ - "indexmap", -] - -[[package]] -name = "wasmparser-nostd" -version = "0.91.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c37f310b5a62bfd5ae7c0f1d8e6f98af16a5d6d84ba764e9c36439ec14e318b" -dependencies = [ - "indexmap-nostd", -] - -[[package]] -name = "wasmtime" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731" -dependencies = [ - "anyhow", - "bincode", - "cfg-if", - "indexmap", - "libc", - "log", - "object 0.29.0", - "once_cell", - "paste", - "psm", - "rayon", - "serde", - "target-lexicon", - "wasmparser", - "wasmtime-cache", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-jit", - "wasmtime-runtime", - "windows-sys 0.36.1", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "wasmtime-cache" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882" -dependencies = [ - "anyhow", - "base64 0.13.1", - "bincode", - "directories-next", - "file-per-thread-logger", - "log", - "rustix 0.35.13", - "serde", - "sha2 0.9.9", - "toml", - "windows-sys 0.36.1", - "zstd", -] - -[[package]] -name = "wasmtime-cranelift" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd91339b742ff20bfed4532a27b73c86b5bcbfedd6bea2dcdf2d64471e1b5c6" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli 0.26.2", - "log", - "object 0.29.0", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-environ" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli 0.26.2", - "indexmap", - "log", - "object 0.29.0", - "serde", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-jit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681" -dependencies = [ - "addr2line 0.17.0", - "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli 0.26.2", - "log", - "object 0.29.0", - "rustc-demangle", - "rustix 0.35.13", - "serde", - "target-lexicon", - "thiserror", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-runtime", - "windows-sys 0.36.1", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731" -dependencies = [ - "object 0.29.0", - "once_cell", - "rustix 0.35.13", -] - -[[package]] -name = "wasmtime-runtime" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap", - "libc", - "log", - "mach", - "memfd", - "memoffset 0.6.5", - "paste", - "rand 0.8.5", - "rustix 0.35.13", - "thiserror", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.36.1", -] - -[[package]] -name = "wasmtime-types" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23d61cb4c46e837b431196dd06abb11731541021916d03476a178b54dc07aeb" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - -[[package]] -name = "wast" -version = "53.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" -dependencies = [ - "wast", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "webrtc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "hex", - "interceptor", - "lazy_static", - "log", - "rand 0.8.5", - "rcgen 0.9.3", - "regex", - "ring", - "rtcp", - "rtp", - "rustls 0.19.1", - "sdp", - "serde", - "serde_json", - "sha2 0.10.6", - "stun", - "thiserror", - "time 0.3.17", - "tokio", - "turn", - "url", - "waitgroup", - "webrtc-data", - "webrtc-dtls", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "webrtc-data" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" -dependencies = [ - "bytes", - "derive_builder", - "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", -] - -[[package]] -name = "webrtc-dtls" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" -dependencies = [ - "aes 0.6.0", - "aes-gcm 0.8.0", - "async-trait", - "bincode", - "block-modes", - "byteorder", - "ccm", - "curve25519-dalek 3.2.0", - "der-parser 8.1.0", - "elliptic-curve", - "hkdf", - "hmac 0.10.1", - "log", - "oid-registry 0.6.1", - "p256", - "p384", - "rand 0.8.5", - "rand_core 0.6.4", - "rcgen 0.9.3", - "ring", - "rustls 0.19.1", - "sec1", - "serde", - "sha-1", - "sha2 0.9.9", - "signature", - "subtle", - "thiserror", - "tokio", - "webpki 0.21.4", - "webrtc-util", - "x25519-dalek 2.0.0-pre.1", - "x509-parser 0.13.2", -] - -[[package]] -name = "webrtc-ice" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" -dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", -] - -[[package]] -name = "webrtc-mdns" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" -dependencies = [ - "log", - "socket2", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-media" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" -dependencies = [ - "byteorder", - "bytes", - "derive_builder", - "displaydoc", - "rand 0.8.5", - "rtp", - "thiserror", - "webrtc-util", -] - -[[package]] -name = "webrtc-sctp" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-srtp" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "aes-gcm 0.9.4", - "async-trait", - "byteorder", - "bytes", - "ctr 0.8.0", - "hmac 0.11.0", - "log", - "rtcp", - "rtp", - "sha-1", - "subtle", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-util" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix 0.24.3", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", -] - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "which" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "widestring" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" -dependencies = [ - "windows_aarch64_msvc 0.34.0", - "windows_i686_gnu 0.34.0", - "windows_i686_msvc 0.34.0", - "windows_x86_64_gnu 0.34.0", - "windows_x86_64_msvc 0.34.0", -] - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_i686_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" -dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" -dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "x509-parser" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" -dependencies = [ - "asn1-rs 0.3.1", - "base64 0.13.1", - "data-encoding", - "der-parser 7.0.0", - "lazy_static", - "nom", - "oid-registry 0.4.0", - "ring", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "x509-parser" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" -dependencies = [ - "asn1-rs 0.5.1", - "base64 0.13.1", - "data-encoding", - "der-parser 8.1.0", - "lazy_static", - "nom", - "oid-registry 0.6.1", - "rusticata-macros", - "thiserror", - "time 0.3.17", -] - -[[package]] -name = "yamux" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "yasna" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" -dependencies = [ - "time 0.3.17", -] - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" -dependencies = [ - "cc", - "libc", - "pkg-config", -] From 2564feded3bf516f96a8c79de5ef5ff707b4b7d6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Feb 2023 11:54:57 +0100 Subject: [PATCH 192/364] cargo update --- Cargo.lock | 63 +++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7068838be4c5e..4bb726ace7491 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,7 +27,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.27.1", + "gimli 0.27.2", ] [[package]] @@ -2252,9 +2252,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -2999,9 +2999,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "git2" @@ -4622,14 +4622,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -5391,9 +5391,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "oorandom" @@ -9691,9 +9691,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -9896,7 +9896,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-bls12-377", "ark-ff", @@ -9910,7 +9910,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-bls12-381", "ark-ec", @@ -9924,7 +9924,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-bw6-761", "ark-ff", @@ -9937,7 +9937,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -9951,7 +9951,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -9965,7 +9965,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-ec", "ark-ff", @@ -9981,7 +9981,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#ee80487c70c3faf954ea6f2c27566221c418a106" +source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" dependencies = [ "ark-serialize", "ark-std", @@ -11280,10 +11280,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -11466,9 +11467,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -12079,9 +12080,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c3e4bc09095436c8e7584d86d33e6c3ee67045af8fb262cbb9cc321de553428" +checksum = "704553b4d614a47080b4a457a976b3c16174b19ce95b931b847561b590dd09ba" dependencies = [ "leb128", ] @@ -12412,9 +12413,9 @@ dependencies = [ [[package]] name = "wast" -version = "53.0.0" +version = "54.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8244fa24196b1d8fd3ca4a96a3a164c40f846498c5deab6caf414c67340ca4af" +checksum = "f0d3df4a63b10958fe98ab9d7e9a57a7bc900209d2b4edd10535bfb0703e6516" dependencies = [ "leb128", "memchr", @@ -12424,9 +12425,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620f1059add6dad511decb9d5d88b4a0a0d3e2e315ed34f79b0dc0dce18aa4b" +checksum = "3e9a7c7d177696d0548178c36e377d49eba54170e885801d4270e2d44e82ac84" dependencies = [ "wast", ] @@ -12569,9 +12570,9 @@ dependencies = [ [[package]] name = "webrtc-ice" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" dependencies = [ "arc-swap", "async-trait", From 5f2a075b8b9df4105073ae214e42e7a20612e99e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Feb 2023 10:04:38 +0100 Subject: [PATCH 193/364] cargo update --- Cargo.lock | 82 +++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4bb726ace7491..e1246517858d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -460,7 +460,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.19", ] [[package]] @@ -476,7 +476,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.19", ] [[package]] @@ -930,9 +930,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bounded-collections" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2aff4807e40f478132150d80b031f2461d88f061851afcab537d7600c24120" +checksum = "a071c348a5ef6da1d3a87166b408170b46002382b1dda83992b5c2208cefb370" dependencies = [ "log", "parity-scale-codec", @@ -1132,7 +1132,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.4", + "clap 4.1.6", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1248,9 +1248,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.4" +version = "4.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" +checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3" dependencies = [ "bitflags", "clap_derive", @@ -1263,11 +1263,11 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6540eedc41f8a5a76cf3d8d458057dcdf817be4158a55b5f861f7a5483de75" +checksum = "bd125be87bf4c255ebc50de0b7f4d2a6201e8ac3dc86e39c0ad081dc5e7236fe" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", ] [[package]] @@ -1705,9 +1705,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90d59d9acd2a682b4e40605a242f6670eaa58c5957471cbf85e8aa6a0b97a5e8" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -1717,9 +1717,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfa40bda659dd5c864e65f4c9a2b0aff19bea56b017b9b77c73d3766a453a38" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", @@ -1732,15 +1732,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457ce6757c5c70dc6ecdbda6925b958aae7f959bda7d8fb9bde889e34a09dc03" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebf883b7aacd7b2aeb2a7b338648ee19f57c140d4ee8e52c68979c6b2f7f2263" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", @@ -2423,7 +2423,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.4", + "clap 4.1.6", "comfy-table", "frame-benchmarking", "frame-support", @@ -2514,7 +2514,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -4911,7 +4911,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.4", + "clap 4.1.6", "derive_more", "fs_extra", "futures", @@ -4948,7 +4948,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.4", + "clap 4.1.6", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5067,7 +5067,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5126,7 +5126,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "generate-bags", "kitchensink-runtime", ] @@ -5135,7 +5135,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7689,7 +7689,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring", - "time 0.3.17", + "time 0.3.19", "x509-parser 0.13.2", "yasna", ] @@ -7702,7 +7702,7 @@ checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", "ring", - "time 0.3.17", + "time 0.3.19", "yasna", ] @@ -8176,7 +8176,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.4", + "clap 4.1.6", "fdlimit", "futures", "futures-timer", @@ -9210,7 +9210,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "futures", "log", "nix 0.26.2", @@ -10398,7 +10398,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10875,7 +10875,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "sc-cli", ] @@ -10903,7 +10903,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "frame-support", "frame-system", "sc-cli", @@ -11320,9 +11320,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "53250a3b3fed8ff8fd988587d8925d26a83ac3845d9e03b220b37f34c2b8d6c2" dependencies = [ "itoa", "serde", @@ -11338,9 +11338,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "a460aeb8de6dcb0f381e1ee05f1cd56fcf5a5f6eb8187ff3d8f0b11078d38b7c" dependencies = [ "time-core", ] @@ -11740,7 +11740,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12497,7 +12497,7 @@ dependencies = [ "sha2 0.10.6", "stun", "thiserror", - "time 0.3.17", + "time 0.3.19", "tokio", "turn", "url", @@ -12930,7 +12930,7 @@ dependencies = [ "ring", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.19", ] [[package]] @@ -12948,7 +12948,7 @@ dependencies = [ "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.19", ] [[package]] @@ -12977,7 +12977,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ - "time 0.3.17", + "time 0.3.19", ] [[package]] From 684ae642e85a28681d1463ed27e3ca46c2da01dc Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Feb 2023 08:14:32 +0100 Subject: [PATCH 194/364] cargo update --- Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 048fd1c94bf44..130d45931cd0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3217,9 +3217,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -4552,9 +4552,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +checksum = "2af2c65375e552a67fe3829ca63e8a7c27a378a62824594f43b2851d682b5ec2" dependencies = [ "libc", ] @@ -11749,7 +11749,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.4", + "clap 4.1.6", "frame-remote-externalities", "frame-try-runtime", "hex", From 8dc3ee33cf4cc6d43bffa34dad0844484042502a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Feb 2023 15:07:49 +0100 Subject: [PATCH 195/364] cargo update --- Cargo.lock | 57 +++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d54c5cead9d71..d07aec1bb2d82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -211,9 +211,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390ae58ca5e3ed40d8c1eb9c939931258562c1c331a0ea10d76091f450c50b43" +checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" dependencies = [ "ark-ec", "ark-ff", @@ -266,9 +266,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d7f0c52aff14f216200a9eee06a9990fee2e51fc9599e226df448ad3232886" +checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" dependencies = [ "ark-ff", "ark-poly", @@ -307,9 +307,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ee31d8869a353433524dbd5a8f51f95cdafe7c66d458956ec13aa737198562" +checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc8f7ec7fdcc20f3f110783c043d80479b42f500003cf92b71ca90f34a2ba0e" +checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" dependencies = [ "quote", "syn", @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15aa320e38052d644e569740bad208e5f9f5fafedcc9e6b1557f723be1b7ff8d" +checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" dependencies = [ "num-bigint", "num-traits", @@ -350,9 +350,9 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2e8741caf33ab3063f1fc65617716ffb18cba8e872998aa2eef0d4e4b56d1" +checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" dependencies = [ "ark-ff", "ark-serialize", @@ -392,9 +392,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea39d00a8a4c832e6f6520e58ccec7bf909c4845863512e9b8656fd47df355" +checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" dependencies = [ "ark-serialize-derive", "ark-std", @@ -404,9 +404,9 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "101333772a4020c883890811500d5ecc704c545a90140629af5c3b9f00d78953" +checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" dependencies = [ "proc-macro2", "quote", @@ -572,19 +572,20 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite 0.2.9", ] [[package]] name = "async-stream-impl" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", @@ -948,9 +949,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -1225,9 +1226,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", @@ -9741,9 +9742,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -11460,9 +11461,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core", "pin-project-lite 0.2.9", From 2ddc47125c53fddb91a63d75b5f41b7ed3eb059e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 1 Mar 2023 08:02:22 +0100 Subject: [PATCH 196/364] cargo update --- Cargo.lock | 519 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 316 insertions(+), 203 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b8ed0e234246..1ecdd27d3789c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,6 +55,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "aead" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +dependencies = [ + "crypto-common", + "generic-array 0.14.6", +] + [[package]] name = "aes" version = "0.6.0" @@ -79,17 +89,14 @@ dependencies = [ ] [[package]] -name = "aes-gcm" -version = "0.8.0" +name = "aes" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", + "cfg-if", + "cipher 0.4.3", + "cpufeatures", ] [[package]] @@ -106,6 +113,20 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.1", + "aes 0.8.2", + "cipher 0.4.3", + "ctr 0.9.2", + "ghash 0.5.0", + "subtle", +] + [[package]] name = "aes-soft" version = "0.6.4" @@ -460,7 +481,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.19", + "time 0.3.20", ] [[package]] @@ -476,7 +497,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.19", + "time 0.3.20", ] [[package]] @@ -686,9 +707,9 @@ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" @@ -925,9 +946,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" @@ -954,9 +975,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" dependencies = [ "serde", ] @@ -1070,7 +1091,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.6", + "clap 4.1.8", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1129,7 +1150,7 @@ checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", - "multihash", + "multihash 0.16.3", "serde", "unsigned-varint", ] @@ -1152,6 +1173,16 @@ dependencies = [ "generic-array 0.14.6", ] +[[package]] +name = "cipher" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "ckb-merkle-mountain-range" version = "0.5.2" @@ -1186,13 +1217,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.6" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.1", + "clap_lex 0.3.2", "is-terminal", "once_cell", "strsim", @@ -1201,18 +1232,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.2" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd125be87bf4c255ebc50de0b7f4d2a6201e8ac3dc86e39c0ad081dc5e7236fe" +checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", ] [[package]] name = "clap_derive" -version = "4.1.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", "proc-macro-error", @@ -1232,9 +1263,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" dependencies = [ "os_str_bytes", ] @@ -1271,9 +1302,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" @@ -1324,12 +1355,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - [[package]] name = "cranelift-bforest" version = "0.93.0" @@ -1493,9 +1518,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1503,9 +1528,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1514,22 +1539,22 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", + "memoffset 0.8.0", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -1559,19 +1584,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.6", + "rand_core 0.6.4", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -1594,20 +1610,20 @@ dependencies = [ [[package]] name = "ctr" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher 0.2.5", + "cipher 0.3.0", ] [[package]] name = "ctr" -version = "0.8.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.3.0", + "cipher 0.4.3", ] [[package]] @@ -2004,9 +2020,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecdsa" @@ -2370,7 +2386,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.6", + "clap 4.1.8", "comfy-table", "frame-benchmarking", "frame-support", @@ -2461,7 +2477,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2927,22 +2943,22 @@ dependencies = [ [[package]] name = "ghash" -version = "0.3.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.4.5", + "polyval 0.5.3", ] [[package]] name = "ghash" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.5.3", + "polyval 0.6.0", ] [[package]] @@ -3007,9 +3023,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -3122,23 +3138,13 @@ dependencies = [ "hmac 0.12.1", ] -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "crypto-mac 0.11.1", + "crypto-mac", "digest 0.9.0", ] @@ -3385,6 +3391,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.6", +] + [[package]] name = "instant" version = "0.1.12" @@ -3464,19 +3479,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ -<<<<<<< HEAD "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", -======= - "hermit-abi 0.3.0", "io-lifetimes 1.0.5", "rustix 0.36.8", ->>>>>>> master "windows-sys 0.45.0", ] @@ -3497,9 +3506,9 @@ checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] @@ -3871,14 +3880,14 @@ dependencies = [ "futures-timer", "getrandom 0.2.8", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-dns", "libp2p-identify", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise", + "libp2p-noise 0.41.0", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -3888,7 +3897,7 @@ dependencies = [ "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.16.0", "parking_lot 0.12.1", "pin-project", "smallvec", @@ -3909,8 +3918,42 @@ dependencies = [ "futures-timer", "instant", "log", - "multiaddr", - "multihash", + "multiaddr 0.16.0", + "multihash 0.16.3", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "prost", + "prost-build", + "rand 0.8.5", + "rw-stream-sink", + "sec1", + "sha2 0.10.6", + "smallvec", + "thiserror", + "unsigned-varint", + "void", + "zeroize", +] + +[[package]] +name = "libp2p-core" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", "multistream-select", "once_cell", "parking_lot 0.12.1", @@ -3935,7 +3978,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "smallvec", @@ -3951,7 +3994,7 @@ dependencies = [ "asynchronous-codec", "futures", "futures-timer", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "lru", @@ -3977,7 +4020,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "prost", @@ -4000,7 +4043,7 @@ dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4017,7 +4060,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -4034,7 +4077,7 @@ dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "nohash-hasher", "parking_lot 0.12.1", @@ -4052,7 +4095,30 @@ dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core", + "libp2p-core 0.38.0", + "log", + "once_cell", + "prost", + "prost-build", + "rand 0.8.5", + "sha2 0.10.6", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", +] + +[[package]] +name = "libp2p-noise" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" +dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core 0.39.0", "log", "once_cell", "prost", @@ -4075,7 +4141,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4084,15 +4150,15 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core", + "libp2p-core 0.39.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4113,7 +4179,7 @@ dependencies = [ "bytes", "futures", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4132,7 +4198,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm-derive", "log", "pin-project", @@ -4164,7 +4230,7 @@ dependencies = [ "futures-timer", "if-watch", "libc", - "libp2p-core", + "libp2p-core 0.38.0", "log", "socket2", "tokio", @@ -4172,13 +4238,13 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha" +version = "0.1.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" +checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" dependencies = [ "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.39.0", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4196,7 +4262,7 @@ checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" dependencies = [ "futures", "js-sys", - "libp2p-core", + "libp2p-core 0.38.0", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", @@ -4204,9 +4270,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha" +version = "0.4.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" dependencies = [ "async-trait", "asynchronous-codec", @@ -4215,10 +4281,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core", - "libp2p-noise", + "libp2p-core 0.39.0", + "libp2p-noise 0.42.0", "log", - "multihash", + "multihash 0.17.0", "prost", "prost-build", "prost-codec", @@ -4242,7 +4308,7 @@ dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "quicksink", @@ -4259,7 +4325,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "thiserror", @@ -4533,9 +4599,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af2c65375e552a67fe3829ca63e8a7c27a378a62824594f43b2851d682b5ec2" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] @@ -4558,6 +4624,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "memory-db" version = "0.31.0" @@ -4689,7 +4764,25 @@ dependencies = [ "byteorder", "data-encoding", "multibase", - "multihash", + "multihash 0.16.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash 0.17.0", "percent-encoding", "serde", "static_assertions", @@ -4725,6 +4818,19 @@ dependencies = [ "unsigned-varint", ] +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "core2", + "digest 0.10.6", + "multihash-derive", + "sha2 0.10.6", + "unsigned-varint", +] + [[package]] name = "multihash-derive" version = "0.8.1" @@ -4892,7 +4998,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.6", + "clap 4.1.8", "derive_more", "fs_extra", "futures", @@ -4929,7 +5035,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.6", + "clap 4.1.8", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5049,7 +5155,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5108,7 +5214,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "generate-bags", "kitchensink-runtime", ] @@ -5117,7 +5223,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7067,7 +7173,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "crypto-mac 0.11.1", + "crypto-mac", ] [[package]] @@ -7279,30 +7385,31 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.4.5" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ - "cpuid-bool", + "cfg-if", + "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.5.0", ] [[package]] @@ -7458,9 +7565,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" dependencies = [ "bytes", "prost-derive", @@ -7468,9 +7575,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" dependencies = [ "bytes", "heck", @@ -7503,9 +7610,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" dependencies = [ "anyhow", "itertools", @@ -7516,11 +7623,10 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" dependencies = [ - "bytes", "prost", ] @@ -7718,7 +7824,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring", - "time 0.3.19", + "time 0.3.20", "x509-parser 0.13.2", "yasna", ] @@ -7731,7 +7837,7 @@ checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", "ring", - "time 0.3.19", + "time 0.3.20", "yasna", ] @@ -7825,15 +7931,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "resolv-conf" version = "0.7.0" @@ -8235,7 +8332,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.6", + "clap 4.1.8", "fdlimit", "futures", "futures-timer", @@ -9334,12 +9431,8 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ -<<<<<<< HEAD - "clap 4.1.6", -======= - "clap 4.1.4", + "clap 4.1.8", "fs4", ->>>>>>> master "futures", "log", "sc-client-db", @@ -9756,6 +9849,17 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + [[package]] name = "sha2" version = "0.8.2" @@ -10526,7 +10630,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10899,9 +11003,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.38.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" +checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" dependencies = [ "Inflector", "num-format", @@ -11003,7 +11107,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "sc-cli", ] @@ -11031,7 +11135,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "frame-support", "frame-system", "sc-cli", @@ -11292,9 +11396,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -11348,16 +11452,15 @@ checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" dependencies = [ "cfg-if", "fastrand", - "libc", "redox_syscall", - "remove_dir_all", - "winapi", + "rustix 0.36.8", + "windows-sys 0.42.0", ] [[package]] @@ -11449,9 +11552,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53250a3b3fed8ff8fd988587d8925d26a83ac3845d9e03b220b37f34c2b8d6c2" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ "itoa", "serde", @@ -11467,9 +11570,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a460aeb8de6dcb0f381e1ee05f1cd56fcf5a5f6eb8187ff3d8f0b11078d38b7c" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -11870,7 +11973,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.6", + "clap 4.1.8", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12022,6 +12125,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unsigned-varint" version = "0.7.1" @@ -12215,9 +12328,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704553b4d614a47080b4a457a976b3c16174b19ce95b931b847561b590dd09ba" +checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" dependencies = [ "leb128", ] @@ -12559,9 +12672,9 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.0" +version = "54.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d3df4a63b10958fe98ab9d7e9a57a7bc900209d2b4edd10535bfb0703e6516" +checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" dependencies = [ "leb128", "memchr", @@ -12571,9 +12684,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9a7c7d177696d0548178c36e377d49eba54170e885801d4270e2d44e82ac84" +checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" dependencies = [ "wast", ] @@ -12643,7 +12756,7 @@ dependencies = [ "sha2 0.10.6", "stun", "thiserror", - "time 0.3.19", + "time 0.3.20", "tokio", "turn", "url", @@ -12675,12 +12788,12 @@ dependencies = [ [[package]] name = "webrtc-dtls" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" +checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" dependencies = [ "aes 0.6.0", - "aes-gcm 0.8.0", + "aes-gcm 0.10.1", "async-trait", "bincode", "block-modes", @@ -12690,7 +12803,7 @@ dependencies = [ "der-parser 8.1.0", "elliptic-curve", "hkdf", - "hmac 0.10.1", + "hmac 0.12.1", "log", "oid-registry 0.6.1", "p256", @@ -12702,8 +12815,8 @@ dependencies = [ "rustls 0.19.1", "sec1", "serde", - "sha-1", - "sha2 0.9.9", + "sha1", + "sha2 0.10.6", "signature", "subtle", "thiserror", @@ -12851,9 +12964,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feff0a412894d67223777b6cc8d68c0dab06d52d95e9890d5f2d47f10dd9366c" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" dependencies = [ "bytemuck", "safe_arch", @@ -13076,7 +13189,7 @@ dependencies = [ "ring", "rusticata-macros", "thiserror", - "time 0.3.19", + "time 0.3.20", ] [[package]] @@ -13094,7 +13207,7 @@ dependencies = [ "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time 0.3.19", + "time 0.3.20", ] [[package]] @@ -13123,7 +13236,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ - "time 0.3.19", + "time 0.3.20", ] [[package]] From 16840abaa32e629a202623910347881d212af6ac Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 5 Mar 2023 11:41:56 +0100 Subject: [PATCH 197/364] use serialize_result --- primitives/arkworks/src/bls12_381.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 5da0e59ca8ed7..ce5fe9a7cc93f 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -53,10 +53,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let result = Bls12_381::multi_miller_loop(g1, g2).0; - let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; - let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_uncompressed(&mut cursor).unwrap(); - serialized_result + serialize_result(result) } /// Compute final exponentiation through arkworks From 7dda160cc5485394476cebb68c038aec98fe8478 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 6 Mar 2023 09:04:41 +0100 Subject: [PATCH 198/364] cargo update --- Cargo.lock | 192 +++++++++++++++++++++++------------------------------ 1 file changed, 84 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3008221f04ff..48efa3bd9fb81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -594,12 +594,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] @@ -626,9 +625,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", @@ -724,9 +723,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" +checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" dependencies = [ "serde", ] @@ -1679,9 +1678,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1691,9 +1690,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1706,15 +1705,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", @@ -2004,9 +2003,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -2254,9 +2253,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "54b2f3c51e4dd999930845da5d10a48775b8fe4ca9f4f9ec1f9161f334da5dfe" [[package]] name = "file-per-thread-logger" @@ -3496,7 +3495,7 @@ checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.5", - "rustix 0.36.8", + "rustix 0.36.9", "windows-sys 0.45.0", ] @@ -3511,9 +3510,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" @@ -3883,9 +3882,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" dependencies = [ "bytes", "futures", @@ -3899,7 +3898,7 @@ dependencies = [ "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise 0.41.0", + "libp2p-noise", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -4121,29 +4120,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-noise" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core 0.39.0", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - [[package]] name = "libp2p-ping" version = "0.41.0" @@ -4162,15 +4138,15 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.2" +version = "0.7.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.39.0", + "libp2p-core 0.38.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4282,9 +4258,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha.2" +version = "0.4.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" dependencies = [ "async-trait", "asynchronous-codec", @@ -4293,10 +4269,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.39.0", - "libp2p-noise 0.42.0", + "libp2p-core 0.38.0", + "libp2p-noise", "log", - "multihash 0.17.0", + "multihash 0.16.3", "prost", "prost-build", "prost-codec", @@ -4606,7 +4582,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.8", + "rustix 0.36.9", ] [[package]] @@ -4968,9 +4944,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", "futures", @@ -7193,9 +7169,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -7247,9 +7223,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -7257,9 +7233,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -7267,9 +7243,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", @@ -7280,9 +7256,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", @@ -7492,9 +7468,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" dependencies = [ "proc-macro2", "syn", @@ -7826,9 +7802,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -7836,9 +7812,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -7893,18 +7869,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" dependencies = [ "proc-macro2", "quote", @@ -8129,9 +8105,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", @@ -8189,9 +8165,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rusty-fork" @@ -8217,9 +8193,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safe-mix" @@ -8902,7 +8878,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.8", + "rustix 0.36.9", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9702,9 +9678,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "sct" @@ -9857,9 +9833,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -10035,9 +10011,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -11492,7 +11468,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.8", + "rustix 0.36.9", "windows-sys 0.42.0", ] @@ -11519,18 +11495,18 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -11665,9 +11641,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -11680,7 +11656,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -12040,9 +12016,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.77" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" +checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" dependencies = [ "basic-toml", "dissimilar", @@ -12087,7 +12063,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.6", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] @@ -12123,9 +12099,9 @@ checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -12573,7 +12549,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.8", + "rustix 0.36.9", "serde", "sha2 0.10.6", "toml", @@ -12653,7 +12629,7 @@ checksum = "f76ef2e410329aaf8555ac6571d6fe07711be0646dcdf7ff3ab750a42ed2e583" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.8", + "rustix 0.36.9", ] [[package]] @@ -12684,7 +12660,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.8", + "rustix 0.36.9", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", From acff5f8dae82ac94d2c540b92fd82d8e9cd68da1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Mar 2023 07:14:05 +0100 Subject: [PATCH 199/364] cargo update --- Cargo.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 45c841edd1b44..8bad72dfc3d51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -486,9 +486,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -1808,11 +1808,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -3455,9 +3455,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", "windows-sys 0.45.0", @@ -3494,7 +3494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.6", "rustix 0.36.9", "windows-sys 0.45.0", ] @@ -4855,9 +4855,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -5463,7 +5463,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] @@ -8112,7 +8112,7 @@ checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.6", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -9814,18 +9814,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "3a382c72b4ba118526e187430bb4963cd6d55051ebf13d9b25574d379cc98d20" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "1ef476a5790f0f6decbc66726b6e5d63680ed518283e64c7df415989d880954f" dependencies = [ "proc-macro2", "quote", @@ -12338,9 +12338,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] @@ -12682,9 +12682,9 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.1" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", @@ -12694,9 +12694,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ "wast", ] @@ -12810,7 +12810,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve", "hkdf", "hmac 0.12.1", @@ -13208,10 +13208,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", From 3f95117c6166babd1e5ace54f3d636ad9997ee45 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 8 Mar 2023 07:15:00 +0100 Subject: [PATCH 200/364] cargo update --- Cargo.lock | 150 +++++++++++++++++++---------------------------------- 1 file changed, 54 insertions(+), 96 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index df1153416de22..f776c27770c9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -486,9 +486,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -1598,16 +1598,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -1688,9 +1678,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1700,9 +1690,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1715,15 +1705,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", @@ -1818,11 +1808,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -2958,6 +2948,7 @@ dependencies = [ "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -3157,16 +3148,6 @@ dependencies = [ "hmac 0.12.1", ] -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.11.0" @@ -3474,9 +3455,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", "windows-sys 0.45.0", @@ -3513,7 +3494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.6", "rustix 0.36.9", "windows-sys 0.45.0", ] @@ -3917,7 +3898,7 @@ dependencies = [ "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise 0.41.0", + "libp2p-noise", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -4139,29 +4120,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-noise" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core 0.39.0", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - [[package]] name = "libp2p-ping" version = "0.41.0" @@ -4180,15 +4138,15 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.2" +version = "0.7.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.39.0", + "libp2p-core 0.38.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4300,9 +4258,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha.2" +version = "0.4.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" dependencies = [ "async-trait", "asynchronous-codec", @@ -4311,10 +4269,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.39.0", - "libp2p-noise 0.42.0", + "libp2p-core 0.38.0", + "libp2p-noise", "log", - "multihash 0.17.0", + "multihash 0.16.3", "prost", "prost-build", "prost-codec", @@ -4897,9 +4855,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -5506,7 +5464,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] @@ -7267,9 +7225,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -7277,9 +7235,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -7287,9 +7245,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", @@ -7300,9 +7258,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", @@ -8155,7 +8113,7 @@ checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.6", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -9866,18 +9824,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "3a382c72b4ba118526e187430bb4963cd6d55051ebf13d9b25574d379cc98d20" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "1ef476a5790f0f6decbc66726b6e5d63680ed518283e64c7df415989d880954f" dependencies = [ "proc-macro2", "quote", @@ -9886,9 +9844,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -11521,7 +11479,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.8", + "rustix 0.36.9", "windows-sys 0.42.0", ] @@ -12390,9 +12348,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] @@ -12734,9 +12692,9 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.1" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", @@ -12746,9 +12704,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ "wast", ] @@ -12862,7 +12820,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve", "hkdf", "hmac 0.12.1", @@ -13260,10 +13218,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", From e895c73ba5293b4077a3cd6140d6b5be320aa49a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Mar 2023 07:59:39 +0100 Subject: [PATCH 201/364] cargo update --- Cargo.lock | 71 ++++++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5029361759c66..b4afe0e7c0d0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.3", + "cipher 0.4.4", "cpufeatures", ] @@ -121,7 +121,7 @@ checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ "aead 0.5.1", "aes 0.8.2", - "cipher 0.4.3", + "cipher 0.4.4", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -865,9 +865,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.6", ] @@ -985,9 +985,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -1185,9 +1185,9 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -1633,7 +1633,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher 0.4.4", ] [[package]] @@ -1722,9 +1722,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -1732,9 +1732,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -1746,9 +1746,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", @@ -1920,7 +1920,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -2253,9 +2253,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b2f3c51e4dd999930845da5d10a48775b8fe4ca9f4f9ec1f9161f334da5dfe" +checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" [[package]] name = "file-per-thread-logger" @@ -3842,9 +3842,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libgit2-sys" @@ -7372,16 +7372,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.5.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite 0.2.9", + "windows-sys 0.45.0", ] [[package]] @@ -9823,18 +9825,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.153" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a382c72b4ba118526e187430bb4963cd6d55051ebf13d9b25574d379cc98d20" +checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.153" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef476a5790f0f6decbc66726b6e5d63680ed518283e64c7df415989d880954f" +checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" dependencies = [ "proc-macro2", "quote", @@ -12103,9 +12105,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" @@ -12961,15 +12963,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "which" version = "4.4.0" From d1d5d74455b9c868d3a35606c64535670f41ca7e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Mar 2023 13:04:31 +0100 Subject: [PATCH 202/364] reduce boilerplate code --- primitives/arkworks/src/bls12_377.rs | 80 +++------------- primitives/arkworks/src/bls12_381.rs | 90 ++++-------------- primitives/arkworks/src/bw6_761.rs | 102 ++++----------------- primitives/arkworks/src/ed_on_bls12_377.rs | 46 ++-------- primitives/arkworks/src/ed_on_bls12_381.rs | 72 +++------------ primitives/arkworks/src/utils.rs | 7 +- 6 files changed, 72 insertions(+), 325 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index c64d864e3e5e7..3b61a949154d7 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::serialize_result; +use crate::utils::{deserialize_argument, serialize_result}; use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, @@ -34,29 +34,11 @@ use sp_std::vec::Vec; pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .map(::G1Prepared::from) - .unwrap() - }) + .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .map(::G2Prepared::from) - .unwrap() - }) + .map(|elem| deserialize_argument::<::G2Prepared>(elem)) .collect(); let result = Bls12_377::multi_miller_loop(g1, g2).0; @@ -66,13 +48,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let cursor = Cursor::new(target); - let target = ::TargetField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); + let target = deserialize_argument::<::TargetField>(&target); let result = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap().0; @@ -81,11 +57,8 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -94,11 +67,8 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -107,11 +77,8 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -120,11 +87,8 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -135,27 +99,11 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index ce5fe9a7cc93f..bf2f2cf9a0e18 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,15 +19,13 @@ #![warn(missing_docs)] -use crate::utils::serialize_result; +use crate::utils::{deserialize_argument, serialize_result}; use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks @@ -35,19 +33,13 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec .iter() .map(|a| { - let cursor = Cursor::new(a); - as CanonicalDeserialize>::deserialize_uncompressed(cursor) - .map(::G1Prepared::from) - .unwrap() + deserialize_argument::>(a) }) .collect(); let g2: Vec<_> = b_vec .iter() .map(|b| { - let cursor = Cursor::new(b); - as CanonicalDeserialize>::deserialize_uncompressed(cursor) - .map(::G2Prepared::from) - .unwrap() + deserialize_argument::>(b) }) .collect(); @@ -58,13 +50,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let cursor = Cursor::new(target); - let target = ::TargetField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); + let target = deserialize_argument::<::TargetField>(&target); let result = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap().0; @@ -73,11 +59,8 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -86,11 +69,8 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -99,11 +79,8 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -112,11 +89,8 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -127,27 +101,11 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G1Affine>(&a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(&a)) .collect(); let result = @@ -160,27 +118,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G2Affine>(&a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(&a)) .collect(); let result = diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index fb9b71c780174..1f881949d7c30 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,44 +19,24 @@ #![warn(missing_docs)] -use crate::utils::serialize_result; +use crate::utils::{deserialize_argument, serialize_result}; use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; -use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { let g1: Vec<_> = a_vec .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .map(::G1Prepared::from) - .unwrap() - }) + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let g2: Vec<_> = b_vec .iter() - .map(|b| { - let cursor = Cursor::new(b); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .map(::G2Prepared::from) - .unwrap() - }) + .map(|b| deserialize_argument::<::G2Affine>(b)) .collect(); let result = BW6_761::multi_miller_loop(g1, g2).0; @@ -66,13 +46,7 @@ pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let cursor = Cursor::new(target); - let target = ::TargetField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); + let target = deserialize_argument::<::TargetField>(&target); let result = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap().0; @@ -81,11 +55,8 @@ pub fn final_exponentiation(target: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -94,11 +65,8 @@ pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Projective::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -107,11 +75,8 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G1Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -120,11 +85,8 @@ pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = G2Affine::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); - - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -135,27 +97,11 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G1Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = @@ -168,27 +114,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 0a28305c7e03d..af5acbd4a3863 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,26 +19,17 @@ #![warn(missing_docs)] -use crate::utils::serialize_result; +use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, }; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; -use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = twisted_edwards::Projective::::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -47,15 +38,8 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = twisted_edwards::Affine::::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -66,27 +50,11 @@ pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - twisted_edwards::Affine::::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index cabee20689b0e..f28f2dab3c407 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::serialize_result; +use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::{Affine as SWAffine, SWCurveConfig}, @@ -28,21 +28,12 @@ use ark_ec::{ VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; -use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = ark_ec::short_weierstrass::Projective::::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -51,11 +42,8 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = SWAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -64,15 +52,8 @@ pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication on G2 through arkworks pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = twisted_edwards::Projective::::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_projective(&base, &scalar); @@ -81,11 +62,8 @@ pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { /// Compute a scalar multiplication through arkworks pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { - let cursor = Cursor::new(base); - let base = TEAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) - .unwrap(); - let cursor = Cursor::new(scalar); - let scalar = Vec::::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap(); + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); let result = ::mul_affine(&base, &scalar); @@ -96,23 +74,11 @@ pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - TEAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) - .unwrap() - }) + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -124,23 +90,11 @@ pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - SWAffine::::deserialize_with_mode(cursor, Compress::No, Validate::No) - .unwrap() - }) + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 48fa4bb04f596..f5d33f31f164a 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,4 +1,4 @@ -use ark_serialize::{CanonicalSerialize, Compress}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { @@ -7,3 +7,8 @@ pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { result.serialize_uncompressed(&mut cursor).unwrap(); serialized_result } + +pub fn deserialize_argument(argument: &Vec) -> Field { + let cursor = Cursor::new(argument); + Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() +} From 6de963834e4e1356e14c4101ad419d7aaf093bc2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Mar 2023 14:35:57 +0100 Subject: [PATCH 203/364] remove host function muls --- primitives/arkworks/src/bls12_377.rs | 43 +-------- primitives/arkworks/src/bls12_381.rs | 43 +-------- primitives/arkworks/src/bw6_761.rs | 43 +-------- primitives/arkworks/src/ed_on_bls12_377.rs | 22 +---- primitives/arkworks/src/ed_on_bls12_381.rs | 45 +--------- primitives/arkworks/test/tests/bls12_377.rs | 12 --- .../arkworks/test/tests/bls12_381/mod.rs | 12 --- primitives/arkworks/test/tests/bw6_761.rs | 12 --- .../arkworks/test/tests/ed_on_bls12_377.rs | 6 -- .../arkworks/test/tests/ed_on_bls12_381.rs | 12 --- primitives/io/src/lib.rs | 90 ------------------- 11 files changed, 6 insertions(+), 334 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 3b61a949154d7..62be7ac083bf6 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,11 +20,10 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_377::{g1, g2, Bls12_377}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, }; use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use ark_std::io::Cursor; @@ -55,46 +54,6 @@ pub fn final_exponentiation(target: Vec) -> Vec { serialize_result(result) } -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index bf2f2cf9a0e18..c49ae996dc30e 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,11 +20,10 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_bls12_381::{g1, g2, Bls12_381}; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, }; use sp_std::vec::Vec; @@ -57,46 +56,6 @@ pub fn final_exponentiation(target: Vec) -> Vec { serialize_result(result) } -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 1f881949d7c30..b3439d957fcb5 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,11 +20,10 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; +use ark_bw6_761::BW6_761; use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, }; use sp_std::vec::Vec; @@ -53,46 +52,6 @@ pub fn final_exponentiation(target: Vec) -> Vec { serialize_result(result) } -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index af5acbd4a3863..5e9736b5a4b9d 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -21,31 +21,11 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ - models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, + models::CurveConfig, twisted_edwards, VariableBaseMSM, }; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use sp_std::vec::Vec; -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication through arkworks -pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index f28f2dab3c407..db6ea4d0b3f6c 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,54 +22,13 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, - short_weierstrass::{Affine as SWAffine, SWCurveConfig}, - twisted_edwards, - twisted_edwards::{Affine as TEAffine, TECurveConfig}, + short_weierstrass::{Affine as SWAffine}, + twisted_edwards::{Affine as TEAffine}, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use sp_std::vec::Vec; -/// Compute a scalar multiplication on G2 through arkworks -pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication through arkworks -pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication on G2 through arkworks -pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) -} - -/// Compute a scalar multiplication through arkworks -pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) -} - /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 43240d25309f2..8c85f14e83dcc 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -14,21 +14,9 @@ impl HostFunctions for Host { fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) } - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) - } - fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_377_mul_affine_g1(base, scalar) - } fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) } - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) - } - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_377_mul_affine_g2(base, scalar) - } } test_group!(g1; sp_ark_bls12_377::G1Projective; sw); diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 09340d566862b..ae0860ee8682b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -21,21 +21,9 @@ impl HostFunctions for Host { fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) } - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) - } - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_381_mul_affine_g1(base, scalar) - } fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) } - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) - } - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bls12_381_mul_affine_g2(base, scalar) - } } type G1Projective = G1Projective_Host; diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 3b229d8dce5ea..039c4e7028ec0 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -12,18 +12,6 @@ impl HostFunctions for Host { fn bw6_761_final_exponentiation(f12: Vec) -> Vec { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) - } - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bw6_761_mul_affine_g2(base, scalar) - } - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) - } - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::bw6_761_mul_affine_g1(base, scalar) - } fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 92faa1cbef2be..8b4a4d3d13784 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -5,12 +5,6 @@ use sp_ark_ed_on_bls12_377::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_377_mul_affine(base, scalar) - } - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) - } fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 184e78a1b1764..a3bd0b5a82847 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,18 +5,6 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_affine(base, scalar) - } - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_381_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_381_te_mul_affine(base, scalar) - } - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_projective(base, scalar) - } fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 5c0115423a5f1..937ed6cd42c04 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1135,26 +1135,6 @@ pub trait EllipticCurves { sp_arkworks::bls12_381::final_exponentiation(f12) } - /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_projective_g1(base, scalar) - } - - /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_affine_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bls12_381 - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_projective_g2(base, scalar) - } - - /// Compute a affine multiplication on G2 for bls12_381 - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_381::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bls12_381 fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g1(bases, scalars) @@ -1175,26 +1155,6 @@ pub trait EllipticCurves { sp_arkworks::bls12_377::final_exponentiation(f12) } - /// Compute a projective multiplication on G1 for bls12_377 - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_projective_g1(base, scalar) - } - - /// Compute a affine multiplication on G1 for bls12_377 - fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_affine_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bls12_377 - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_projective_g2(base, scalar) - } - - /// Compute a affine multiplication on G2 for bls12_377 - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bls12_377::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bls12_377 fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g1(bases, scalars) @@ -1215,26 +1175,6 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::final_exponentiation(f12) } - /// Compute a projective multiplication on G1 for bw6_761 - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_projective_g1(base, scalar) - } - - /// Compute a affine multiplication on G1 for bw6_761 - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bw6_761 - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_projective_g2(base, scalar) - } - - /// Compute a affine multiplication on G2 for bw6_761 - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bw6_761 fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_g1(bases, bigints) @@ -1245,26 +1185,6 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::msm_g2(bases, bigints) } - /// Compute a short weierstrass affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) - } - - /// Compute twisted edwards projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) - } - - /// Compute twisted edwards affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) - } - - /// Compute short weierstrass projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) - } - /// Compute twisted edwards msm on ed_on_bls12_381 fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) @@ -1275,16 +1195,6 @@ pub trait EllipticCurves { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } - /// Compute affine multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_377::mul_affine(base, scalar) - } - - /// Compute projective multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) - } - /// Compute msm on ed_on_bls12_377 fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_377::msm(bases, scalars) From f4dfa2a1324d654610a53c085faffe1c69c048d7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 10 Mar 2023 19:15:26 +0100 Subject: [PATCH 204/364] reduce boilerplate code --- primitives/arkworks/src/bls12_377.rs | 22 ++-------------------- primitives/arkworks/src/ed_on_bls12_377.rs | 4 +--- primitives/arkworks/src/ed_on_bls12_381.rs | 6 ++---- 3 files changed, 5 insertions(+), 27 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 62be7ac083bf6..da3ac27ba4cbe 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -25,8 +25,6 @@ use ark_ec::{ models::CurveConfig, pairing::{MillerLoopOutput, Pairing}, }; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; -use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks @@ -75,27 +73,11 @@ pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 5e9736b5a4b9d..2a6797ab751bf 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,9 +20,7 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{ - models::CurveConfig, twisted_edwards, VariableBaseMSM, -}; +use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index db6ea4d0b3f6c..745123a9c854d 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,10 +21,8 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ - models::CurveConfig, - short_weierstrass::{Affine as SWAffine}, - twisted_edwards::{Affine as TEAffine}, - VariableBaseMSM, + models::CurveConfig, short_weierstrass::Affine as SWAffine, + twisted_edwards::Affine as TEAffine, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use sp_std::vec::Vec; From d830e861bc9b2b4447c87d71b18f5f390fb923d5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Mar 2023 08:50:34 +0100 Subject: [PATCH 205/364] remove patches --- Cargo.lock | 33 +++++++++++++++++++++++++-------- Cargo.toml | 7 ------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4afe0e7c0d0f..535c890f6f122 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3238,9 +3238,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -10159,7 +10159,7 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10173,7 +10173,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10186,7 +10186,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10200,7 +10200,7 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10214,10 +10214,27 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] +[[package]] +name = "sp-ark-models" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.8", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "sp-ark-models" version = "0.4.0" @@ -10273,7 +10290,7 @@ dependencies = [ "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381", - "sp-ark-models", + "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-io", ] diff --git a/Cargo.toml b/Cargo.toml index 612480a3ebe26..8af4964bf785f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -328,10 +328,3 @@ lto = "fat" # https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units codegen-units = 1 -[patch.crates-io] -sp-ark-models = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } From 698dcb9559d9096bfbde43a93ef620bf22f028da Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 11 Mar 2023 09:46:37 +0100 Subject: [PATCH 206/364] uuse correct ark-substrate branch --- Cargo.lock | 24 ++++++++++++------------ primitives/arkworks/test/Cargo.toml | 10 +++++----- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 535c890f6f122..9ba7fc875bcd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10152,69 +10152,69 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-bls12-381", "ark-ec", "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-bw6-761", "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] @@ -10238,7 +10238,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-ec", "ark-ff", @@ -10254,7 +10254,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=no-compression#e852d418ae4655b5705d5396a33782e178cac638" +source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 285493ada3ade..af057754ff9b0 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -20,11 +20,11 @@ sp-ark-models = { version = "0.4.0", default-features = false } sp-io = { version = "7.0.0", path = "../../io", default-features = false } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", features = [ "curve" ], default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", features = [ "curve" ], default-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch = "no-compression", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "std" ] From abbfb1c5971afdf2ec046c721e20a33197463c97 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 12 Mar 2023 15:41:37 +0100 Subject: [PATCH 207/364] reduce boilerplate code --- primitives/arkworks/src/bls12_377.rs | 53 +++++-------------------- primitives/arkworks/src/bls12_381.rs | 58 +++++----------------------- primitives/arkworks/src/bw6_761.rs | 54 +++++--------------------- primitives/arkworks/src/utils.rs | 58 ++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 138 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index da3ac27ba4cbe..8113e598cc088 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,7 +19,10 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, +}; use ark_bls12_377::{g1, g2, Bls12_377}; use ark_ec::{ models::CurveConfig, @@ -28,60 +31,22 @@ use ark_ec::{ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|elem| deserialize_argument::<::G2Prepared>(elem)) - .collect(); - - let result = Bls12_377::multi_miller_loop(g1, g2).0; - serialize_result(result) +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); - - let result = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap().0; - - serialize_result(result) + final_exponentiation_generic::(target) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index c49ae996dc30e..2928b967f0a8b 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,7 +19,10 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, +}; use ark_bls12_381::{g1, g2, Bls12_381}; use ark_ec::{ models::CurveConfig, @@ -28,64 +31,21 @@ use ark_ec::{ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|a| { - deserialize_argument::>(a) - }) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|b| { - deserialize_argument::>(b) - }) - .collect(); - - let result = Bls12_381::multi_miller_loop(g1, g2).0; - - serialize_result(result) +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); - - let result = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap().0; - - serialize_result(result) + final_exponentiation_generic::(target) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(&a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(&a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G2Affine>(&a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(&a)) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index b3439d957fcb5..a25c98ba5e880 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,7 +19,10 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, +}; use ark_bw6_761::BW6_761; use ark_ec::{ models::CurveConfig, @@ -28,60 +31,21 @@ use ark_ec::{ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|b| deserialize_argument::<::G2Affine>(b)) - .collect(); - - let result = BW6_761::multi_miller_loop(g1, g2).0; - - serialize_result(result) +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); - - let result = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap().0; - - serialize_result(result) + final_exponentiation_generic::(target) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index f5d33f31f164a..ac828ac1de7b3 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,3 +1,7 @@ +use ark_ec::{ + pairing::{MillerLoopOutput, Pairing}, + CurveConfig, +}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -12,3 +16,57 @@ pub fn deserialize_argument(argument: &Vec) -> let cursor = Cursor::new(argument); Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } + +pub fn multi_miller_loop_generic( + a_vec: Vec>, + b_vec: Vec>, +) -> Vec { + let g1: Vec<_> = a_vec + .iter() + .map(|elem| deserialize_argument::<::G1Affine>(elem)) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|elem| deserialize_argument::<::G2Prepared>(elem)) + .collect(); + + let result = Curve::multi_miller_loop(g1, g2).0; + + serialize_result(result) +} + +pub fn final_exponentiation_generic(target: Vec) -> Vec { + let target = deserialize_argument::<::TargetField>(&target); + + let result = Curve::final_exponentiation(MillerLoopOutput(target)).unwrap().0; + + serialize_result(result) +} + +pub fn msm_g1_generic(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| deserialize_argument::<::G1Affine>(a)) + .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); + + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + + serialize_result(result) +} + +pub fn msm_g2_generic(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| deserialize_argument::<::G2Affine>(a)) + .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); + + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + + serialize_result(result) +} From 39c7f4af94f99898c7c80f9e70df89ebda4f0543 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 12 Mar 2023 15:49:14 +0100 Subject: [PATCH 208/364] cleanup --- Cargo.lock | 48 ++++++++++++++-------------- primitives/arkworks/src/bls12_377.rs | 3 +- primitives/arkworks/src/bls12_381.rs | 3 +- primitives/arkworks/src/bw6_761.rs | 3 +- 4 files changed, 27 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 910b60769412d..c3febff2385fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1318,9 +1318,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "core-foundation" @@ -2756,9 +2756,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -2771,9 +2771,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -2781,15 +2781,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -2799,9 +2799,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -2820,9 +2820,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", @@ -2842,15 +2842,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -2860,9 +2860,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -9845,18 +9845,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.154" +version = "1.0.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" +checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.154" +version = "1.0.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" +checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" dependencies = [ "proc-macro2", "quote", diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 8113e598cc088..0333e12f207c3 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; use ark_bls12_377::{g1, g2, Bls12_377}; use ark_ec::{ diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 2928b967f0a8b..a5dfd999e8100 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; use ark_bls12_381::{g1, g2, Bls12_381}; use ark_ec::{ diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index a25c98ba5e880..ebcf366e7a810 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; use ark_bw6_761::BW6_761; use ark_ec::{ From 4bb0653d0c0db870f7e8f9d66d05f26a85d7bb03 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 12 Mar 2023 15:51:15 +0100 Subject: [PATCH 209/364] cleanup --- primitives/arkworks/src/bls12_377.rs | 6 +----- primitives/arkworks/src/bls12_381.rs | 6 +----- primitives/arkworks/src/bw6_761.rs | 4 ---- primitives/arkworks/src/utils.rs | 5 +---- 4 files changed, 3 insertions(+), 18 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 0333e12f207c3..4f838744acc97 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -22,11 +22,7 @@ use crate::utils::{ final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; -use ark_bls12_377::{g1, g2, Bls12_377}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, -}; +use ark_bls12_377::Bls12_377; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index a5dfd999e8100..f6527fbe06552 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -22,11 +22,7 @@ use crate::utils::{ final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; -use ark_bls12_381::{g1, g2, Bls12_381}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, -}; +use ark_bls12_381::Bls12_381; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index ebcf366e7a810..15668e0c48d3a 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -23,10 +23,6 @@ use crate::utils::{ final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, }; use ark_bw6_761::BW6_761; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, -}; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index ac828ac1de7b3..1d0cdb2bdf075 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,7 +1,4 @@ -use ark_ec::{ - pairing::{MillerLoopOutput, Pairing}, - CurveConfig, -}; +use ark_ec::pairing::{MillerLoopOutput, Pairing}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; From 235022a73ab83de178fe48779f6468de72525379 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Mar 2023 15:41:35 +0100 Subject: [PATCH 210/364] proper error handling --- primitives/arkworks/src/lib.rs | 6 ++++++ primitives/arkworks/src/utils.rs | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index f7a8e04ba025b..498ce83a79f42 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -6,3 +6,9 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; mod utils; + +pub enum PairingError { + InternalPanic, + FinalExpInverse, + MillerLoopCofactor, +} diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 1d0cdb2bdf075..cd1f52da9344f 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,3 +1,4 @@ +use crate::PairingError; use ark_ec::pairing::{MillerLoopOutput, Pairing}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -27,15 +28,16 @@ pub fn multi_miller_loop_generic( .map(|elem| deserialize_argument::<::G2Prepared>(elem)) .collect(); - let result = Curve::multi_miller_loop(g1, g2).0; + let result = Curve::multi_miller_loop(g1, g2); - serialize_result(result) + serialize_result(Ok(result)) } pub fn final_exponentiation_generic(target: Vec) -> Vec { let target = deserialize_argument::<::TargetField>(&target); - let result = Curve::final_exponentiation(MillerLoopOutput(target)).unwrap().0; + let result = + Curve::final_exponentiation(MillerLoopOutput(target)).ok_or(PairingError::FinalExpInverse); serialize_result(result) } From 80635ee508b436dd4fcbfd5b991bbbc2e9a791bc Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Mar 2023 17:46:39 +0100 Subject: [PATCH 211/364] derive serialize for error --- primitives/arkworks/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 498ce83a79f42..b20081cb9b24e 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,4 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; pub mod bls12_377; pub mod bls12_381; @@ -7,6 +8,7 @@ pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; mod utils; +#[derive(CanonicalSerialize, CanonicalDeserialize)] pub enum PairingError { InternalPanic, FinalExpInverse, From 03dc21926e87a857c0595f5d07659534c84c6873 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Mar 2023 19:11:44 +0100 Subject: [PATCH 212/364] proper error handling --- Cargo.lock | 1 + primitives/arkworks/Cargo.toml | 1 + primitives/arkworks/src/lib.rs | 5 +++-- primitives/arkworks/src/utils.rs | 16 ++++++++++------ primitives/io/src/lib.rs | 24 ++++++++++++++++++------ 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3febff2385fe..4a4501d9519b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10293,6 +10293,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-std", ] diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 84810c84f6274..a59c7cd0e44f5 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -21,6 +21,7 @@ ark-bw6-761 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } +codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["bytes"] } [features] default = [ "std" ] diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index b20081cb9b24e..8281369a58eaa 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,5 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; +use codec::{Decode, Encode}; pub mod bls12_377; pub mod bls12_381; @@ -8,7 +8,8 @@ pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; mod utils; -#[derive(CanonicalSerialize, CanonicalDeserialize)] +/// Error computing an elliptic curve pairing +#[derive(Encode, Decode)] pub enum PairingError { InternalPanic, FinalExpInverse, diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index cd1f52da9344f..70b9817b7f38f 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -18,7 +18,7 @@ pub fn deserialize_argument(argument: &Vec) -> pub fn multi_miller_loop_generic( a_vec: Vec>, b_vec: Vec>, -) -> Vec { +) -> Result, PairingError> { let g1: Vec<_> = a_vec .iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) @@ -30,16 +30,20 @@ pub fn multi_miller_loop_generic( let result = Curve::multi_miller_loop(g1, g2); - serialize_result(Ok(result)) + Ok(serialize_result(result)) } -pub fn final_exponentiation_generic(target: Vec) -> Vec { +pub fn final_exponentiation_generic( + target: Vec, +) -> Result, PairingError> { let target = deserialize_argument::<::TargetField>(&target); - let result = - Curve::final_exponentiation(MillerLoopOutput(target)).ok_or(PairingError::FinalExpInverse); + let result = Curve::final_exponentiation(MillerLoopOutput(target)); - serialize_result(result) + match result { + Some(result) => Ok(serialize_result(result)), + None => Err(PairingError::FinalExpInverse), + } } pub fn msm_g1_generic(bases: Vec>, scalars: Vec>) -> Vec { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 937ed6cd42c04..ecb61accfdd93 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -81,6 +81,9 @@ mod batch_verifier; #[cfg(feature = "std")] use batch_verifier::BatchVerifier; +#[cfg(feature = "std")] +use sp_arkworks::PairingError; + pub use sp_externalities::MultiRemovalResults; #[cfg(feature = "std")] @@ -1126,12 +1129,15 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_381_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Vec { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1146,12 +1152,15 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_377_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Vec { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1166,12 +1175,15 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bw6_761_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Vec { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From c4b2f040dd82c9ef0e53a4f84313f31cb5034a1e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Mar 2023 19:14:11 +0100 Subject: [PATCH 213/364] proper error handling --- primitives/arkworks/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 70b9817b7f38f..eead7803d2923 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -30,7 +30,7 @@ pub fn multi_miller_loop_generic( let result = Curve::multi_miller_loop(g1, g2); - Ok(serialize_result(result)) + Ok(serialize_result(result.0)) } pub fn final_exponentiation_generic( From 2160e9324f72e62f1e4597baae71abe8d5912821 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 15 Mar 2023 21:03:41 +0100 Subject: [PATCH 214/364] proper error handling --- primitives/arkworks/src/bls12_377.rs | 11 +++++++---- primitives/arkworks/src/bls12_381.rs | 11 +++++++---- primitives/arkworks/src/bw6_761.rs | 11 +++++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 4f838744acc97..cf5b380fb34a1 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,20 +19,23 @@ #![warn(missing_docs)] -use crate::utils::{ - final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, +use crate::{ + utils::{ + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, + }, + PairingError, }; use ark_bls12_377::Bls12_377; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { final_exponentiation_generic::(target) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index f6527fbe06552..10ef613fee115 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,19 +19,22 @@ #![warn(missing_docs)] -use crate::utils::{ - final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, +use crate::{ + utils::{ + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, + }, + PairingError, }; use ark_bls12_381::Bls12_381; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { final_exponentiation_generic::(target) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 15668e0c48d3a..9a3330cfe7443 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,19 +19,22 @@ #![warn(missing_docs)] -use crate::utils::{ - final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, +use crate::{ + utils::{ + final_exponentiation_generic, msm_g1_generic, msm_g2_generic, multi_miller_loop_generic, + }, + PairingError, }; use ark_bw6_761::BW6_761; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Vec { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { final_exponentiation_generic::(target) } From 7c183e971e3b56c6b08304119b934cbb0dd90a24 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 16 Mar 2023 07:54:34 +0100 Subject: [PATCH 215/364] derive Debug for PairingError --- primitives/arkworks/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 8281369a58eaa..32a81fb762ab3 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -9,7 +9,7 @@ pub mod ed_on_bls12_381; mod utils; /// Error computing an elliptic curve pairing -#[derive(Encode, Decode)] +#[derive(Encode, Decode, Debug)] pub enum PairingError { InternalPanic, FinalExpInverse, From 86dd3fd3b3dd1bdc72b703391b289f76976aaa9c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 16 Mar 2023 12:56:42 +0100 Subject: [PATCH 216/364] sp-arkworks path --- Cargo.lock | 209 ++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 4 + 2 files changed, 131 insertions(+), 82 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a4501d9519b1..27e6a73d61c18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,6 +203,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstyle" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80c697cc33851b02ab0c26b2e8a211684fbe627ff1cc506131f35026dd7686dd" + [[package]] name = "anyhow" version = "1.0.69" @@ -220,9 +226,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.2.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" [[package]] name = "arc-swap" @@ -543,13 +549,14 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.8" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +checksum = "c0dcbed38184f9219183fcf38beb4cdbf5df7163a6d7cd227c6ac89b7966d6fe" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -1009,7 +1016,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -1112,9 +1119,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -1664,9 +1671,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ "cfg-if", "fiat-crypto", @@ -3951,18 +3958,16 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", "multiaddr 0.17.0", "multihash 0.17.0", @@ -3970,17 +3975,13 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] @@ -4018,6 +4019,25 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", + "prost", + "prost-build", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" version = "0.42.1" @@ -4227,13 +4247,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.0", + "libp2p-core 0.39.1", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4727,7 +4748,7 @@ dependencies = [ "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] @@ -7461,17 +7482,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -7491,9 +7524,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", "syn", @@ -7548,9 +7581,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -7674,6 +7707,15 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -7714,9 +7756,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -8100,7 +8142,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -9830,9 +9872,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -9845,18 +9887,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.155" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.155" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", @@ -10026,14 +10068,14 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version 0.4.0", @@ -10172,7 +10214,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10181,12 +10223,13 @@ dependencies = [ "ark-std", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", + "sp-arkworks", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10195,12 +10238,13 @@ dependencies = [ "ark-std", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", + "sp-arkworks", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10208,12 +10252,13 @@ dependencies = [ "ark-std", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", + "sp-arkworks", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10227,7 +10272,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10258,7 +10303,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-ec", "ark-ff", @@ -10274,7 +10319,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#c15fb56b6957e24b848430b1a3d9f5f50ba4c317" +source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" dependencies = [ "ark-serialize", "ark-std", @@ -11046,9 +11091,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" [[package]] name = "spki" @@ -11533,9 +11578,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "textwrap" @@ -12485,7 +12530,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.5", + "spin 0.9.6", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -13079,12 +13124,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -13098,24 +13143,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -13125,9 +13170,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -13137,9 +13182,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -13149,9 +13194,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -13161,15 +13206,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -13179,9 +13224,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winreg" diff --git a/Cargo.toml b/Cargo.toml index 949882b5f402f..2ee43a8605014 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,3 +329,7 @@ lto = "fat" # https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units codegen-units = 1 +[patch.crates-io] +sp-arkworks = { path = "primitives/arkworks" } + + From 4807505cdb20cd4b509b9fe327f38128695466cd Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 07:58:28 +0100 Subject: [PATCH 217/364] cargo update --- Cargo.lock | 88 +++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 09dd327699b32..b9056a894c1b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,9 +205,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c697cc33851b02ab0c26b2e8a211684fbe627ff1cc506131f35026dd7686dd" +checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" [[package]] name = "anyhow" @@ -549,9 +549,9 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.9" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0dcbed38184f9219183fcf38beb4cdbf5df7163a6d7cd227c6ac89b7966d6fe" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ "anstyle", "bstr", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.8", + "clap 4.1.9", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,13 +1234,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.2", + "clap_lex 0.3.3", "is-terminal", "once_cell", "strsim", @@ -1249,18 +1249,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", ] [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck", "proc-macro-error", @@ -1280,9 +1280,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] @@ -2301,9 +2301,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.9", "comfy-table", "frame-benchmarking", "frame-support", @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -3481,10 +3481,11 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "76e86b86ae312accbf05ade23ce76b625e0e47a255712b7414037385a1c05380" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -3520,7 +3521,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.6", + "io-lifetimes 1.0.7", "rustix 0.36.9", "windows-sys 0.45.0", ] @@ -5026,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.8", + "clap 4.1.9", "derive_more", "fs_extra", "futures", @@ -5063,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.8", + "clap 4.1.9", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5184,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5243,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "generate-bags", "kitchensink-runtime", ] @@ -5252,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -8194,7 +8195,7 @@ checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.6", + "io-lifetimes 1.0.7", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8422,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.9", "fdlimit", "futures", "futures-timer", @@ -9536,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "fs4", "futures", "log", @@ -10242,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10257,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10272,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10286,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10300,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10331,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ec", "ark-ff", @@ -10347,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ee4cb0a27e1f8e4d40df1dc62a4e5454c7423e2b" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-serialize", "ark-std", @@ -10762,7 +10763,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11239,7 +11240,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "sc-cli", ] @@ -11267,7 +11268,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.9", "frame-support", "frame-system", "sc-cli", @@ -12105,7 +12106,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.8", + "clap 4.1.9", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12355,12 +12356,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] From 1e6c1788acb2228bc478ba052f9486c0006e3231 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 09:12:58 +0100 Subject: [PATCH 218/364] adopt tests to error handling --- Cargo.lock | 1 + primitives/arkworks/test/Cargo.toml | 2 ++ primitives/arkworks/test/tests/bls12_377.rs | 8 ++++++-- primitives/arkworks/test/tests/bls12_381/mod.rs | 6 ++++-- primitives/arkworks/test/tests/bw6_761.rs | 8 ++++++-- primitives/io/src/lib.rs | 15 ++++++--------- 6 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9056a894c1b3..beede84372873 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10386,6 +10386,7 @@ dependencies = [ "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381", "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-arkworks", "sp-io", ] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index af057754ff9b0..468cfd6011eef 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -18,6 +18,7 @@ sp-ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] sp-io = { version = "7.0.0", path = "../../io", default-features = false } +sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } @@ -41,6 +42,7 @@ std = [ "sp-ark-bw6-761/std", "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381/std", + "sp-arkworks/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 8c85f14e83dcc..9926767bafc05 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -1,14 +1,18 @@ use ark_algebra_test_templates::*; use ark_std::vec::Vec; use sp_ark_bls12_377::HostFunctions; +use sp_arkworks::PairingError; pub struct Host {} impl HostFunctions for Host { - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_377_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } - fn bls12_377_final_exponentiation(f12: Vec) -> Vec { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index ae0860ee8682b..1dacfb7b312ee 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,9 +1,11 @@ +use sp_arkworks::PairingError; use ark_algebra_test_templates::*; use ark_ff::{fields::Field, UniformRand, Zero}; use sp_ark_models::{AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec, vec::Vec, One}; + use sp_ark_bls12_381::{ Fq, Fq2, Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, @@ -12,10 +14,10 @@ use sp_ark_bls12_381::{ pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } - fn bls12_381_final_exponentiation(f12: Vec) -> Vec { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 039c4e7028ec0..7ff9d4ee0f8ef 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -1,15 +1,19 @@ use ark_algebra_test_templates::*; use ark_std::vec::Vec; use sp_ark_bw6_761::HostFunctions; +use sp_arkworks::PairingError; #[derive(PartialEq, Eq)] pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bw6_761_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } - fn bw6_761_final_exponentiation(f12: Vec) -> Vec { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index ecb61accfdd93..13a519cc85d96 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -81,9 +81,6 @@ mod batch_verifier; #[cfg(feature = "std")] use batch_verifier::BatchVerifier; -#[cfg(feature = "std")] -use sp_arkworks::PairingError; - pub use sp_externalities::MultiRemovalResults; #[cfg(feature = "std")] @@ -1132,12 +1129,12 @@ pub trait EllipticCurves { fn bls12_381_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1155,12 +1152,12 @@ pub trait EllipticCurves { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1178,12 +1175,12 @@ pub trait EllipticCurves { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From b69de4d790ad289e6112a359d87f8bd8ab854269 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 10:07:14 +0100 Subject: [PATCH 219/364] fix tests --- primitives/io/Cargo.toml | 2 +- primitives/io/src/lib.rs | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index e459c0b2c87e2..dd0d7966ccea4 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -26,7 +26,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-arkworks = { version = "0.4.0", default-features = false, optional = true, path = "../arkworks" } +sp-arkworks = { version = "0.4.0", default-features = false, path = "../arkworks" } log = { version = "0.4.17", default-features = false, optional = true } futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 13a519cc85d96..e3c57f13fe247 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -83,6 +83,8 @@ use batch_verifier::BatchVerifier; pub use sp_externalities::MultiRemovalResults; +use sp_arkworks::PairingError; + #[cfg(feature = "std")] const LOG_TARGET: &str = "runtime::io"; @@ -1129,12 +1131,12 @@ pub trait EllipticCurves { fn bls12_381_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1152,12 +1154,12 @@ pub trait EllipticCurves { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1175,12 +1177,12 @@ pub trait EllipticCurves { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From 4e49a4fc89fdcab2267d3ed3300791219010beda Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 10:20:57 +0100 Subject: [PATCH 220/364] cargo update --- Cargo.lock | 14 +++++++------- test_results.txt | 0 2 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 test_results.txt diff --git a/Cargo.lock b/Cargo.lock index beede84372873..4a3b367bd4927 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" dependencies = [ "ark-serialize", "ark-std", diff --git a/test_results.txt b/test_results.txt new file mode 100644 index 0000000000000..e69de29bb2d1d From 6bd1338db1b5f7b1fa711e5fbd6761745b77e43c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 10:21:36 +0100 Subject: [PATCH 221/364] remove results --- test_results.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test_results.txt diff --git a/test_results.txt b/test_results.txt deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 08c9521ea0573aa8d4343aeb2f31e3a68a432a33 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 11:19:49 +0100 Subject: [PATCH 222/364] deserialize as G2Affine --- primitives/arkworks/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index eead7803d2923..83873668036df 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -25,7 +25,7 @@ pub fn multi_miller_loop_generic( .collect(); let g2: Vec<_> = b_vec .iter() - .map(|elem| deserialize_argument::<::G2Prepared>(elem)) + .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); let result = Curve::multi_miller_loop(g1, g2); From 6e49a08eb5964adbe62a76e07b8a6411b4a45921 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 17 Mar 2023 12:06:22 +0100 Subject: [PATCH 223/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a3b367bd4927..7f7c44cf36c64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#d184e4e821cd4832293a67d009db61b550cb48f5" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-serialize", "ark-std", From ab35a7a26946a3c01ad1b0ce073264a57c7c4422 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 08:15:46 +0100 Subject: [PATCH 224/364] add codex index to PairingError --- Cargo.lock | 243 +++++++++++++++++---------------- primitives/arkworks/src/lib.rs | 3 + 2 files changed, 130 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f7c44cf36c64..85d3ace0aefab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,15 +205,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -359,7 +359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -372,7 +372,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -437,7 +437,7 @@ checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -514,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -526,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -538,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -627,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -784,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -924,9 +924,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.9", + "clap 4.1.10", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,9 +1234,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.9" +version = "4.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" +checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" dependencies = [ "bitflags", "clap_derive", @@ -1253,7 +1253,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", ] [[package]] @@ -1266,7 +1266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1622,7 +1622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1685,9 +1685,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1697,9 +1697,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1707,24 +1707,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.0", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -1748,7 +1748,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1759,7 +1759,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1785,7 +1785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -1835,7 +1835,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1846,7 +1846,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1867,7 +1867,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -1888,7 +1888,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2032,7 +2032,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2127,7 +2127,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2147,7 +2147,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2228,7 +2228,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "comfy-table", "frame-benchmarking", "frame-support", @@ -2481,7 +2481,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn", + "syn 1.0.109", "trybuild", ] @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2618,7 +2618,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2638,7 +2638,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2852,7 +2852,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3407,7 +3407,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3632,7 +3632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4246,7 +4246,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4780,7 +4780,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4870,7 +4870,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4918,7 +4918,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5027,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.9", + "clap 4.1.10", "derive_more", "fs_extra", "futures", @@ -5064,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.9", + "clap 4.1.10", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5966,7 +5966,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -6851,7 +6851,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn", + "syn 1.0.109", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7312,7 +7312,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7353,7 +7353,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7548,7 +7548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -7583,7 +7583,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7641,7 +7641,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7671,7 +7671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] @@ -7699,7 +7699,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7953,22 +7953,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -8414,7 +8414,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -8423,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "fdlimit", "futures", "futures-timer", @@ -9537,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "fs4", "futures", "log", @@ -9641,7 +9641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9730,7 +9730,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9914,22 +9914,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -10165,7 +10165,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10621,7 +10621,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -10638,7 +10638,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10764,7 +10764,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10859,7 +10859,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11083,7 +11083,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn", + "syn 1.0.109", ] [[package]] @@ -11187,7 +11187,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11215,7 +11215,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -11241,7 +11241,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "sc-cli", ] @@ -11269,7 +11269,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-support", "frame-system", "sc-cli", @@ -11485,7 +11485,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11539,6 +11539,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -11547,7 +11558,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -11620,22 +11631,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -11792,7 +11803,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11917,7 +11928,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12020,9 +12031,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12107,7 +12118,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.9", + "clap 4.1.10", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12218,9 +12229,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -12414,7 +12425,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -12448,7 +12459,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13380,7 +13391,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 32a81fb762ab3..0dd51982acbeb 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -11,7 +11,10 @@ mod utils; /// Error computing an elliptic curve pairing #[derive(Encode, Decode, Debug)] pub enum PairingError { + #[codec(index = 1)] InternalPanic, + #[codec(index = 2)] FinalExpInverse, + #[codec(index = 3)] MillerLoopCofactor, } From 4389714068d939abc97288c5b06ee23d399a19ad Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 15:49:15 +0100 Subject: [PATCH 225/364] replace Vec> --- primitives/arkworks/src/bls12_377.rs | 6 ++-- primitives/arkworks/src/bls12_381.rs | 6 ++-- primitives/arkworks/src/bw6_761.rs | 6 ++-- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 4 +-- primitives/arkworks/src/utils.rs | 12 +++++--- primitives/arkworks/test/tests/bls12_377.rs | 9 ++---- .../arkworks/test/tests/bls12_381/mod.rs | 6 ++-- primitives/arkworks/test/tests/bw6_761.rs | 9 ++---- .../arkworks/test/tests/ed_on_bls12_377.rs | 2 +- .../arkworks/test/tests/ed_on_bls12_381.rs | 4 +-- primitives/io/src/lib.rs | 29 +++++++------------ 12 files changed, 42 insertions(+), 53 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index cf5b380fb34a1..636e281c5c744 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -30,7 +30,7 @@ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -40,11 +40,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 10ef613fee115..0852f269f4f49 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -29,7 +29,7 @@ use ark_bls12_381::Bls12_381; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -39,11 +39,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 9a3330cfe7443..1de24dd45eb7f 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -29,7 +29,7 @@ use ark_bw6_761::BW6_761; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -39,11 +39,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 2a6797ab751bf..242006b305666 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -25,7 +25,7 @@ use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 745123a9c854d..a13c55731a926 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -28,7 +28,7 @@ use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks -pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { +pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) @@ -44,7 +44,7 @@ pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { +pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 83873668036df..0e3609a9f567d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -16,14 +16,16 @@ pub fn deserialize_argument(argument: &Vec) -> } pub fn multi_miller_loop_generic( - a_vec: Vec>, - b_vec: Vec>, + a_vec: Vec, + b_vec: Vec, ) -> Result, PairingError> { let g1: Vec<_> = a_vec + .chunks(::G1Affine.serialized_size(Compress::No)) .iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec + .chunks(::G2Affine.serialized_size(Compress::No)) .iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -46,8 +48,9 @@ pub fn final_exponentiation_generic( } } -pub fn msm_g1_generic(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases + .chunks(::G1Affine.serialized_size(Compress::No)) .iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); @@ -60,8 +63,9 @@ pub fn msm_g1_generic(bases: Vec>, scalars: Vec> serialize_result(result) } -pub fn msm_g2_generic(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases + .chunks(::G2Affine.serialized_size(Compress::No)) .iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 9926767bafc05..5907f96827cb8 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -6,19 +6,16 @@ use sp_arkworks::PairingError; pub struct Host {} impl HostFunctions for Host { - fn bls12_377_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, PairingError> { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } - fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) } - fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 1dacfb7b312ee..fd3cdd80bc128 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -14,16 +14,16 @@ use sp_ark_bls12_381::{ pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, PairingError> { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec ) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } - fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) } - fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 7ff9d4ee0f8ef..758084fa143cf 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -7,19 +7,16 @@ use sp_arkworks::PairingError; pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, PairingError> { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } - fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) } - fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Vec { sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 8b4a4d3d13784..1ac6e1728df30 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -5,7 +5,7 @@ use sp_ark_ed_on_bls12_377::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Vec { sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index a3bd0b5a82847..8dd9385860535 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,10 +5,10 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Vec { sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) } - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Vec { sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) } } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index e3c57f13fe247..918b40f12c1b5 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1128,10 +1128,7 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, PairingError> { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } @@ -1141,20 +1138,17 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bls12_381 - fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 - fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, PairingError> { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } @@ -1174,10 +1168,7 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, PairingError> { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } @@ -1187,27 +1178,27 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bw6_761 - fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Vec { sp_arkworks::bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 - fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Vec { sp_arkworks::bw6_761::msm_g2(bases, bigints) } /// Compute twisted edwards msm on ed_on_bls12_381 - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) } /// Compute short weierstrass msm on ed_on_bls12_381 - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } /// Compute msm on ed_on_bls12_377 - fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::ed_on_bls12_377::msm(bases, scalars) } } From 4d3b13c02a9db0ea6bd130bda38c851f2371ec6e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 15:53:40 +0100 Subject: [PATCH 226/364] replace Vec> --- Cargo.lock | 46 ++++++++++++++++++++-------------------- primitives/io/src/lib.rs | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85d3ace0aefab..3423c0ca55976 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,9 +354,9 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", "syn 1.0.109", @@ -364,9 +364,9 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", @@ -377,9 +377,9 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,9 +431,9 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 918b40f12c1b5..d944428e1107d 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1158,12 +1158,12 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bls12_377 - fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 - fn bls12_377_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Vec { sp_arkworks::bls12_377::msm_g2(bases, scalars) } From 1ddd6b89c2f8fb4e6dd26768be0edaca2d1be3f9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 16:04:48 +0100 Subject: [PATCH 227/364] use into_iter for chunks --- primitives/arkworks/src/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 0e3609a9f567d..e982f11ae24ce 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -21,12 +21,12 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine.serialized_size(Compress::No)) - .iter() + .into_iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine.serialized_size(Compress::No)) - .iter() + .into_iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -51,7 +51,7 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine.serialized_size(Compress::No)) - .iter() + .into_iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = @@ -66,7 +66,7 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine.serialized_size(Compress::No)) - .iter() + .into_iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = From 67987ae0bbba7e3963ccba0dd9f1fbaa4c922d4f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 16:40:26 +0100 Subject: [PATCH 228/364] use chunks for scalars --- Cargo.lock | 18 +++++++++--------- primitives/arkworks/src/utils.rs | 14 ++++++++++---- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3423c0ca55976..0cfd8e79ee908 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e982f11ae24ce..5dfe7e1ec9036 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -54,8 +54,11 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec::G1Affine>(a)) .collect(); - let scalars: Vec<_> = - scalars.iter().map(|a| deserialize_argument::(a)).collect(); + let scalars: Vec<_> = scalars + .chunks(Curve::ScalarField.serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::(a)) + .collect(); let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); @@ -69,8 +72,11 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec::G2Affine>(a)) .collect(); - let scalars: Vec<_> = - scalars.iter().map(|a| deserialize_argument::(a)).collect(); + let scalars: Vec<_> = scalars + .chunks(Curve::ScalarField.serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::(a)) + .collect(); let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); From c6a760986551cbbcaa3748564dd5e3c7630209c6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 16:59:56 +0100 Subject: [PATCH 229/364] fix ersialized_size --- Cargo.lock | 293 +++++++++++++++---------------- primitives/arkworks/src/utils.rs | 18 +- 2 files changed, 152 insertions(+), 159 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cfd8e79ee908..beede84372873 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,15 +205,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" +checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,32 +354,32 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "ark-ff-macros" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "ark-poly" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,13 +431,13 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -514,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -526,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -538,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -627,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "async-trait" -version = "0.1.67" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -784,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn", ] [[package]] @@ -924,9 +924,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.10", + "clap 4.1.9", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,9 +1234,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.10" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" +checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" dependencies = [ "bitflags", "clap_derive", @@ -1253,7 +1253,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", ] [[package]] @@ -1266,7 +1266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1622,7 +1622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1685,9 +1685,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1697,9 +1697,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1707,24 +1707,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.0", + "syn", ] [[package]] name = "cxxbridge-flags" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -1748,7 +1748,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn", ] [[package]] @@ -1759,7 +1759,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1785,7 +1785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn", ] [[package]] @@ -1835,7 +1835,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1846,7 +1846,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1867,7 +1867,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn 1.0.109", + "syn", ] [[package]] @@ -1888,7 +1888,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2032,7 +2032,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2127,7 +2127,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2147,7 +2147,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2228,7 +2228,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.9", "comfy-table", "frame-benchmarking", "frame-support", @@ -2481,7 +2481,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 1.0.109", + "syn", "trybuild", ] @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2618,7 +2618,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2638,7 +2638,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2852,7 +2852,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3407,7 +3407,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -3632,7 +3632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4246,7 +4246,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4780,7 +4780,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4870,7 +4870,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -4918,7 +4918,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -5027,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.10", + "clap 4.1.9", "derive_more", "fs_extra", "futures", @@ -5064,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.10", + "clap 4.1.9", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5966,7 +5966,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -6851,7 +6851,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 1.0.109", + "syn", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7312,7 +7312,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7353,7 +7353,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7548,7 +7548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn", ] [[package]] @@ -7583,7 +7583,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "version_check", ] @@ -7641,7 +7641,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7671,7 +7671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 1.0.109", + "syn", "tempfile", "which", ] @@ -7699,7 +7699,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7953,22 +7953,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -8414,7 +8414,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -8423,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.9", "fdlimit", "futures", "futures-timer", @@ -9537,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "fs4", "futures", "log", @@ -9641,7 +9641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -9730,7 +9730,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -9914,22 +9914,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.157" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.157" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -10165,7 +10165,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-serialize", "ark-std", @@ -10621,7 +10621,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.109", + "syn", ] [[package]] @@ -10638,7 +10638,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10764,7 +10764,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10859,7 +10859,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11083,7 +11083,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 1.0.109", + "syn", ] [[package]] @@ -11187,7 +11187,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11215,7 +11215,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn", ] [[package]] @@ -11241,7 +11241,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "sc-cli", ] @@ -11269,7 +11269,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-support", "frame-system", "sc-cli", @@ -11485,7 +11485,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11539,17 +11539,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "synstructure" version = "0.12.6" @@ -11558,7 +11547,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "unicode-xid", ] @@ -11631,22 +11620,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -11803,7 +11792,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11928,7 +11917,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -12031,9 +12020,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" +checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12118,7 +12107,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.10", + "clap 4.1.9", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12229,9 +12218,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.12" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" @@ -12425,7 +12414,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-shared", ] @@ -12459,7 +12448,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13391,7 +13380,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5dfe7e1ec9036..5d15cdd1c831f 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,5 +1,9 @@ use crate::PairingError; -use ark_ec::pairing::{MillerLoopOutput, Pairing}; +use ark_ec::{ + pairing::{MillerLoopOutput, Pairing}, + Group, +}; +use ark_ff::Zero; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -20,12 +24,12 @@ pub fn multi_miller_loop_generic( b_vec: Vec, ) -> Result, PairingError> { let g1: Vec<_> = a_vec - .chunks(::G1Affine.serialized_size(Compress::No)) + .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec - .chunks(::G2Affine.serialized_size(Compress::No)) + .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -50,12 +54,12 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(::G1Affine.serialized_size(Compress::No)) + .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField.serialized_size(Compress::No)) + .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::(a)) .collect(); @@ -68,12 +72,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(::G2Affine.serialized_size(Compress::No)) + .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField.serialized_size(Compress::No)) + .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::(a)) .collect(); From 344cfffbd38fde130225df35f36259872754bd3a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:06:12 +0100 Subject: [PATCH 230/364] use into --- primitives/arkworks/src/utils.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5d15cdd1c831f..5d78b831979e8 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,12 +26,12 @@ pub fn multi_miller_loop_generic( let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) + .map(|elem| deserialize_argument::<::G1Affine>(elem.into())) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem)) + .map(|elem| deserialize_argument::<::G2Affine>(elem.into())) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -56,12 +56,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) + .map(|a| deserialize_argument::<::G1Affine>(a.into())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a)) + .map(|a| deserialize_argument::(a.into())) .collect(); let result = @@ -74,12 +74,12 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) + .map(|a| deserialize_argument::<::G2Affine>(a.into())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a)) + .map(|a| deserialize_argument::(a.into())) .collect(); let result = From 9167d5984d8ecc3903d24f96d8c9fcac45c87bf7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:10:47 +0100 Subject: [PATCH 231/364] collect as vec --- primitives/arkworks/src/utils.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5d78b831979e8..4d0376992d263 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,12 +26,12 @@ pub fn multi_miller_loop_generic( let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem.into())) + .map(|elem| deserialize_argument::<::G1Affine>(elem.collect::>())) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem.into())) + .map(|elem| deserialize_argument::<::G2Affine>(elem.collect::>())) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -56,12 +56,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(a.into())) + .map(|a| deserialize_argument::<::G1Affine>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.into())) + .map(|a| deserialize_argument::(a.collect::>())) .collect(); let result = @@ -74,12 +74,12 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(a.into())) + .map(|a| deserialize_argument::<::G2Affine>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.into())) + .map(|a| deserialize_argument::(a.collect::>())) .collect(); let result = From dd3f809e965cec361a0feaab9abfae7115756e2c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:22:43 +0100 Subject: [PATCH 232/364] collect as vec --- primitives/arkworks/src/ed_on_bls12_377.rs | 20 ++++++++++---- primitives/arkworks/src/ed_on_bls12_381.rs | 32 ++++++++++++++++------ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 242006b305666..42510db851bec 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,19 +20,29 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; +use ark_ff::Zero; +use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) + .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) + .into_iter() + .map(|a| { + deserialize_argument::>(a.collect::>()) + }) .collect(); let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index a13c55731a926..8decc6ec37eb1 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,20 +22,28 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, Group, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; +use ark_ff::Zero; +use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) + .chunks(TEAffine::::generator().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -46,12 +54,18 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) + .chunks(SWAffine::::genrator().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); From db18dcac34fc3c3ddc20c3b42331f8d5fa7014b5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:27:53 +0100 Subject: [PATCH 233/364] no collect Vec --- primitives/arkworks/src/ed_on_bls12_377.rs | 14 ++++--------- primitives/arkworks/src/ed_on_bls12_381.rs | 24 ++++++++-------------- primitives/arkworks/src/utils.rs | 24 +++++++++++----------- 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 42510db851bec..82443b21a5b73 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,19 +30,13 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::>(a.collect::>()) - }) + .into() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .into() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 8decc6ec37eb1..3634099892bad 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -33,17 +33,13 @@ use sp_std::vec::Vec; pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -55,17 +51,13 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(SWAffine::::genrator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 4d0376992d263..df03f7318deb6 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -25,13 +25,13 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem.collect::>())) + .iter() + .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem.collect::>())) + .iter() + .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -55,13 +55,13 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(a.collect::>())) + .iter() + .map(|a| deserialize_argument::(a)) .collect(); let result = @@ -73,13 +73,13 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(a.collect::>())) + .iter() + .map(|a| deserialize_argument::(a)) .collect(); let result = From 2e31d912bd4103529b40b250410f9f5b1a980ce4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:40:23 +0100 Subject: [PATCH 234/364] use into_iter --- primitives/arkworks/src/ed_on_bls12_377.rs | 8 ++++---- primitives/arkworks/src/ed_on_bls12_381.rs | 16 +++++++-------- primitives/arkworks/src/utils.rs | 24 +++++++++++----------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 82443b21a5b73..e4dd4ea2cb229 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,13 +30,13 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 3634099892bad..5ffc6ab858aba 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -33,13 +33,13 @@ use sp_std::vec::Vec; pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -51,13 +51,13 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(SWAffine::::genrator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index df03f7318deb6..2e48fa6b7133b 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -25,13 +25,13 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) + .into_iter() + .map(|elem| deserialize_argument::<::G1Affine>(&elem.to_vec())) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem)) + .into_iter() + .map(|elem| deserialize_argument::<::G2Affine>(&elem.to_vec())) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -55,13 +55,13 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) + .into_iter() + .map(|a| deserialize_argument::<::G1Affine>(&a.to_vec())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::(a)) + .into_iter() + .map(|a| deserialize_argument::(&a.to_vec())) .collect(); let result = @@ -73,13 +73,13 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) + .into_iter() + .map(|a| deserialize_argument::<::G2Affine>(&a.to_vec())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::(a)) + .into_iter() + .map(|a| deserialize_argument::(&a.to_vec())) .collect(); let result = From 5a103ac1b3506736181ddda040d896930bd8f83a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:43:14 +0100 Subject: [PATCH 235/364] import AffineRepr --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- primitives/arkworks/src/utils.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index e4dd4ea2cb229..8f03966fefe83 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, Group, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; use ark_serialize::{CanonicalSerialize, Compress}; diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 5ffc6ab858aba..c18da7c3d3b10 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,7 +22,7 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, Group, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use ark_ff::Zero; diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 2e48fa6b7133b..e24c335b51ca5 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,7 +1,7 @@ use crate::PairingError; use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, - Group, + AffineRepr, Group, }; use ark_ff::Zero; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; From c89e96331f1d07e3b9b6a00ea9c89896553d67c6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 17:46:33 +0100 Subject: [PATCH 236/364] fix typo --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c18da7c3d3b10..a94d5e8a3319f 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -50,7 +50,7 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(SWAffine::::genrator().serialized_size(Compress::No)) + .chunks(SWAffine::::generator().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::>(&a.to_vec())) .collect(); From 15898da94677a5f19290a7f15fb15cb4cbd8f431 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 18 Mar 2023 18:11:11 +0100 Subject: [PATCH 237/364] cargo update --- Cargo.lock | 293 +++++++++++++++++++++++++++-------------------------- 1 file changed, 152 insertions(+), 141 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index beede84372873..47fdf3efbffeb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,15 +205,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,32 +354,32 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-ff-macros" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,13 +431,13 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -514,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -526,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -538,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -627,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -784,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -924,9 +924,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.9", + "clap 4.1.10", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,9 +1234,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.9" +version = "4.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" +checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" dependencies = [ "bitflags", "clap_derive", @@ -1253,7 +1253,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", ] [[package]] @@ -1266,7 +1266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1622,7 +1622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1685,9 +1685,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1697,9 +1697,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1707,24 +1707,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.0", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -1748,7 +1748,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1759,7 +1759,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1785,7 +1785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -1835,7 +1835,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1846,7 +1846,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1867,7 +1867,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -1888,7 +1888,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2032,7 +2032,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2127,7 +2127,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2147,7 +2147,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2228,7 +2228,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "comfy-table", "frame-benchmarking", "frame-support", @@ -2481,7 +2481,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn", + "syn 1.0.109", "trybuild", ] @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2618,7 +2618,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2638,7 +2638,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2852,7 +2852,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3407,7 +3407,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -3632,7 +3632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4246,7 +4246,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4780,7 +4780,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4870,7 +4870,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4918,7 +4918,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5027,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.9", + "clap 4.1.10", "derive_more", "fs_extra", "futures", @@ -5064,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.9", + "clap 4.1.10", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5966,7 +5966,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -6851,7 +6851,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn", + "syn 1.0.109", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7312,7 +7312,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7353,7 +7353,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7548,7 +7548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -7583,7 +7583,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7641,7 +7641,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7671,7 +7671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] @@ -7699,7 +7699,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7953,22 +7953,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -8414,7 +8414,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -8423,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "fdlimit", "futures", "futures-timer", @@ -9537,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "fs4", "futures", "log", @@ -9641,7 +9641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9730,7 +9730,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9914,22 +9914,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -10165,7 +10165,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" dependencies = [ "ark-serialize", "ark-std", @@ -10621,7 +10621,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -10638,7 +10638,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10764,7 +10764,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10859,7 +10859,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11083,7 +11083,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn", + "syn 1.0.109", ] [[package]] @@ -11187,7 +11187,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11215,7 +11215,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -11241,7 +11241,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "sc-cli", ] @@ -11269,7 +11269,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-support", "frame-system", "sc-cli", @@ -11485,7 +11485,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11539,6 +11539,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -11547,7 +11558,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -11620,22 +11631,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -11792,7 +11803,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11917,7 +11928,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12020,9 +12031,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12107,7 +12118,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.9", + "clap 4.1.10", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12218,9 +12229,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -12414,7 +12425,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -12448,7 +12459,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13380,7 +13391,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] From e56a088be7612e4511382817afaf61f65b0c3aca Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 12:45:28 +0100 Subject: [PATCH 238/364] new serialization --- primitives/arkworks/src/ed_on_bls12_377.rs | 15 ++---- primitives/arkworks/src/ed_on_bls12_381.rs | 28 +++--------- primitives/arkworks/src/utils.rs | 53 +++++++++++++++++----- 3 files changed, 53 insertions(+), 43 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 8f03966fefe83..9d3b0ca9ba5d6 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; @@ -28,16 +28,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = bases - .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) - .collect(); - let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) - .collect(); + let bases: Vec<_> = serialize_iter_to_Vec::>(bases); + let scalars: Vec<_> = + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index a94d5e8a3319f..5503e9b3552fb 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, @@ -31,16 +31,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = bases - .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) - .collect(); - let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) - .collect(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let scalars: Vec<_> = + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); @@ -49,16 +42,9 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = bases - .chunks(SWAffine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) - .collect(); - let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) - .collect(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let scalars: Vec<_> = + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e24c335b51ca5..6b9b88cfdb89d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -4,7 +4,9 @@ use ark_ec::{ AffineRepr, Group, }; use ark_ff::Zero; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use ark_serialize::{ + CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Validate, +}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { @@ -19,20 +21,49 @@ pub fn deserialize_argument(argument: &Vec) -> Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } +pub fn serialize_iter_to_vec( + iter: impl IntoIterator, +) -> Result, SerializationError> +where + T: CanonicalSerialize + Sized + Zero, +{ + let iter = iter.into_iter(); + let element_size = T::zero().uncompressed_size(); + let length: usize = + iter.size_hint().0.try_into().map_err(|_| SerializationError::InvalidData)?; + let mut w = Cursor::new(Vec::with_capacity(8 + element_size * length)); + length.serialize_uncompressed(&mut w)?; + let mut length = 0u32; + for elem in iter { + elem.serialize_uncompressed(&mut w)?; + length += 1; + } + let result = w.into_inner(); + // elem.serialize_uncompressed::<&mut &mut T>(&mut result.as_mut())?; + Ok(result) +} + +pub fn deserialize_iter_to_vec(mut bytes: &[u8]) -> Result, SerializationError> +where + T: CanonicalDeserialize + Sized, +{ + let cursor = Cursor::new(bytes.to_vec()); + let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; + let mut result = Vec::with_capacity(length as usize); + for _ in 0..length { + result.push(T::deserialize_uncompressed_unchecked(cursor.clone())?); + } + Ok(result) +} + pub fn multi_miller_loop_generic( a_vec: Vec, b_vec: Vec, ) -> Result, PairingError> { - let g1: Vec<_> = a_vec - .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(&elem.to_vec())) - .collect(); - let g2: Vec<_> = b_vec - .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(&elem.to_vec())) - .collect(); + let g1: Vec<_> = deserialize_iter_to_vec::<::G1Affine>(&a_vec) + .map_err(|_| PairingError::InternalPanic)?; + let g2: Vec<_> = deserialize_iter_to_vec::<::G2Affine>(&b_vec) + .map_err(|_| PairingError::InternalPanic)?; let result = Curve::multi_miller_loop(g1, g2); From c12045d78f2468800be30ee1b31b12768aa7a786 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 12:49:26 +0100 Subject: [PATCH 239/364] fix typo --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 9d3b0ca9ba5d6..4074131586253 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -28,7 +28,7 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_Vec::>(bases); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = serialize_iter_to_vec::<::ScalarField>(scalars); From de3cfbd04964dd66faeae5616b5763b1d30520e2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 12:51:52 +0100 Subject: [PATCH 240/364] unwrap results --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 4074131586253..b35688c5eeebc 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,7 +30,7 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 5503e9b3552fb..c3df09faacef8 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -31,9 +31,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); @@ -44,7 +44,7 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); From b0df1e1bdbd2518baa23040e0c6663ca69d2ba25 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 12:53:59 +0100 Subject: [PATCH 241/364] unwrap results --- primitives/arkworks/src/ed_on_bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c3df09faacef8..9f35380bed21f 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -42,11 +42,11 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); let scalars: Vec<_> = serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); - let result = ::msm(&bases, &scalars).unwrap(); + let result = ::msm(&bases, &scalars[..]).unwrap(); serialize_result(result) } From 9eacba93150bd41614e198cc6f2838d57d14f8db Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 12:58:15 +0100 Subject: [PATCH 242/364] use correct deserialization --- primitives/arkworks/src/ed_on_bls12_377.rs | 7 ++++--- primitives/arkworks/src/ed_on_bls12_381.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index b35688c5eeebc..e6b499e72df95 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_iter_to_vec, serialize_result}; use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; @@ -28,9 +28,10 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let bases: Vec<_> = + deserialize_iter_to_vec::>(&bases).unwrap(); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 9f35380bed21f..470c8c0628257 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_iter_to_vec, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, @@ -31,9 +31,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); + let bases: Vec<_> = deserialize_iter_to_vec::>(&bases).unwrap(); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); @@ -42,11 +42,11 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); + let bases: Vec<_> = deserialize_iter_to_vec::>(&bases).unwrap(); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); - let result = ::msm(&bases, &scalars[..]).unwrap(); + let result = ::msm(&bases, &scalars).unwrap(); serialize_result(result) } From eef4c77ac99c0ed2e4b4857702e6ab5f1d2ce36c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 13:53:40 +0100 Subject: [PATCH 243/364] fix bugs, cleanup --- primitives/arkworks/src/ed_on_bls12_377.rs | 4 +-- primitives/arkworks/src/ed_on_bls12_381.rs | 4 +-- primitives/arkworks/src/utils.rs | 30 +++------------------- 3 files changed, 6 insertions(+), 32 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index e6b499e72df95..6f929b03ad9f0 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,10 +20,8 @@ #![warn(missing_docs)] use crate::utils::{deserialize_iter_to_vec, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; -use ark_ff::Zero; -use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 470c8c0628257..9d15e1c978107 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,11 +22,9 @@ use crate::utils::{deserialize_iter_to_vec, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; -use ark_ff::Zero; -use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 6b9b88cfdb89d..2e0c119a5e7b1 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,7 +1,7 @@ use crate::PairingError; use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, - AffineRepr, Group, + AffineRepr, }; use ark_ff::Zero; use ark_serialize::{ @@ -21,37 +21,15 @@ pub fn deserialize_argument(argument: &Vec) -> Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } -pub fn serialize_iter_to_vec( - iter: impl IntoIterator, -) -> Result, SerializationError> -where - T: CanonicalSerialize + Sized + Zero, -{ - let iter = iter.into_iter(); - let element_size = T::zero().uncompressed_size(); - let length: usize = - iter.size_hint().0.try_into().map_err(|_| SerializationError::InvalidData)?; - let mut w = Cursor::new(Vec::with_capacity(8 + element_size * length)); - length.serialize_uncompressed(&mut w)?; - let mut length = 0u32; - for elem in iter { - elem.serialize_uncompressed(&mut w)?; - length += 1; - } - let result = w.into_inner(); - // elem.serialize_uncompressed::<&mut &mut T>(&mut result.as_mut())?; - Ok(result) -} - -pub fn deserialize_iter_to_vec(mut bytes: &[u8]) -> Result, SerializationError> +pub fn deserialize_iter_to_vec(bytes: &[u8]) -> Result, SerializationError> where T: CanonicalDeserialize + Sized, { - let cursor = Cursor::new(bytes.to_vec()); + let mut cursor = Cursor::new(bytes.to_vec()); let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; let mut result = Vec::with_capacity(length as usize); for _ in 0..length { - result.push(T::deserialize_uncompressed_unchecked(cursor.clone())?); + result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); } Ok(result) } From b85de8606364260c310f3c306b0a920e184e7e53 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:12:33 +0100 Subject: [PATCH 244/364] correct len --- primitives/arkworks/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 2e0c119a5e7b1..962bcf13e6718 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,7 +26,7 @@ where T: CanonicalDeserialize + Sized, { let mut cursor = Cursor::new(bytes.to_vec()); - let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; + let length = bytes.len() / 8; let mut result = Vec::with_capacity(length as usize); for _ in 0..length { result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); From 2b1cd004f9f3f7cb1b0513c794f9ea781bb75ef1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:15:58 +0100 Subject: [PATCH 245/364] vec without capacity --- primitives/arkworks/src/utils.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 962bcf13e6718..56a7642347d4e 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,8 +26,7 @@ where T: CanonicalDeserialize + Sized, { let mut cursor = Cursor::new(bytes.to_vec()); - let length = bytes.len() / 8; - let mut result = Vec::with_capacity(length as usize); + let mut result = Vec::new(); for _ in 0..length { result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); } From fce66861ce462ee0e4f2b59cd4d0c18df2e18c20 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:21:57 +0100 Subject: [PATCH 246/364] Revert "vec without capacity" This reverts commit 2b1cd004f9f3f7cb1b0513c794f9ea781bb75ef1. --- primitives/arkworks/src/utils.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 56a7642347d4e..962bcf13e6718 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,7 +26,8 @@ where T: CanonicalDeserialize + Sized, { let mut cursor = Cursor::new(bytes.to_vec()); - let mut result = Vec::new(); + let length = bytes.len() / 8; + let mut result = Vec::with_capacity(length as usize); for _ in 0..length { result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); } From ab4d2b855b42216f6c01140aeef89c2657c0f8d6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:04 +0100 Subject: [PATCH 247/364] Revert "correct len" This reverts commit b85de8606364260c310f3c306b0a920e184e7e53. --- primitives/arkworks/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 962bcf13e6718..2e0c119a5e7b1 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,7 +26,7 @@ where T: CanonicalDeserialize + Sized, { let mut cursor = Cursor::new(bytes.to_vec()); - let length = bytes.len() / 8; + let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; let mut result = Vec::with_capacity(length as usize); for _ in 0..length { result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); From 435dab55d7855f2626655341693b8b7016a1ef26 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:05 +0100 Subject: [PATCH 248/364] Revert "fix bugs, cleanup" This reverts commit eef4c77ac99c0ed2e4b4857702e6ab5f1d2ce36c. --- primitives/arkworks/src/ed_on_bls12_377.rs | 4 ++- primitives/arkworks/src/ed_on_bls12_381.rs | 4 ++- primitives/arkworks/src/utils.rs | 30 +++++++++++++++++++--- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 6f929b03ad9f0..e6b499e72df95 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,8 +20,10 @@ #![warn(missing_docs)] use crate::utils::{deserialize_iter_to_vec, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; +use ark_ff::Zero; +use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 9d15e1c978107..470c8c0628257 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,9 +22,11 @@ use crate::utils::{deserialize_iter_to_vec, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; +use ark_ff::Zero; +use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 2e0c119a5e7b1..6b9b88cfdb89d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,7 +1,7 @@ use crate::PairingError; use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, - AffineRepr, + AffineRepr, Group, }; use ark_ff::Zero; use ark_serialize::{ @@ -21,15 +21,37 @@ pub fn deserialize_argument(argument: &Vec) -> Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } -pub fn deserialize_iter_to_vec(bytes: &[u8]) -> Result, SerializationError> +pub fn serialize_iter_to_vec( + iter: impl IntoIterator, +) -> Result, SerializationError> +where + T: CanonicalSerialize + Sized + Zero, +{ + let iter = iter.into_iter(); + let element_size = T::zero().uncompressed_size(); + let length: usize = + iter.size_hint().0.try_into().map_err(|_| SerializationError::InvalidData)?; + let mut w = Cursor::new(Vec::with_capacity(8 + element_size * length)); + length.serialize_uncompressed(&mut w)?; + let mut length = 0u32; + for elem in iter { + elem.serialize_uncompressed(&mut w)?; + length += 1; + } + let result = w.into_inner(); + // elem.serialize_uncompressed::<&mut &mut T>(&mut result.as_mut())?; + Ok(result) +} + +pub fn deserialize_iter_to_vec(mut bytes: &[u8]) -> Result, SerializationError> where T: CanonicalDeserialize + Sized, { - let mut cursor = Cursor::new(bytes.to_vec()); + let cursor = Cursor::new(bytes.to_vec()); let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; let mut result = Vec::with_capacity(length as usize); for _ in 0..length { - result.push(T::deserialize_uncompressed_unchecked(&mut cursor)?); + result.push(T::deserialize_uncompressed_unchecked(cursor.clone())?); } Ok(result) } From 59f25fb7627c265e36fdf83334a28d9e882073f9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:07 +0100 Subject: [PATCH 249/364] Revert "use correct deserialization" This reverts commit 9eacba93150bd41614e198cc6f2838d57d14f8db. --- primitives/arkworks/src/ed_on_bls12_377.rs | 7 +++---- primitives/arkworks/src/ed_on_bls12_381.rs | 12 ++++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index e6b499e72df95..b35688c5eeebc 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; @@ -28,10 +28,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = - deserialize_iter_to_vec::>(&bases).unwrap(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 470c8c0628257..9f35380bed21f 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, @@ -31,9 +31,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = deserialize_iter_to_vec::>(&bases).unwrap(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); let scalars: Vec<_> = - deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); let result = ::msm(&bases, &scalars).unwrap(); @@ -42,11 +42,11 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = deserialize_iter_to_vec::>(&bases).unwrap(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); let scalars: Vec<_> = - deserialize_iter_to_vec::<::ScalarField>(&scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); - let result = ::msm(&bases, &scalars).unwrap(); + let result = ::msm(&bases, &scalars[..]).unwrap(); serialize_result(result) } From b01168149f976835d12ae836dd2004f2c3514661 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:08 +0100 Subject: [PATCH 250/364] Revert "unwrap results" This reverts commit b0df1e1bdbd2518baa23040e0c6663ca69d2ba25. --- primitives/arkworks/src/ed_on_bls12_381.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 9f35380bed21f..c3df09faacef8 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -42,11 +42,11 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); - let result = ::msm(&bases, &scalars[..]).unwrap(); + let result = ::msm(&bases, &scalars).unwrap(); serialize_result(result) } From 6a571d073e8bfcf5b4b251bcb7a6868adc7a98f8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:10 +0100 Subject: [PATCH 251/364] Revert "unwrap results" This reverts commit de3cfbd04964dd66faeae5616b5763b1d30520e2. --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index b35688c5eeebc..4074131586253 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,7 +30,7 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c3df09faacef8..5503e9b3552fb 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -31,9 +31,9 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases).unwrap(); + let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); @@ -44,7 +44,7 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = serialize_iter_to_vec::>(bases); let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars).unwrap(); + serialize_iter_to_vec::<::ScalarField>(scalars); let result = ::msm(&bases, &scalars).unwrap(); From f1eecf910c09cbed07e15b4a70c99ec48f95ed90 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:11 +0100 Subject: [PATCH 252/364] Revert "fix typo" This reverts commit c12045d78f2468800be30ee1b31b12768aa7a786. --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 4074131586253..9d3b0ca9ba5d6 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -28,7 +28,7 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); + let bases: Vec<_> = serialize_iter_to_Vec::>(bases); let scalars: Vec<_> = serialize_iter_to_vec::<::ScalarField>(scalars); From 5999e11b003a88c32907798df2a889662239a09c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:13 +0100 Subject: [PATCH 253/364] Revert "new serialization" This reverts commit e56a088be7612e4511382817afaf61f65b0c3aca. --- primitives/arkworks/src/ed_on_bls12_377.rs | 15 ++++-- primitives/arkworks/src/ed_on_bls12_381.rs | 28 +++++++++--- primitives/arkworks/src/utils.rs | 53 +++++----------------- 3 files changed, 43 insertions(+), 53 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 9d3b0ca9ba5d6..8f03966fefe83 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; @@ -28,9 +28,16 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_Vec::>(bases); - let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + let bases: Vec<_> = bases + .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) + .collect(); + let scalars: Vec<_> = scalars + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 5503e9b3552fb..a94d5e8a3319f 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_iter_to_vec, serialize_result}; +use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, @@ -31,9 +31,16 @@ use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); - let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + let bases: Vec<_> = bases + .chunks(TEAffine::::generator().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) + .collect(); + let scalars: Vec<_> = scalars + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -42,9 +49,16 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { - let bases: Vec<_> = serialize_iter_to_vec::>(bases); - let scalars: Vec<_> = - serialize_iter_to_vec::<::ScalarField>(scalars); + let bases: Vec<_> = bases + .chunks(SWAffine::::generator().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::>(&a.to_vec())) + .collect(); + let scalars: Vec<_> = scalars + .chunks(::ScalarField::zero().serialized_size(Compress::No)) + .into_iter() + .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 6b9b88cfdb89d..e24c335b51ca5 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -4,9 +4,7 @@ use ark_ec::{ AffineRepr, Group, }; use ark_ff::Zero; -use ark_serialize::{ - CanonicalDeserialize, CanonicalSerialize, Compress, SerializationError, Validate, -}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { @@ -21,49 +19,20 @@ pub fn deserialize_argument(argument: &Vec) -> Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } -pub fn serialize_iter_to_vec( - iter: impl IntoIterator, -) -> Result, SerializationError> -where - T: CanonicalSerialize + Sized + Zero, -{ - let iter = iter.into_iter(); - let element_size = T::zero().uncompressed_size(); - let length: usize = - iter.size_hint().0.try_into().map_err(|_| SerializationError::InvalidData)?; - let mut w = Cursor::new(Vec::with_capacity(8 + element_size * length)); - length.serialize_uncompressed(&mut w)?; - let mut length = 0u32; - for elem in iter { - elem.serialize_uncompressed(&mut w)?; - length += 1; - } - let result = w.into_inner(); - // elem.serialize_uncompressed::<&mut &mut T>(&mut result.as_mut())?; - Ok(result) -} - -pub fn deserialize_iter_to_vec(mut bytes: &[u8]) -> Result, SerializationError> -where - T: CanonicalDeserialize + Sized, -{ - let cursor = Cursor::new(bytes.to_vec()); - let length = u32::deserialize_uncompressed_unchecked(cursor.clone())?; - let mut result = Vec::with_capacity(length as usize); - for _ in 0..length { - result.push(T::deserialize_uncompressed_unchecked(cursor.clone())?); - } - Ok(result) -} - pub fn multi_miller_loop_generic( a_vec: Vec, b_vec: Vec, ) -> Result, PairingError> { - let g1: Vec<_> = deserialize_iter_to_vec::<::G1Affine>(&a_vec) - .map_err(|_| PairingError::InternalPanic)?; - let g2: Vec<_> = deserialize_iter_to_vec::<::G2Affine>(&b_vec) - .map_err(|_| PairingError::InternalPanic)?; + let g1: Vec<_> = a_vec + .chunks(::G1Affine::generator().serialized_size(Compress::No)) + .into_iter() + .map(|elem| deserialize_argument::<::G1Affine>(&elem.to_vec())) + .collect(); + let g2: Vec<_> = b_vec + .chunks(::G2Affine::generator().serialized_size(Compress::No)) + .into_iter() + .map(|elem| deserialize_argument::<::G2Affine>(&elem.to_vec())) + .collect(); let result = Curve::multi_miller_loop(g1, g2); From 531eacbeba428bfc13777225e399f45a5051f360 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:14 +0100 Subject: [PATCH 254/364] Revert "cargo update" This reverts commit 15898da94677a5f19290a7f15fb15cb4cbd8f431. --- Cargo.lock | 293 ++++++++++++++++++++++++++--------------------------- 1 file changed, 141 insertions(+), 152 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47fdf3efbffeb..beede84372873 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,15 +205,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" +checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,32 +354,32 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "ark-ff-macros" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "ark-poly" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,13 +431,13 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -514,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -526,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -538,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -627,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "async-trait" -version = "0.1.67" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -784,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn", ] [[package]] @@ -924,9 +924,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.10", + "clap 4.1.9", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,9 +1234,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.10" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" +checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" dependencies = [ "bitflags", "clap_derive", @@ -1253,7 +1253,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", ] [[package]] @@ -1266,7 +1266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1622,7 +1622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1685,9 +1685,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1697,9 +1697,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1707,24 +1707,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.0", + "syn", ] [[package]] name = "cxxbridge-flags" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -1748,7 +1748,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn", ] [[package]] @@ -1759,7 +1759,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1785,7 +1785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn", ] [[package]] @@ -1835,7 +1835,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1846,7 +1846,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1867,7 +1867,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn 1.0.109", + "syn", ] [[package]] @@ -1888,7 +1888,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2032,7 +2032,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2127,7 +2127,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2147,7 +2147,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2228,7 +2228,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.9", "comfy-table", "frame-benchmarking", "frame-support", @@ -2481,7 +2481,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 1.0.109", + "syn", "trybuild", ] @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2618,7 +2618,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2638,7 +2638,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2852,7 +2852,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3407,7 +3407,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -3632,7 +3632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4246,7 +4246,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4780,7 +4780,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4870,7 +4870,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -4918,7 +4918,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -5027,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.10", + "clap 4.1.9", "derive_more", "fs_extra", "futures", @@ -5064,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.10", + "clap 4.1.9", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5966,7 +5966,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -6851,7 +6851,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 1.0.109", + "syn", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7312,7 +7312,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7353,7 +7353,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7548,7 +7548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn", ] [[package]] @@ -7583,7 +7583,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "version_check", ] @@ -7641,7 +7641,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7671,7 +7671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 1.0.109", + "syn", "tempfile", "which", ] @@ -7699,7 +7699,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7953,22 +7953,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -8414,7 +8414,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -8423,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.9", "fdlimit", "futures", "futures-timer", @@ -9537,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "fs4", "futures", "log", @@ -9641,7 +9641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -9730,7 +9730,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -9914,22 +9914,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.157" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.157" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -10165,7 +10165,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#23c2907ef31afbc5ca10cf62fdcaf73ac3500c60" +source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" dependencies = [ "ark-serialize", "ark-std", @@ -10621,7 +10621,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.109", + "syn", ] [[package]] @@ -10638,7 +10638,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10764,7 +10764,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10859,7 +10859,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11083,7 +11083,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 1.0.109", + "syn", ] [[package]] @@ -11187,7 +11187,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11215,7 +11215,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn", ] [[package]] @@ -11241,7 +11241,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "sc-cli", ] @@ -11269,7 +11269,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.9", "frame-support", "frame-system", "sc-cli", @@ -11485,7 +11485,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11539,17 +11539,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "synstructure" version = "0.12.6" @@ -11558,7 +11547,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "unicode-xid", ] @@ -11631,22 +11620,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn", ] [[package]] @@ -11803,7 +11792,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11928,7 +11917,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -12031,9 +12020,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" +checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12118,7 +12107,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.10", + "clap 4.1.9", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12229,9 +12218,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.12" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" @@ -12425,7 +12414,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-shared", ] @@ -12459,7 +12448,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13391,7 +13380,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] From bac66ab9ec6f85966732bec33a9e76e105199071 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:16 +0100 Subject: [PATCH 255/364] Revert "fix typo" This reverts commit c89e96331f1d07e3b9b6a00ea9c89896553d67c6. --- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index a94d5e8a3319f..c18da7c3d3b10 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -50,7 +50,7 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(SWAffine::::generator().serialized_size(Compress::No)) + .chunks(SWAffine::::genrator().serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::>(&a.to_vec())) .collect(); From 4ad8e32205df336273c6c31771cd5aad1a1859be Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:18 +0100 Subject: [PATCH 256/364] Revert "import AffineRepr" This reverts commit 5a103ac1b3506736181ddda040d896930bd8f83a. --- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 2 +- primitives/arkworks/src/utils.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 8f03966fefe83..e4dd4ea2cb229 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, AffineRepr, Group, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, Group, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use ark_ff::Zero; use ark_serialize::{CanonicalSerialize, Compress}; diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index c18da7c3d3b10..5ffc6ab858aba 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,7 +22,7 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, AffineRepr, Group, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, Group, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use ark_ff::Zero; diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e24c335b51ca5..2e48fa6b7133b 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,7 +1,7 @@ use crate::PairingError; use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, - AffineRepr, Group, + Group, }; use ark_ff::Zero; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; From 03e95bb8a7beebfd77251ccf2b51fd3275a26ea8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:20 +0100 Subject: [PATCH 257/364] Revert "use into_iter" This reverts commit 2e31d912bd4103529b40b250410f9f5b1a980ce4. --- primitives/arkworks/src/ed_on_bls12_377.rs | 8 ++++---- primitives/arkworks/src/ed_on_bls12_381.rs | 16 +++++++-------- primitives/arkworks/src/utils.rs | 24 +++++++++++----------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index e4dd4ea2cb229..82443b21a5b73 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,13 +30,13 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) + .into() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .into() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 5ffc6ab858aba..3634099892bad 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -33,13 +33,13 @@ use sp_std::vec::Vec; pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -51,13 +51,13 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(SWAffine::::genrator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::ScalarField>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 2e48fa6b7133b..df03f7318deb6 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -25,13 +25,13 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(&elem.to_vec())) + .iter() + .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(&elem.to_vec())) + .iter() + .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -55,13 +55,13 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::(a)) .collect(); let result = @@ -73,13 +73,13 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(&a.to_vec())) + .iter() + .map(|a| deserialize_argument::(a)) .collect(); let result = From 8649035897dc469d583cda644d59ab12c363bb87 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:21 +0100 Subject: [PATCH 258/364] Revert "no collect Vec" This reverts commit db18dcac34fc3c3ddc20c3b42331f8d5fa7014b5. --- primitives/arkworks/src/ed_on_bls12_377.rs | 14 +++++++++---- primitives/arkworks/src/ed_on_bls12_381.rs | 24 ++++++++++++++-------- primitives/arkworks/src/utils.rs | 24 +++++++++++----------- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 82443b21a5b73..42510db851bec 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -30,13 +30,19 @@ use sp_std::vec::Vec; pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| { + deserialize_argument::>(a.collect::>()) + }) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 3634099892bad..8decc6ec37eb1 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -33,13 +33,17 @@ use sp_std::vec::Vec; pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| deserialize_argument::>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -51,13 +55,17 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(SWAffine::::genrator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::>(a)) + .into_iter() + .map(|a| deserialize_argument::>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) + .into_iter() + .map(|a| { + deserialize_argument::<::ScalarField>( + a.collect::>(), + ) + }) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index df03f7318deb6..4d0376992d263 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -25,13 +25,13 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) + .into_iter() + .map(|elem| deserialize_argument::<::G1Affine>(elem.collect::>())) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem)) + .into_iter() + .map(|elem| deserialize_argument::<::G2Affine>(elem.collect::>())) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -55,13 +55,13 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) + .into_iter() + .map(|a| deserialize_argument::<::G1Affine>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::(a)) + .into_iter() + .map(|a| deserialize_argument::(a.collect::>())) .collect(); let result = @@ -73,13 +73,13 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) + .into_iter() + .map(|a| deserialize_argument::<::G2Affine>(a.collect::>())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) - .iter() - .map(|a| deserialize_argument::(a)) + .into_iter() + .map(|a| deserialize_argument::(a.collect::>())) .collect(); let result = From af14139115183fb5b38ccc509f36a1a468168923 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:23 +0100 Subject: [PATCH 259/364] Revert "collect as vec" This reverts commit dd3f809e965cec361a0feaab9abfae7115756e2c. --- primitives/arkworks/src/ed_on_bls12_377.rs | 20 ++++---------- primitives/arkworks/src/ed_on_bls12_381.rs | 32 ++++++---------------- 2 files changed, 14 insertions(+), 38 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 42510db851bec..242006b305666 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,29 +20,19 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, Group, VariableBaseMSM}; +use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; -use ark_ff::Zero; -use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(twisted_edwards::Affine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::>(a.collect::>()) - }) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 8decc6ec37eb1..a13c55731a926 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -22,28 +22,20 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, Group, VariableBaseMSM, + twisted_edwards::Affine as TEAffine, VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; -use ark_ff::Zero; -use ark_serialize::{CanonicalSerialize, Compress}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(TEAffine::::generator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); @@ -54,18 +46,12 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(SWAffine::::genrator().serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::>(a.collect::>())) + .iter() + .map(|a| deserialize_argument::>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(::ScalarField::zero().serialized_size(Compress::No)) - .into_iter() - .map(|a| { - deserialize_argument::<::ScalarField>( - a.collect::>(), - ) - }) + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); let result = ::msm(&bases, &scalars).unwrap(); From e2991015c20b3a121ad5dd915083c257efbf9368 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:24 +0100 Subject: [PATCH 260/364] Revert "collect as vec" This reverts commit 9167d5984d8ecc3903d24f96d8c9fcac45c87bf7. --- primitives/arkworks/src/utils.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 4d0376992d263..5d78b831979e8 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,12 +26,12 @@ pub fn multi_miller_loop_generic( let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem.collect::>())) + .map(|elem| deserialize_argument::<::G1Affine>(elem.into())) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem.collect::>())) + .map(|elem| deserialize_argument::<::G2Affine>(elem.into())) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -56,12 +56,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(a.collect::>())) + .map(|a| deserialize_argument::<::G1Affine>(a.into())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.collect::>())) + .map(|a| deserialize_argument::(a.into())) .collect(); let result = @@ -74,12 +74,12 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(a.collect::>())) + .map(|a| deserialize_argument::<::G2Affine>(a.into())) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.collect::>())) + .map(|a| deserialize_argument::(a.into())) .collect(); let result = From eec08b56436aa98ae16812b8e57d2c52dab6f554 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:26 +0100 Subject: [PATCH 261/364] Revert "use into" This reverts commit 344cfffbd38fde130225df35f36259872754bd3a. --- primitives/arkworks/src/utils.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5d78b831979e8..5d15cdd1c831f 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -26,12 +26,12 @@ pub fn multi_miller_loop_generic( let g1: Vec<_> = a_vec .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem.into())) + .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem.into())) + .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); let result = Curve::multi_miller_loop(g1, g2); @@ -56,12 +56,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G1Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G1Affine>(a.into())) + .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.into())) + .map(|a| deserialize_argument::(a)) .collect(); let result = @@ -74,12 +74,12 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec = bases .chunks(::G2Affine::generator().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::<::G2Affine>(a.into())) + .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) .into_iter() - .map(|a| deserialize_argument::(a.into())) + .map(|a| deserialize_argument::(a)) .collect(); let result = From 43a689d0d1c83af8cad209afaaf4a8260219b5f6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:27 +0100 Subject: [PATCH 262/364] Revert "fix ersialized_size" This reverts commit c6a760986551cbbcaa3748564dd5e3c7630209c6. --- Cargo.lock | 293 ++++++++++++++++--------------- primitives/arkworks/src/utils.rs | 18 +- 2 files changed, 159 insertions(+), 152 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index beede84372873..0cfd8e79ee908 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,15 +205,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,32 +354,32 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-ff-macros" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,13 +431,13 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -514,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -526,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -538,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -627,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -784,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -924,9 +924,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -1108,7 +1108,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.9", + "clap 4.1.10", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1234,9 +1234,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.9" +version = "4.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9d6ada83c1edcce028902ea27dd929069c70df4c7600b131b4d9a1ad2879cc" +checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" dependencies = [ "bitflags", "clap_derive", @@ -1253,7 +1253,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", ] [[package]] @@ -1266,7 +1266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1622,7 +1622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1685,9 +1685,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1697,9 +1697,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1707,24 +1707,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.0", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -1748,7 +1748,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1759,7 +1759,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1785,7 +1785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -1835,7 +1835,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1846,7 +1846,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1867,7 +1867,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -1888,7 +1888,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2032,7 +2032,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2127,7 +2127,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2147,7 +2147,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2228,7 +2228,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2416,7 +2416,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "comfy-table", "frame-benchmarking", "frame-support", @@ -2481,7 +2481,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn", + "syn 1.0.109", "trybuild", ] @@ -2507,7 +2507,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2618,7 +2618,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2638,7 +2638,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2852,7 +2852,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3407,7 +3407,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -3632,7 +3632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4246,7 +4246,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4780,7 +4780,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4870,7 +4870,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4918,7 +4918,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5027,7 +5027,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.9", + "clap 4.1.10", "derive_more", "fs_extra", "futures", @@ -5064,7 +5064,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.9", + "clap 4.1.10", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5185,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5244,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5253,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5966,7 +5966,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -6851,7 +6851,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn", + "syn 1.0.109", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7312,7 +7312,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7353,7 +7353,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7548,7 +7548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -7583,7 +7583,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7641,7 +7641,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7671,7 +7671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] @@ -7699,7 +7699,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7953,22 +7953,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -8414,7 +8414,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -8423,7 +8423,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.9", + "clap 4.1.10", "fdlimit", "futures", "futures-timer", @@ -9537,7 +9537,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "fs4", "futures", "log", @@ -9641,7 +9641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9730,7 +9730,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9914,22 +9914,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -10165,7 +10165,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#acadbb94eeb0345d40fdb3fcc6fabb88fa5fac7b" +source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" dependencies = [ "ark-serialize", "ark-std", @@ -10621,7 +10621,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -10638,7 +10638,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10764,7 +10764,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10859,7 +10859,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11083,7 +11083,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn", + "syn 1.0.109", ] [[package]] @@ -11187,7 +11187,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11215,7 +11215,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -11241,7 +11241,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "sc-cli", ] @@ -11269,7 +11269,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.9", + "clap 4.1.10", "frame-support", "frame-system", "sc-cli", @@ -11485,7 +11485,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11539,6 +11539,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -11547,7 +11558,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -11620,22 +11631,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.0", ] [[package]] @@ -11792,7 +11803,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11917,7 +11928,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12020,9 +12031,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12107,7 +12118,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.9", + "clap 4.1.10", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12218,9 +12229,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -12414,7 +12425,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -12448,7 +12459,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13380,7 +13391,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5d15cdd1c831f..5dfe7e1ec9036 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,9 +1,5 @@ use crate::PairingError; -use ark_ec::{ - pairing::{MillerLoopOutput, Pairing}, - Group, -}; -use ark_ff::Zero; +use ark_ec::pairing::{MillerLoopOutput, Pairing}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -24,12 +20,12 @@ pub fn multi_miller_loop_generic( b_vec: Vec, ) -> Result, PairingError> { let g1: Vec<_> = a_vec - .chunks(::G1Affine::generator().serialized_size(Compress::No)) + .chunks(::G1Affine.serialized_size(Compress::No)) .into_iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec - .chunks(::G2Affine::generator().serialized_size(Compress::No)) + .chunks(::G2Affine.serialized_size(Compress::No)) .into_iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -54,12 +50,12 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(::G1Affine::generator().serialized_size(Compress::No)) + .chunks(::G1Affine.serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) + .chunks(Curve::ScalarField.serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::(a)) .collect(); @@ -72,12 +68,12 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases - .chunks(::G2Affine::generator().serialized_size(Compress::No)) + .chunks(::G2Affine.serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField::zero().serialized_size(Compress::No)) + .chunks(Curve::ScalarField.serialized_size(Compress::No)) .into_iter() .map(|a| deserialize_argument::(a)) .collect(); From 757868e3a38f279ac80199dca967301b853a87e7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:29 +0100 Subject: [PATCH 263/364] Revert "use chunks for scalars" This reverts commit 67987ae0bbba7e3963ccba0dd9f1fbaa4c922d4f. --- Cargo.lock | 18 +++++++++--------- primitives/arkworks/src/utils.rs | 14 ++++---------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cfd8e79ee908..3423c0ca55976 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3516,9 +3516,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.7", @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8219182113e66247f73d36bc7a298104302be936" +source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 5dfe7e1ec9036..e982f11ae24ce 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -54,11 +54,8 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec::G1Affine>(a)) .collect(); - let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField.serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(a)) - .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); let result = <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); @@ -72,11 +69,8 @@ pub fn msm_g2_generic(bases: Vec, scalars: Vec) -> Vec::G2Affine>(a)) .collect(); - let scalars: Vec<_> = scalars - .chunks(Curve::ScalarField.serialized_size(Compress::No)) - .into_iter() - .map(|a| deserialize_argument::(a)) - .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); let result = <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); From 24a11d7da6607fea0a276c44249ce8edc885f297 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:30 +0100 Subject: [PATCH 264/364] Revert "use into_iter for chunks" This reverts commit 1ddd6b89c2f8fb4e6dd26768be0edaca2d1be3f9. --- primitives/arkworks/src/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e982f11ae24ce..0e3609a9f567d 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -21,12 +21,12 @@ pub fn multi_miller_loop_generic( ) -> Result, PairingError> { let g1: Vec<_> = a_vec .chunks(::G1Affine.serialized_size(Compress::No)) - .into_iter() + .iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec .chunks(::G2Affine.serialized_size(Compress::No)) - .into_iter() + .iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -51,7 +51,7 @@ pub fn final_exponentiation_generic( pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G1Affine.serialized_size(Compress::No)) - .into_iter() + .iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); let scalars: Vec<_> = @@ -66,7 +66,7 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { let bases: Vec<_> = bases .chunks(::G2Affine.serialized_size(Compress::No)) - .into_iter() + .iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); let scalars: Vec<_> = From b5165621d06d5a955b3af74c1bdc2a00e6a1d703 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:22:32 +0100 Subject: [PATCH 265/364] Revert "replace Vec>" This reverts commit 4d3b13c02a9db0ea6bd130bda38c851f2371ec6e. --- Cargo.lock | 46 ++++++++++++++++++++-------------------- primitives/io/src/lib.rs | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3423c0ca55976..85d3ace0aefab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" +checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,9 +354,9 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" dependencies = [ "quote", "syn 1.0.109", @@ -364,9 +364,9 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" dependencies = [ "num-bigint", "num-traits", @@ -377,9 +377,9 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,9 +431,9 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" dependencies = [ "proc-macro2", "quote", @@ -10243,7 +10243,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10258,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10287,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10301,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10332,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10348,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9823a947702037ce9662757ef6cc1b176da29546" +source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" dependencies = [ "ark-serialize", "ark-std", diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index d944428e1107d..918b40f12c1b5 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1158,12 +1158,12 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bls12_377 - fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Vec { + fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 - fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Vec { + fn bls12_377_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g2(bases, scalars) } From 573cd48f0f1a341bcc20e7cab81faa308ed4d6a0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 14:25:16 +0100 Subject: [PATCH 266/364] cargo update --- Cargo.lock | 176 +++++++++++++++++++++++++++-------------------------- 1 file changed, 91 insertions(+), 85 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85d3ace0aefab..d81dd38d9a5ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" dependencies = [ "ark-ec", "ark-ff", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -334,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -354,9 +354,9 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", "syn 1.0.109", @@ -364,9 +364,9 @@ dependencies = [ [[package]] name = "ark-ff-macros" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", @@ -377,9 +377,9 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", @@ -431,9 +431,9 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", @@ -638,7 +638,7 @@ checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -773,7 +773,7 @@ version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -793,6 +793,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bitvec" version = "1.0.1" @@ -1108,7 +1114,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.10", + "clap 4.1.11", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1226,7 +1232,7 @@ version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex 0.2.4", "indexmap", "textwrap", @@ -1234,11 +1240,11 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.10" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce38afc168d8665cfc75c7b1dd9672e50716a137f433f070991619744a67342a" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", "clap_lex 0.3.3", "is-terminal", @@ -1253,7 +1259,7 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", ] [[package]] @@ -1707,7 +1713,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -1724,7 +1730,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -2416,7 +2422,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.11", "comfy-table", "frame-benchmarking", "frame-support", @@ -2507,7 +2513,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2576,7 +2582,7 @@ name = "frame-support" version = "4.0.0-dev" dependencies = [ "assert_matches", - "bitflags", + "bitflags 1.3.2", "environmental", "frame-metadata", "frame-support-procedural", @@ -3020,7 +3026,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libgit2-sys", "log", @@ -3481,9 +3487,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e86b86ae312accbf05ade23ce76b625e0e47a255712b7414037385a1c05380" +checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -3516,13 +3522,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.7", - "rustix 0.36.9", + "io-lifetimes 1.0.8", + "rustix 0.36.10", "windows-sys 0.45.0", ] @@ -4624,7 +4630,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.9", + "rustix 0.36.10", ] [[package]] @@ -4949,7 +4955,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -5002,7 +5008,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.6.5", @@ -5014,7 +5020,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -5027,7 +5033,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.10", + "clap 4.1.11", "derive_more", "fs_extra", "futures", @@ -5064,7 +5070,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.10", + "clap 4.1.11", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5185,7 +5191,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5244,7 +5250,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "generate-bags", "kitchensink-runtime", ] @@ -5253,7 +5259,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5915,7 +5921,7 @@ version = "4.0.0-dev" dependencies = [ "array-bytes", "assert_matches", - "bitflags", + "bitflags 1.3.2", "env_logger 0.9.3", "environmental", "frame-benchmarking", @@ -5952,7 +5958,7 @@ dependencies = [ name = "pallet-contracts-primitives" version = "7.0.0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "parity-scale-codec", "scale-info", "sp-runtime", @@ -7437,7 +7443,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -7937,7 +7943,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -7968,7 +7974,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -8015,7 +8021,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "mach", "winapi", @@ -8179,7 +8185,7 @@ version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes 0.7.5", "libc", @@ -8189,13 +8195,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", - "io-lifetimes 1.0.7", + "io-lifetimes 1.0.8", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8423,7 +8429,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.10", + "clap 4.1.11", "fdlimit", "futures", "futures-timer", @@ -8964,7 +8970,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.9", + "rustix 0.36.10", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9093,7 +9099,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "futures", "futures-timer", @@ -9537,7 +9543,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "fs4", "futures", "log", @@ -9862,7 +9868,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -9929,7 +9935,7 @@ checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -10243,7 +10249,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10258,7 +10264,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10273,7 +10279,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10287,7 +10293,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10301,7 +10307,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10332,7 +10338,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-ec", "ark-ff", @@ -10348,7 +10354,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4bad48b6c8ffedcdf0a249f91e74374b1dd89eba" +source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" dependencies = [ "ark-serialize", "ark-std", @@ -10561,7 +10567,7 @@ version = "7.0.0" dependencies = [ "array-bytes", "base58", - "bitflags", + "bitflags 1.3.2", "blake2", "bounded-collections", "criterion", @@ -10764,7 +10770,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11168,7 +11174,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -11241,7 +11247,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "sc-cli", ] @@ -11269,7 +11275,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.10", + "clap 4.1.11", "frame-support", "frame-system", "sc-cli", @@ -11541,9 +11547,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774" +checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" dependencies = [ "proc-macro2", "quote", @@ -11568,7 +11574,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -11604,7 +11610,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.9", + "rustix 0.36.10", "windows-sys 0.42.0", ] @@ -11646,7 +11652,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.0", + "syn 2.0.2", ] [[package]] @@ -11883,7 +11889,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -12118,7 +12124,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.10", + "clap 4.1.11", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12684,7 +12690,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.9", + "rustix 0.36.10", "serde", "sha2 0.10.6", "toml", @@ -12764,7 +12770,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.9", + "rustix 0.36.10", ] [[package]] @@ -12795,7 +12801,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.9", + "rustix 0.36.10", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -13072,7 +13078,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "cc", "ipnet", From 9551b75de7965d07ac72c923312f825678f70026 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 16:15:08 +0100 Subject: [PATCH 267/364] cargo update --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d81dd38d9a5ca..0571b966caa20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5545,9 +5545,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" From f41784912bc9ebdc0064c8068c41e5cf1d2fdbf9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 17:53:29 +0100 Subject: [PATCH 268/364] Revert "replace Vec>" This reverts commit 4389714068d939abc97288c5b06ee23d399a19ad. --- primitives/arkworks/src/bls12_377.rs | 6 ++-- primitives/arkworks/src/bls12_381.rs | 6 ++-- primitives/arkworks/src/bw6_761.rs | 6 ++-- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381.rs | 4 +-- primitives/arkworks/src/utils.rs | 12 +++----- primitives/arkworks/test/tests/bls12_377.rs | 9 ++++-- .../arkworks/test/tests/bls12_381/mod.rs | 6 ++-- primitives/arkworks/test/tests/bw6_761.rs | 9 ++++-- .../arkworks/test/tests/ed_on_bls12_377.rs | 2 +- .../arkworks/test/tests/ed_on_bls12_381.rs | 4 +-- primitives/io/src/lib.rs | 29 ++++++++++++------- 12 files changed, 53 insertions(+), 42 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 636e281c5c744..cf5b380fb34a1 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -30,7 +30,7 @@ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -40,11 +40,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 0852f269f4f49..10ef613fee115 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -29,7 +29,7 @@ use ark_bls12_381::Bls12_381; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -39,11 +39,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 1de24dd45eb7f..9a3330cfe7443 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -29,7 +29,7 @@ use ark_bw6_761::BW6_761; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) } @@ -39,11 +39,11 @@ pub fn final_exponentiation(target: Vec) -> Result, PairingError> { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_g1_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_g2_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 242006b305666..2a6797ab751bf 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -25,7 +25,7 @@ use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm(bases: Vec, scalars: Vec) -> Vec { +pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index a13c55731a926..745123a9c854d 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -28,7 +28,7 @@ use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use sp_std::vec::Vec; /// Compute a multi scalar multiplication on G! through arkworks -pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { +pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) @@ -44,7 +44,7 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn sw_msm(bases: Vec, scalars: Vec) -> Vec { +pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| deserialize_argument::>(a)) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 0e3609a9f567d..83873668036df 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -16,16 +16,14 @@ pub fn deserialize_argument(argument: &Vec) -> } pub fn multi_miller_loop_generic( - a_vec: Vec, - b_vec: Vec, + a_vec: Vec>, + b_vec: Vec>, ) -> Result, PairingError> { let g1: Vec<_> = a_vec - .chunks(::G1Affine.serialized_size(Compress::No)) .iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) .collect(); let g2: Vec<_> = b_vec - .chunks(::G2Affine.serialized_size(Compress::No)) .iter() .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); @@ -48,9 +46,8 @@ pub fn final_exponentiation_generic( } } -pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g1_generic(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases - .chunks(::G1Affine.serialized_size(Compress::No)) .iter() .map(|a| deserialize_argument::<::G1Affine>(a)) .collect(); @@ -63,9 +60,8 @@ pub fn msm_g1_generic(bases: Vec, scalars: Vec) -> Vec(bases: Vec, scalars: Vec) -> Vec { +pub fn msm_g2_generic(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases - .chunks(::G2Affine.serialized_size(Compress::No)) .iter() .map(|a| deserialize_argument::<::G2Affine>(a)) .collect(); diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 5907f96827cb8..9926767bafc05 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -6,16 +6,19 @@ use sp_arkworks::PairingError; pub struct Host {} impl HostFunctions for Host { - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { + fn bls12_377_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } - fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Vec { + fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) } - fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Vec { + fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index fd3cdd80bc128..1dacfb7b312ee 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -14,16 +14,16 @@ use sp_ark_bls12_381::{ pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec, b: Vec ) -> Result, PairingError> { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } - fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Vec { + fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) } - fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Vec { + fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 758084fa143cf..7ff9d4ee0f8ef 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -7,16 +7,19 @@ use sp_arkworks::PairingError; pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { + fn bw6_761_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } - fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Vec { + fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) } - fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Vec { + fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 1ac6e1728df30..8b4a4d3d13784 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -5,7 +5,7 @@ use sp_ark_ed_on_bls12_377::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 8dd9385860535..a3bd0b5a82847 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,10 +5,10 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) } - fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) } } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 918b40f12c1b5..e3c57f13fe247 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1128,7 +1128,10 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { + fn bls12_381_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } @@ -1138,17 +1141,20 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bls12_381 - fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Vec { + fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 - fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Vec { + fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { + fn bls12_377_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } @@ -1168,7 +1174,10 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, PairingError> { + fn bw6_761_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } @@ -1178,27 +1187,27 @@ pub trait EllipticCurves { } /// Compute a msm on G1 for bw6_761 - fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Vec { + fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 - fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Vec { + fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { sp_arkworks::bw6_761::msm_g2(bases, bigints) } /// Compute twisted edwards msm on ed_on_bls12_381 - fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) } /// Compute short weierstrass msm on ed_on_bls12_381 - fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } /// Compute msm on ed_on_bls12_377 - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_377::msm(bases, scalars) } } From 9138da155dfc3bedea4c47e46b8f507a2941fbe4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sun, 19 Mar 2023 18:15:07 +0100 Subject: [PATCH 269/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0571b966caa20..e9f2720a56a62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10249,7 +10249,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10264,7 +10264,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10279,7 +10279,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10293,7 +10293,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10307,7 +10307,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10338,7 +10338,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-ec", "ark-ff", @@ -10354,7 +10354,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#fa1d7822905cfd1e0ade39b7dc0e02ccfdcbee5c" +source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" dependencies = [ "ark-serialize", "ark-std", From db922ca3edc5610ce1d3d012b66bcc452a74b0a8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 09:37:07 +0100 Subject: [PATCH 270/364] add error --- primitives/arkworks/src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index f7a8e04ba025b..151111b3af64b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -6,3 +6,14 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; mod utils; + +/// Error computing an elliptic curve pairing +#[derive(Encode, Decode, Debug)] +pub enum PairingError { + #[codec(index = 1)] + InternalPanic, + #[codec(index = 2)] + FinalExpInverse, + #[codec(index = 3)] + MillerLoopCofactor, +} \ No newline at end of file From b35fb2526435ac71b008a8eaee50291ea7a53543 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 09:39:03 +0100 Subject: [PATCH 271/364] add error --- primitives/arkworks/src/bls12_377.rs | 82 +++++----------------------- primitives/arkworks/src/bls12_381.rs | 70 +++++------------------- primitives/arkworks/src/bw6_761.rs | 66 +++++----------------- primitives/arkworks/src/utils.rs | 61 +++++++++++++++++++++ primitives/io/src/lib.rs | 17 ++++-- 5 files changed, 114 insertions(+), 182 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 3b61a949154d7..f214535876cf1 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, @@ -31,28 +31,24 @@ use ark_std::io::Cursor; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|elem| deserialize_argument::<::G2Prepared>(elem)) - .collect(); - - let result = Bls12_377::multi_miller_loop(g1, g2).0; - serialize_result(result) +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { + final_exponentiation_generic::(target) +} - let result = Bls12_377::final_exponentiation(MillerLoopOutput(target)).unwrap().0; +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + msm_g1_generic::(bases, scalars) +} - serialize_result(result) +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + msm_g2_generic::(bases, scalars) } /// Compute a scalar multiplication on G2 through arkworks @@ -93,54 +89,4 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let result = ::mul_affine(&base, &scalar); serialize_result(result) -} - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::G2Affine::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| { - let cursor = Cursor::new(a); - ::ScalarField::deserialize_with_mode( - cursor, - Compress::No, - Validate::No, - ) - .unwrap() - }) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} +} \ No newline at end of file diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index bf2f2cf9a0e18..571cafca98832 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, @@ -28,33 +28,25 @@ use ark_ec::{ }; use sp_std::vec::Vec; -/// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|a| { - deserialize_argument::>(a) - }) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|b| { - deserialize_argument::>(b) - }) - .collect(); - - let result = Bls12_381::multi_miller_loop(g1, g2).0; - serialize_result(result) +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { + final_exponentiation_generic::(target) +} - let result = Bls12_381::final_exponentiation(MillerLoopOutput(target)).unwrap().0; +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + msm_g1_generic::(bases, scalars) +} - serialize_result(result) +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + msm_g2_generic::(bases, scalars) } /// Compute a scalar multiplication on G2 through arkworks @@ -96,37 +88,3 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { serialize_result(result) } - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(&a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(&a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G2Affine>(&a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(&a)) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 1f881949d7c30..a0d4e8f7680ca 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; +use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, @@ -28,29 +28,25 @@ use ark_ec::{ }; use sp_std::vec::Vec; -/// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a_vec: Vec>, b_vec: Vec>) -> Vec { - let g1: Vec<_> = a_vec - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|b| deserialize_argument::<::G2Affine>(b)) - .collect(); - - let result = BW6_761::multi_miller_loop(g1, g2).0; - serialize_result(result) +/// Compute multi miller loop through arkworks +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { + multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Vec { - let target = deserialize_argument::<::TargetField>(&target); +pub fn final_exponentiation(target: Vec) -> Result, PairingError> { + final_exponentiation_generic::(target) +} - let result = BW6_761::final_exponentiation(MillerLoopOutput(target)).unwrap().0; +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + msm_g1_generic::(bases, scalars) +} - serialize_result(result) +/// Compute a multi scalar multiplication on G! through arkworks +pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + msm_g2_generic::(bases, scalars) } /// Compute a scalar multiplication on G2 through arkworks @@ -92,37 +88,3 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { serialize_result(result) } - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} - -/// Compute a multi scalar multiplication on G! through arkworks -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); - - serialize_result(result) -} diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index f5d33f31f164a..83873668036df 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,3 +1,5 @@ +use crate::PairingError; +use ark_ec::pairing::{MillerLoopOutput, Pairing}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -12,3 +14,62 @@ pub fn deserialize_argument(argument: &Vec) -> let cursor = Cursor::new(argument); Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } + +pub fn multi_miller_loop_generic( + a_vec: Vec>, + b_vec: Vec>, +) -> Result, PairingError> { + let g1: Vec<_> = a_vec + .iter() + .map(|elem| deserialize_argument::<::G1Affine>(elem)) + .collect(); + let g2: Vec<_> = b_vec + .iter() + .map(|elem| deserialize_argument::<::G2Affine>(elem)) + .collect(); + + let result = Curve::multi_miller_loop(g1, g2); + + Ok(serialize_result(result.0)) +} + +pub fn final_exponentiation_generic( + target: Vec, +) -> Result, PairingError> { + let target = deserialize_argument::<::TargetField>(&target); + + let result = Curve::final_exponentiation(MillerLoopOutput(target)); + + match result { + Some(result) => Ok(serialize_result(result)), + None => Err(PairingError::FinalExpInverse), + } +} + +pub fn msm_g1_generic(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| deserialize_argument::<::G1Affine>(a)) + .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); + + let result = + <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + + serialize_result(result) +} + +pub fn msm_g2_generic(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| deserialize_argument::<::G2Affine>(a)) + .collect(); + let scalars: Vec<_> = + scalars.iter().map(|a| deserialize_argument::(a)).collect(); + + let result = + <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + + serialize_result(result) +} diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 5c0115423a5f1..352559ca1057a 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1126,12 +1126,13 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Vec { + fn bls12_381_final_exponentiation(f12: Vec + ) -> Result, PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1166,12 +1167,14 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bls12_377_multi_miller_loop(a: Vec>, b: Vec> + ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Vec { + fn bls12_377_final_exponentiation(f12: Vec + ) -> Result, PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1206,12 +1209,14 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec> + ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Vec { + fn bw6_761_final_exponentiation(f12: Vec + ) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From 868d4ace241dba5eee6d06c8a4977d88460851ad Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 09:39:03 +0100 Subject: [PATCH 272/364] add error --- Cargo.lock | 601 +++++++++++++++------------ primitives/arkworks/src/bls12_377.rs | 10 +- primitives/arkworks/src/bls12_381.rs | 8 +- primitives/arkworks/src/bw6_761.rs | 8 +- primitives/arkworks/src/lib.rs | 2 +- primitives/io/src/lib.rs | 32 +- 6 files changed, 366 insertions(+), 295 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4afe0e7c0d0f..f1825be7eb5a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,11 +203,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -220,9 +226,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.2.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" [[package]] name = "arc-swap" @@ -232,9 +238,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-algebra-test-templates" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deca58b5061716327c0a180066ddae1518093806baddc064ff96b105b08d5fac" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" dependencies = [ "ark-ec", "ark-ff", @@ -287,9 +293,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -328,9 +334,9 @@ dependencies = [ [[package]] name = "ark-ff" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2d42532524bee1da5a4f6f733eb4907301baa480829557adcff5dfaeee1d9a" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ "ark-ff-asm", "ark-ff-macros", @@ -348,32 +354,32 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6873aaba7959593d89babed381d33e2329453368f1bf3c67e07686a1c1056f" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-ff-macros" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c2e7d0f2d67cc7fc925355c74d36e7eda19073639be4a0a233d4611b8c959d" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -413,9 +419,9 @@ dependencies = [ [[package]] name = "ark-serialize" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e735959bc173ea4baf13327b19c22d452b8e9e8e8f7b7fc34e6bf0e316c33e" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", @@ -425,13 +431,13 @@ dependencies = [ [[package]] name = "ark-serialize-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34f0920d995d2c932f38861c416f70de89a6de9875876b012557079603e6cc" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -508,7 +514,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -520,7 +526,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -532,7 +538,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -543,13 +549,14 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -620,18 +627,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -766,7 +773,7 @@ version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -777,7 +784,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -786,6 +793,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bitvec" version = "1.0.1" @@ -917,9 +930,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -1009,7 +1022,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -1101,7 +1114,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.8", + "clap 4.1.11", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1112,9 +1125,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -1219,7 +1232,7 @@ version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex 0.2.4", "indexmap", "textwrap", @@ -1227,13 +1240,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", - "clap_lex 0.3.2", + "clap_lex 0.3.3", "is-terminal", "once_cell", "strsim", @@ -1242,24 +1255,24 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", ] [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1273,9 +1286,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] @@ -1318,9 +1331,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "core-foundation" @@ -1615,7 +1628,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1664,9 +1677,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ "cfg-if", "fiat-crypto", @@ -1678,9 +1691,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1690,9 +1703,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1700,24 +1713,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.2", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -1741,7 +1754,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1752,7 +1765,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1778,7 +1791,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -1828,7 +1841,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1839,7 +1852,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1860,7 +1873,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1870,7 +1883,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -1881,7 +1894,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1974,7 +1987,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2025,7 +2038,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2120,7 +2133,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2140,7 +2153,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2281,9 +2294,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -2396,7 +2409,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.11", "comfy-table", "frame-benchmarking", "frame-support", @@ -2461,7 +2474,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn", + "syn 1.0.109", "trybuild", ] @@ -2487,7 +2500,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2556,7 +2569,7 @@ name = "frame-support" version = "4.0.0-dev" dependencies = [ "assert_matches", - "bitflags", + "bitflags 1.3.2", "environmental", "frame-metadata", "frame-support-procedural", @@ -2598,7 +2611,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2609,7 +2622,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2618,7 +2631,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2756,9 +2769,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -2771,9 +2784,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -2781,15 +2794,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -2799,9 +2812,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -2820,13 +2833,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2842,15 +2855,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -2860,9 +2873,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -2994,7 +3007,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libgit2-sys", "log", @@ -3238,9 +3251,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -3381,7 +3394,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3455,10 +3468,11 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -3489,13 +3503,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.6", - "rustix 0.36.9", + "io-lifetimes 1.0.8", + "rustix 0.36.10", "windows-sys 0.45.0", ] @@ -3605,7 +3619,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3950,18 +3964,16 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", "multiaddr 0.17.0", "multihash 0.17.0", @@ -3969,17 +3981,13 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] @@ -4017,6 +4025,25 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", + "prost", + "prost-build", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" version = "0.42.1" @@ -4205,7 +4232,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4226,13 +4253,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.0", + "libp2p-core 0.39.1", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4582,7 +4610,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.9", + "rustix 0.36.10", ] [[package]] @@ -4726,7 +4754,7 @@ dependencies = [ "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] @@ -4739,7 +4767,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4829,7 +4857,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4877,7 +4905,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4908,7 +4936,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -4961,7 +4989,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.6.5", @@ -4973,7 +5001,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -4986,7 +5014,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.8", + "clap 4.1.11", "derive_more", "fs_extra", "futures", @@ -5023,7 +5051,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.8", + "clap 4.1.11", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5144,7 +5172,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5203,7 +5231,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "generate-bags", "kitchensink-runtime", ] @@ -5212,7 +5240,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5498,9 +5526,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" @@ -5874,7 +5902,7 @@ version = "4.0.0-dev" dependencies = [ "array-bytes", "assert_matches", - "bitflags", + "bitflags 1.3.2", "env_logger 0.9.3", "environmental", "frame-benchmarking", @@ -5911,7 +5939,7 @@ dependencies = [ name = "pallet-contracts-primitives" version = "7.0.0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "parity-scale-codec", "scale-info", "sp-runtime", @@ -5925,7 +5953,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -6791,7 +6819,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn", + "syn 1.0.109", ] [[package]] @@ -7099,7 +7127,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7252,7 +7280,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7293,7 +7321,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7377,7 +7405,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -7441,17 +7469,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -7471,12 +7511,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -7511,7 +7551,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7528,9 +7568,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -7569,7 +7609,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7599,7 +7639,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] @@ -7627,7 +7667,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7654,6 +7694,15 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -7694,9 +7743,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -7856,7 +7905,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -7872,22 +7921,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -7934,7 +7983,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "mach", "winapi", @@ -8080,7 +8129,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -8098,7 +8147,7 @@ version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes 0.7.5", "libc", @@ -8108,13 +8157,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", - "io-lifetimes 1.0.6", + "io-lifetimes 1.0.8", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8332,7 +8381,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -8341,7 +8390,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.11", "fdlimit", "futures", "futures-timer", @@ -8882,7 +8931,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.9", + "rustix 0.36.10", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9008,7 +9057,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "futures", "futures-timer", @@ -9448,7 +9497,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "fs4", "futures", "log", @@ -9552,7 +9601,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9641,7 +9690,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9773,7 +9822,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -9810,9 +9859,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -9825,22 +9874,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.154" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.154" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -10006,14 +10055,14 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version 0.4.0", @@ -10074,7 +10123,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10448,7 +10497,7 @@ version = "7.0.0" dependencies = [ "array-bytes", "base58", - "bitflags", + "bitflags 1.3.2", "blake2", "bounded-collections", "criterion", @@ -10508,7 +10557,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -10525,7 +10574,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10651,7 +10700,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10746,7 +10795,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10970,7 +11019,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn", + "syn 1.0.109", ] [[package]] @@ -11008,9 +11057,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" [[package]] name = "spki" @@ -11055,7 +11104,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -11074,7 +11123,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11102,7 +11151,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -11128,7 +11177,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "sc-cli", ] @@ -11156,7 +11205,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-support", "frame-system", "sc-cli", @@ -11372,7 +11421,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11426,6 +11475,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -11434,7 +11494,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -11444,7 +11504,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -11480,7 +11540,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.9", + "rustix 0.36.10", "windows-sys 0.42.0", ] @@ -11495,9 +11555,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "textwrap" @@ -11507,22 +11567,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -11679,7 +11739,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11759,7 +11819,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -11804,7 +11864,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11994,7 +12054,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.8", + "clap 4.1.11", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12105,9 +12165,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -12244,12 +12304,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -12302,7 +12361,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -12336,7 +12395,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12447,7 +12506,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.5", + "spin 0.9.6", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12561,7 +12620,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.9", + "rustix 0.36.10", "serde", "sha2 0.10.6", "toml", @@ -12641,7 +12700,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.9", + "rustix 0.36.10", ] [[package]] @@ -12672,7 +12731,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.9", + "rustix 0.36.10", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -12949,7 +13008,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "cc", "ipnet", @@ -13041,12 +13100,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -13060,24 +13119,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -13087,9 +13146,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -13099,9 +13158,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -13111,9 +13170,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -13123,15 +13182,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -13141,9 +13200,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winreg" @@ -13268,7 +13327,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index f214535876cf1..a04313752b064 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,7 +19,13 @@ #![warn(missing_docs)] -use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; +use crate::{ + utils::{ + deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, + serialize_result, + }, + PairingError, +}; use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, @@ -89,4 +95,4 @@ pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { let result = ::mul_affine(&base, &scalar); serialize_result(result) -} \ No newline at end of file +} diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 571cafca98832..ef6e941eb6c43 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,7 +19,13 @@ #![warn(missing_docs)] -use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; +use crate::{ + utils::{ + deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, + serialize_result, + }, + PairingError, +}; use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ models::CurveConfig, diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index a0d4e8f7680ca..7f1f5d4381b79 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,7 +19,13 @@ #![warn(missing_docs)] -use crate::{utils::{deserialize_argument, serialize_result}, PairingError}; +use crate::{ + utils::{ + deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, + serialize_result, + }, + PairingError, +}; use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ models::CurveConfig, diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 151111b3af64b..4894dd914ef2c 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -16,4 +16,4 @@ pub enum PairingError { FinalExpInverse, #[codec(index = 3)] MillerLoopCofactor, -} \ No newline at end of file +} diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 352559ca1057a..6d349b7e243af 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1126,13 +1126,15 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { + fn bls12_381_multi_miller_loop( + a: Vec>, + b: Vec>, + ) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec - ) -> Result, PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1167,14 +1169,15 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec> + fn bls12_377_multi_miller_loop( + a: Vec>, + b: Vec>, ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec - ) -> Result, PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1209,28 +1212,19 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec> + fn bw6_761_multi_miller_loop( + a: Vec>, + b: Vec>, ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec - ) -> Result, PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) - } - - /// Compute a projective multiplication on G1 for bw6_761 fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g1(base, scalar) } - - /// Compute a affine multiplication on G1 for bw6_761 - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - sp_arkworks::bw6_761::mul_affine_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bw6_761 fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g2(base, scalar) } From 9fe204ed6d1ba2075932095a38b11f24554556f2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 09:59:00 +0100 Subject: [PATCH 273/364] fix typo --- primitives/arkworks/src/bls12_381.rs | 1 - primitives/arkworks/src/bw6_761.rs | 1 - primitives/io/src/lib.rs | 1 + 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index ef6e941eb6c43..1773cec4b06fd 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -34,7 +34,6 @@ use ark_ec::{ }; use sp_std::vec::Vec; - /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 7f1f5d4381b79..a72292cc1a2de 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -34,7 +34,6 @@ use ark_ec::{ }; use sp_std::vec::Vec; - /// Compute multi miller loop through arkworks pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { multi_miller_loop_generic::(a, b) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 6d349b7e243af..2fb573544eb0c 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1222,6 +1222,7 @@ pub trait EllipticCurves { /// Compute a final exponentiation on bw6_761 fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) + } fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g1(base, scalar) } From 0aa20dfc57e032bb1489a60a5e3956a972d896ec Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 10:31:00 +0100 Subject: [PATCH 274/364] fix imports --- primitives/arkworks/src/bls12_377.rs | 4 ++-- primitives/arkworks/src/bls12_381.rs | 4 ++-- primitives/arkworks/src/bw6_761.rs | 4 ++-- primitives/io/src/lib.rs | 9 +++++++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index a04313752b064..d8f78a883dd28 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -21,8 +21,8 @@ use crate::{ utils::{ - deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, - serialize_result, + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }, PairingError, }; diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 1773cec4b06fd..7791424030759 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -21,8 +21,8 @@ use crate::{ utils::{ - deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, - serialize_result, + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }, PairingError, }; diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index a72292cc1a2de..59bdbec249840 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -21,8 +21,8 @@ use crate::{ utils::{ - deserialize_argument, final_exponentiation_generic, multi_miller_loop_generic, - serialize_result, + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }, PairingError, }; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 2fb573544eb0c..2ad264391868a 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1223,13 +1223,22 @@ pub trait EllipticCurves { fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } + + /// Compute a projective multiplication on G1 for bw6_761 fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g1(base, scalar) } + + /// Compute a projective multiplication on G2 for bw6_761 fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_projective_g2(base, scalar) } + /// Compute a affine multiplication on G1 for bw6_761 + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bw6_761::mul_affine_g1(base, scalar) + } + /// Compute a affine multiplication on G2 for bw6_761 fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { sp_arkworks::bw6_761::mul_affine_g2(base, scalar) From 3f8dd7978ea374bed15f92b122fdb5b86bec0588 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 10:34:01 +0100 Subject: [PATCH 275/364] import coded --- Cargo.lock | 1 + primitives/arkworks/Cargo.toml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index f1825be7eb5a8..24c18942d181d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10305,6 +10305,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-std", ] diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 84810c84f6274..16af2ac3c9b07 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -21,6 +21,7 @@ ark-bw6-761 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } +codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } [features] default = [ "std" ] @@ -34,5 +35,6 @@ std = [ "ark-bw6-761/std", "ark-ed-on-bls12-381/std", "ark-ed-on-bls12-377/std", - "sp-std/std" + "sp-std/std", + "codec/std", ] From 72c52ff842c46ebc019f4938e84abfda5ef2781a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 10:37:06 +0100 Subject: [PATCH 276/364] import codec --- primitives/arkworks/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 4894dd914ef2c..9947dcb35fd8b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] +use codec::{Codec, Decode, Encode}; pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; From c282f6244630674dc390b4891f2e41b95bfd346c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 10:53:20 +0100 Subject: [PATCH 277/364] import PairingError --- primitives/io/src/lib.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 2ad264391868a..b33ca083742a1 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1129,12 +1129,12 @@ pub trait EllipticCurves { fn bls12_381_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1172,12 +1172,12 @@ pub trait EllipticCurves { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1215,12 +1215,12 @@ pub trait EllipticCurves { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, sp_arkworks::PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From d4eb5342f4965c65e694c9469be22035edb8c09b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 12:39:20 +0100 Subject: [PATCH 278/364] fix patches --- Cargo.lock | 53 +++++++++++++++++++++++++++++++++++------------------ Cargo.toml | 7 +------ 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 24c18942d181d..41ee391556269 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -638,7 +638,7 @@ checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] @@ -1713,7 +1713,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] @@ -1730,7 +1730,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] @@ -7936,7 +7936,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] @@ -9874,22 +9874,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.157" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.157" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] @@ -10208,7 +10208,7 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10222,7 +10222,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10235,7 +10235,7 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10249,7 +10249,7 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] @@ -10263,10 +10263,27 @@ dependencies = [ "ark-r1cs-std", "ark-serialize", "ark-std", - "sp-ark-models", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=no-compression)", "sp-ark-utils", ] +[[package]] +name = "sp-ark-models" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "getrandom 0.2.8", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "sp-ark-models" version = "0.4.0" @@ -10323,7 +10340,7 @@ dependencies = [ "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381", - "sp-ark-models", + "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-io", ] @@ -11478,9 +11495,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +checksum = "e8234ae35e70582bfa0f1fedffa6daa248e41dd045310b19800c4a36382c8f60" dependencies = [ "proc-macro2", "quote", @@ -11583,7 +11600,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 612480a3ebe26..93b3937b89b7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,9 +329,4 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -sp-ark-models = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } -sp-ark-ed-on-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", branch = "no-compression" } +sp-arkworks = { path = "primitives/arkworks" } From bb8b3d0bd47c0220f90d2ad788282c59fc95ba54 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 15:38:01 +0100 Subject: [PATCH 279/364] sp-arkworks --- Cargo.lock | 35 +++++++++++++++++------------------ Cargo.toml | 2 +- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 41ee391556269..caed26dbde302 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3468,9 +3468,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -3508,8 +3508,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.8", - "rustix 0.36.10", + "io-lifetimes 1.0.9", + "rustix 0.36.11", "windows-sys 0.45.0", ] @@ -4027,9 +4027,9 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" +checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" dependencies = [ "bs58", "ed25519-dalek", @@ -4037,7 +4037,6 @@ dependencies = [ "multiaddr 0.17.0", "multihash 0.17.0", "prost", - "prost-build", "quick-protobuf", "rand 0.8.5", "thiserror", @@ -4610,7 +4609,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.10", + "rustix 0.36.11", ] [[package]] @@ -8157,13 +8156,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.10" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags 1.3.2", "errno", - "io-lifetimes 1.0.8", + "io-lifetimes 1.0.9", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8931,7 +8930,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.10", + "rustix 0.36.11", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -11558,7 +11557,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.10", + "rustix 0.36.11", "windows-sys 0.42.0", ] @@ -12106,9 +12105,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ "basic-toml", "dissimilar", @@ -12638,7 +12637,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.10", + "rustix 0.36.11", "serde", "sha2 0.10.6", "toml", @@ -12718,7 +12717,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.10", + "rustix 0.36.11", ] [[package]] @@ -12749,7 +12748,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.10", + "rustix 0.36.11", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", diff --git a/Cargo.toml b/Cargo.toml index 93b3937b89b7e..f6f219c8d7f9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,4 +329,4 @@ lto = "fat" codegen-units = 1 [patch.crates-io] -sp-arkworks = { path = "primitives/arkworks" } +sp-arkworks = { path = "./primitives/arkworks" } From 031485baaad7baad1514d2d394243d7daa5ae7a2 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 20 Mar 2023 15:44:28 +0100 Subject: [PATCH 280/364] sp-arkworks --- primitives/io/Cargo.toml | 2 +- primitives/io/src/lib.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index e459c0b2c87e2..cb1541d7a97f1 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -26,7 +26,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-arkworks = { version = "0.4.0", default-features = false, optional = true, path = "../arkworks" } +sp-arkworks = { version = "0.4.0", default-features = false } log = { version = "0.4.17", default-features = false, optional = true } futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index b33ca083742a1..d4e26cd7d5405 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -29,6 +29,7 @@ doc = "Substrate's runtime standard library as compiled without Rust's standard library." )] +use sp_arkworks::PairingError; use sp_std::vec::Vec; #[cfg(feature = "std")] @@ -1129,12 +1130,12 @@ pub trait EllipticCurves { fn bls12_381_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1172,12 +1173,12 @@ pub trait EllipticCurves { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1215,12 +1216,12 @@ pub trait EllipticCurves { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, sp_arkworks::PairingError> { + ) -> Result, PairingError> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, sp_arkworks::PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { sp_arkworks::bw6_761::final_exponentiation(f12) } From 2a5a45d469b5fa2432bb207fa83fbd08af9b4c5b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 12:55:15 +0100 Subject: [PATCH 281/364] use random values for multiplications --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 17585a646beb1..1d107a2a44044 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2234,7 +2234,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] From 7a0e6a17463615c63a2dccfe36d7e772d22c25f1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 13:15:57 +0100 Subject: [PATCH 282/364] cargo update --- Cargo.lock | 86 ++++++++++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5403e13d61f4a..0a265a58b620f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -458,9 +458,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -638,7 +638,7 @@ checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -1713,7 +1713,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -1730,7 +1730,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -3487,9 +3487,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -3527,8 +3527,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.8", - "rustix 0.36.10", + "io-lifetimes 1.0.9", + "rustix 0.36.11", "windows-sys 0.45.0", ] @@ -4047,9 +4047,9 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" +checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" dependencies = [ "bs58", "ed25519-dalek", @@ -4057,7 +4057,6 @@ dependencies = [ "multiaddr 0.17.0", "multihash 0.17.0", "prost", - "prost-build", "quick-protobuf", "rand 0.8.5", "thiserror", @@ -4630,7 +4629,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.10", + "rustix 0.36.11", ] [[package]] @@ -7974,7 +7973,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -8195,13 +8194,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.10" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags 1.3.2", "errno", - "io-lifetimes 1.0.8", + "io-lifetimes 1.0.9", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8969,7 +8968,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.10", + "rustix 0.36.11", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9919,22 +9918,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.157" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.157" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -10248,7 +10247,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10263,7 +10262,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10278,7 +10277,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10292,7 +10291,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10306,7 +10305,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10337,7 +10336,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-ec", "ark-ff", @@ -10353,7 +10352,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#6cd0ba71a5495058245c7f7660a0e5fbd216711f" +source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" dependencies = [ "ark-serialize", "ark-std", @@ -10710,7 +10709,6 @@ dependencies = [ name = "sp-keystore" version = "0.13.0" dependencies = [ - "async-trait", "futures", "merlin", "parity-scale-codec", @@ -11045,7 +11043,7 @@ dependencies = [ "array-bytes", "criterion", "hash-db", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "lazy_static", "memory-db", "nohash-hasher", @@ -11546,9 +11544,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.2" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +checksum = "2c622ae390c9302e214c31013517c2061ecb2699935882c60a9b37f82f8625ae" dependencies = [ "proc-macro2", "quote", @@ -11609,7 +11607,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.10", + "rustix 0.36.11", "windows-sys 0.42.0", ] @@ -11651,7 +11649,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.4", ] [[package]] @@ -12157,9 +12155,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ "basic-toml", "dissimilar", @@ -12204,7 +12202,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.6", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] @@ -12234,9 +12232,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -12690,7 +12688,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.10", + "rustix 0.36.11", "serde", "sha2 0.10.6", "toml", @@ -12770,7 +12768,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.10", + "rustix 0.36.11", ] [[package]] @@ -12801,7 +12799,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.10", + "rustix 0.36.11", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", From 507786424abbabebb979e458585b543b887ec373 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 13:54:57 +0100 Subject: [PATCH 283/364] fix imports --- Cargo.lock | 17 +++++++++++++---- primitives/arkworks/src/bls12_377.rs | 1 - primitives/arkworks/src/bls12_381.rs | 1 - primitives/arkworks/src/bw6_761.rs | 1 - primitives/arkworks/src/lib.rs | 1 - 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a265a58b620f..fe663d2fdf8d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3309,16 +3309,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.46.0", ] [[package]] @@ -3384,7 +3384,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows", + "windows 0.34.0", ] [[package]] @@ -13161,6 +13161,15 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.42.0" diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 417d3f8faea89..22cd093569188 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -32,7 +32,6 @@ use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_bls12_377::Bls12_377; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index bff7feb886114..7791424030759 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -32,7 +32,6 @@ use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_bls12_381::Bls12_381; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index e8bc400a151a5..59bdbec249840 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -32,7 +32,6 @@ use ark_ec::{ pairing::{MillerLoopOutput, Pairing}, short_weierstrass::SWCurveConfig, }; -use ark_bw6_761::BW6_761; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index cddf24dc701a7..9947dcb35fd8b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,5 +1,4 @@ #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Decode, Encode}; use codec::{Codec, Decode, Encode}; pub mod bls12_377; From 1544a0a809fc96326004196ce18426a937ca6234 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 14:09:27 +0100 Subject: [PATCH 284/364] fix imports --- primitives/io/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index fae2f5766f249..343d7de03e0a6 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -84,8 +84,6 @@ use batch_verifier::BatchVerifier; pub use sp_externalities::MultiRemovalResults; -use sp_arkworks::PairingError; - #[cfg(feature = "std")] const LOG_TARGET: &str = "runtime::io"; From 1670d62c500335c7cbe5a453bd99654f5899a91e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 14:29:05 +0100 Subject: [PATCH 285/364] add host functions --- primitives/io/src/lib.rs | 70 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 343d7de03e0a6..638b25e768f4f 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1132,6 +1132,26 @@ pub trait EllipticCurves { sp_arkworks::bls12_381::final_exponentiation(f12) } + /// Compute a projective multiplication on G1 for bls12_381 + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_projective_g1(base, scalar) + } + + /// Compute a projective multiplication on G1 for bls12_381 + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_affine_g1(base, scalar) + } + + /// Compute a projective multiplication on G2 for bls12_381 + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_projective_g2(base, scalar) + } + + /// Compute a affine multiplication on G2 for bls12_381 + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_381::mul_affine_g2(base, scalar) + } + /// Compute a msm on G1 for bls12_381 fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_381::msm_g1(bases, scalars) @@ -1155,6 +1175,26 @@ pub trait EllipticCurves { sp_arkworks::bls12_377::final_exponentiation(f12) } + /// Compute a projective multiplication on G1 for bls12_377 + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_projective_g1(base, scalar) + } + + /// Compute a affine multiplication on G1 for bls12_377 + fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_affine_g1(base, scalar) + } + + /// Compute a projective multiplication on G2 for bls12_377 + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_projective_g2(base, scalar) + } + + /// Compute a affine multiplication on G2 for bls12_377 + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::bls12_377::mul_affine_g2(base, scalar) + } + /// Compute a msm on G1 for bls12_377 fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::bls12_377::msm_g1(bases, scalars) @@ -1208,6 +1248,26 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::msm_g2(bases, bigints) } + /// Compute a short weierstrass affine multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) + } + + /// Compute twisted edwards projective multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) + } + + /// Compute twisted edwards affine multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) + } + + /// Compute short weierstrass projective multiplication on ed_on_bls12_381 + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) + } + /// Compute twisted edwards msm on ed_on_bls12_381 fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) @@ -1218,6 +1278,16 @@ pub trait EllipticCurves { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } + /// Compute affine multiplication on ed_on_bls12_377 + fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_377::mul_affine(base, scalar) + } + + /// Compute projective multiplication on ed_on_bls12_377 + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { + sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) + } + /// Compute msm on ed_on_bls12_377 fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { sp_arkworks::ed_on_bls12_377::msm(bases, scalars) From 7b92f2f40e6b7dbae4ffe95e2cc10f622715da29 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 14:58:50 +0100 Subject: [PATCH 286/364] re-add mul impls --- primitives/arkworks/src/ed_on_bls12_377.rs | 24 ++++++++++- primitives/arkworks/src/ed_on_bls12_381.rs | 47 +++++++++++++++++++++- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 2a6797ab751bf..af5acbd4a3863 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -20,10 +20,32 @@ #![warn(missing_docs)] use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM}; +use ark_ec::{ + models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, +}; use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; use sp_std::vec::Vec; +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication through arkworks +pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) +} + /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 745123a9c854d..f28f2dab3c407 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -21,12 +21,55 @@ use crate::utils::{deserialize_argument, serialize_result}; use ark_ec::{ - models::CurveConfig, short_weierstrass::Affine as SWAffine, - twisted_edwards::Affine as TEAffine, VariableBaseMSM, + models::CurveConfig, + short_weierstrass::{Affine as SWAffine, SWCurveConfig}, + twisted_edwards, + twisted_edwards::{Affine as TEAffine, TECurveConfig}, + VariableBaseMSM, }; use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use sp_std::vec::Vec; +/// Compute a scalar multiplication on G2 through arkworks +pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication through arkworks +pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication through arkworks +pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) +} + /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases From 525b1e00d98be4a38f188f70cf59ae48df561a54 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 15:01:24 +0100 Subject: [PATCH 287/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe663d2fdf8d1..aa36406f7d1ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10247,7 +10247,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10262,7 +10262,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10277,7 +10277,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10291,7 +10291,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10305,7 +10305,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10336,7 +10336,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-ec", "ark-ff", @@ -10352,7 +10352,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7c4f45096f8d1f985ecb3f26f0629e04a1185ca6" +source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" dependencies = [ "ark-serialize", "ark-std", From 9c044bb091b9d315e94c5125b66fbbdcf1519c41 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 17:32:02 +0100 Subject: [PATCH 288/364] cargo update --- Cargo.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa36406f7d1ea..9eb84212b10cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7990,9 +7990,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" dependencies = [ "aho-corasick", "memchr", @@ -8010,9 +8010,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "region" @@ -10247,7 +10247,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10262,7 +10262,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10277,7 +10277,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10291,7 +10291,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10305,7 +10305,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10336,7 +10336,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-ec", "ark-ff", @@ -10352,7 +10352,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#bef5659df60d9cbd281409ffd0f20862c1396983" +source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" dependencies = [ "ark-serialize", "ark-std", From f1a6f60824662283caa45e1b1da8bb34449441dc Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 21 Mar 2023 18:25:30 +0100 Subject: [PATCH 289/364] cargo update --- Cargo.lock | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ecb679fcd15b5..2b895b400eb42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4086,8 +4086,6 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1 0.3.0", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", @@ -13086,7 +13084,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve 0.12.3", "hkdf", "hmac 0.12.1", From dc3bb4f7cc3bd885a929294ed6206e2291f27cc6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 23 Mar 2023 12:42:51 +0100 Subject: [PATCH 290/364] cargo update --- Cargo.lock | 86 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b895b400eb42..d1d6a1eeaae0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -581,22 +581,22 @@ dependencies = [ [[package]] name = "async-io" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock", "autocfg", + "cfg-if", "concurrent-queue", "futures-lite", - "libc", "log", "parking", "polling", + "rustix 0.37.3", "slab", "socket2", "waker-fn", - "windows-sys 0.42.0", ] [[package]] @@ -638,7 +638,7 @@ checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] @@ -1731,7 +1731,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] @@ -1748,7 +1748,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] @@ -2258,6 +2258,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -4077,7 +4088,7 @@ dependencies = [ "instant", "libp2p-identity", "log", - "multiaddr 0.17.0", + "multiaddr 0.17.1", "multihash 0.17.0", "multistream-select", "once_cell", @@ -4136,7 +4147,7 @@ dependencies = [ "bs58", "ed25519-dalek", "log", - "multiaddr 0.17.0", + "multiaddr 0.17.1", "multihash 0.17.0", "prost", "quick-protobuf", @@ -4567,6 +4578,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +[[package]] +name = "linux-raw-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" + [[package]] name = "lite-json" version = "0.2.0" @@ -4890,13 +4907,14 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", "byteorder", "data-encoding", + "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -7697,9 +7715,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ "unicode-ident", ] @@ -8065,7 +8083,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] @@ -8287,7 +8305,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ "bitflags 1.3.2", - "errno", + "errno 0.2.8", "io-lifetimes 0.7.5", "libc", "linux-raw-sys 0.0.46", @@ -8301,13 +8319,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags 1.3.2", - "errno", + "errno 0.2.8", "io-lifetimes 1.0.9", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", ] +[[package]] +name = "rustix" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +dependencies = [ + "bitflags 1.3.2", + "errno 0.3.0", + "io-lifetimes 1.0.9", + "libc", + "linux-raw-sys 0.3.0", + "windows-sys 0.45.0", +] + [[package]] name = "rustls" version = "0.19.1" @@ -10049,7 +10081,7 @@ checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] @@ -10373,7 +10405,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10388,7 +10420,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10403,7 +10435,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10417,7 +10449,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10431,7 +10463,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10462,7 +10494,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-ec", "ark-ff", @@ -10478,7 +10510,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2a3b2481ad6aaad122824b98198812170dc04614" +source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" dependencies = [ "ark-serialize", "ark-std", @@ -11680,9 +11712,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.4" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c622ae390c9302e214c31013517c2061ecb2699935882c60a9b37f82f8625ae" +checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" dependencies = [ "proc-macro2", "quote", @@ -11785,7 +11817,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.4", + "syn 2.0.8", ] [[package]] From 00ae8b9d1ea045076762090f38595851edf8d462 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 23 Mar 2023 13:00:54 +0100 Subject: [PATCH 291/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1d6a1eeaae0b..be363a55746d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10405,7 +10405,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10420,7 +10420,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10435,7 +10435,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10449,7 +10449,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10463,7 +10463,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10494,7 +10494,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-ec", "ark-ff", @@ -10510,7 +10510,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ad444ba940dece3f892387df3095cd4bcc7aa1bd" +source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" dependencies = [ "ark-serialize", "ark-std", From e3acad236260cd7719c1d3d78c66b39f9498631a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 23 Mar 2023 13:08:37 +0100 Subject: [PATCH 292/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be363a55746d7..003a9de08f73e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10405,7 +10405,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10420,7 +10420,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10435,7 +10435,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10449,7 +10449,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10463,7 +10463,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10494,7 +10494,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-ec", "ark-ff", @@ -10510,7 +10510,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#ab353aad3816f71959ca6e96c70173f5c36ac4c6" +source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" dependencies = [ "ark-serialize", "ark-std", From 1e09985ac9bbabd60047d01ece8914191376ed2e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 23 Mar 2023 15:46:34 +0100 Subject: [PATCH 293/364] cargo update --- Cargo.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 003a9de08f73e..ae00f63fedb01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8255,9 +8255,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustc-hash" @@ -9847,9 +9847,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "61471dff9096de1d8b2319efed7162081e96793f5ebb147e50db10d50d648a4d" dependencies = [ "bitvec", "cfg-if", @@ -9861,9 +9861,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +checksum = "219580e803a66b3f05761fd06f1f879a872444e49ce23f73694d26e5a954c7e6" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10405,7 +10405,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10420,7 +10420,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10435,7 +10435,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10449,7 +10449,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10463,7 +10463,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10494,7 +10494,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-ec", "ark-ff", @@ -10510,7 +10510,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#7b4ebd3563504d7698e54d2097dc75333965bbb5" +source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" dependencies = [ "ark-serialize", "ark-std", From 54c6965b7b822c0d851457354008ab320de7a2c4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 24 Mar 2023 15:05:53 +0100 Subject: [PATCH 294/364] PairingError -> () --- primitives/arkworks/src/bls12_377.rs | 4 ++-- primitives/arkworks/src/bls12_381.rs | 4 ++-- primitives/arkworks/src/bw6_761.rs | 4 ++-- primitives/arkworks/src/lib.rs | 11 ----------- primitives/arkworks/src/utils.rs | 4 ++-- primitives/arkworks/test/tests/bls12_377.rs | 4 ++-- primitives/arkworks/test/tests/bls12_381/mod.rs | 4 ++-- primitives/arkworks/test/tests/bw6_761.rs | 4 ++-- primitives/io/src/lib.rs | 12 ++++++------ 9 files changed, 20 insertions(+), 31 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 22cd093569188..4f0ab8bc06665 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -36,12 +36,12 @@ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Result, PairingError> { +pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 7791424030759..d8fb99f2c6d5d 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -35,12 +35,12 @@ use ark_ec::{ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Result, PairingError> { +pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 59bdbec249840..bc49a66845653 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -35,12 +35,12 @@ use ark_ec::{ use sp_std::vec::Vec; /// Compute multi miller loop through arkworks -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, PairingError> { +pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } /// Compute final exponentiation through arkworks -pub fn final_exponentiation(target: Vec) -> Result, PairingError> { +pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 9947dcb35fd8b..79cdbcaeb210b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -7,14 +7,3 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381; mod utils; - -/// Error computing an elliptic curve pairing -#[derive(Encode, Decode, Debug)] -pub enum PairingError { - #[codec(index = 1)] - InternalPanic, - #[codec(index = 2)] - FinalExpInverse, - #[codec(index = 3)] - MillerLoopCofactor, -} diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 83873668036df..4bb9ec349370b 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -18,7 +18,7 @@ pub fn deserialize_argument(argument: &Vec) -> pub fn multi_miller_loop_generic( a_vec: Vec>, b_vec: Vec>, -) -> Result, PairingError> { +) -> Result, ()> { let g1: Vec<_> = a_vec .iter() .map(|elem| deserialize_argument::<::G1Affine>(elem)) @@ -35,7 +35,7 @@ pub fn multi_miller_loop_generic( pub fn final_exponentiation_generic( target: Vec, -) -> Result, PairingError> { +) -> Result, ()> { let target = deserialize_argument::<::TargetField>(&target); let result = Curve::final_exponentiation(MillerLoopOutput(target)); diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 9926767bafc05..ddddc94f87e22 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -9,10 +9,10 @@ impl HostFunctions for Host { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, ()> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } - fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 1dacfb7b312ee..8cb31dd7e6ef9 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -14,10 +14,10 @@ use sp_ark_bls12_381::{ pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, PairingError> { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, ()> { sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } - fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 7ff9d4ee0f8ef..32c6c25b43bca 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -10,10 +10,10 @@ impl HostFunctions for Host { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, ()> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } - fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 638b25e768f4f..8d1179c73095b 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1123,12 +1123,12 @@ pub trait EllipticCurves { fn bls12_381_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, ()> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { sp_arkworks::bls12_381::final_exponentiation(f12) } @@ -1166,12 +1166,12 @@ pub trait EllipticCurves { fn bls12_377_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, ()> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { sp_arkworks::bls12_377::final_exponentiation(f12) } @@ -1209,12 +1209,12 @@ pub trait EllipticCurves { fn bw6_761_multi_miller_loop( a: Vec>, b: Vec>, - ) -> Result, PairingError> { + ) -> Result, ()> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, PairingError> { + fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { sp_arkworks::bw6_761::final_exponentiation(f12) } From cdc6869ee7590d8372b44d8ecf79da3107a7936c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 24 Mar 2023 15:07:53 +0100 Subject: [PATCH 295/364] remove PairingError --- primitives/arkworks/src/bls12_377.rs | 9 +++------ primitives/arkworks/src/bls12_381.rs | 9 +++------ primitives/arkworks/src/bw6_761.rs | 9 +++------ primitives/arkworks/src/utils.rs | 7 ++----- primitives/arkworks/test/tests/bls12_377.rs | 6 +----- primitives/arkworks/test/tests/bls12_381/mod.rs | 1 - primitives/arkworks/test/tests/bw6_761.rs | 6 +----- primitives/io/src/lib.rs | 16 +++------------- 8 files changed, 16 insertions(+), 47 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 4f0ab8bc06665..4868cd49bf855 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -19,12 +19,9 @@ #![warn(missing_docs)] -use crate::{ - utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, - }, - PairingError, +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }; use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index d8fb99f2c6d5d..1f0036d174fd3 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -19,12 +19,9 @@ #![warn(missing_docs)] -use crate::{ - utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, - }, - PairingError, +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }; use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; use ark_ec::{ diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index bc49a66845653..5898efbbb98be 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -19,12 +19,9 @@ #![warn(missing_docs)] -use crate::{ - utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, - }, - PairingError, +use crate::utils::{ + deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, + multi_miller_loop_generic, serialize_result, }; use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; use ark_ec::{ diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 4bb9ec349370b..dd418552d7442 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,4 +1,3 @@ -use crate::PairingError; use ark_ec::pairing::{MillerLoopOutput, Pairing}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -33,16 +32,14 @@ pub fn multi_miller_loop_generic( Ok(serialize_result(result.0)) } -pub fn final_exponentiation_generic( - target: Vec, -) -> Result, ()> { +pub fn final_exponentiation_generic(target: Vec) -> Result, ()> { let target = deserialize_argument::<::TargetField>(&target); let result = Curve::final_exponentiation(MillerLoopOutput(target)); match result { Some(result) => Ok(serialize_result(result)), - None => Err(PairingError::FinalExpInverse), + None => Err(()), } } diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index ddddc94f87e22..0c3b2d5ab8ab7 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -1,15 +1,11 @@ use ark_algebra_test_templates::*; use ark_std::vec::Vec; use sp_ark_bls12_377::HostFunctions; -use sp_arkworks::PairingError; pub struct Host {} impl HostFunctions for Host { - fn bls12_377_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, ()> { + fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 8cb31dd7e6ef9..e42f5ae5481bf 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,4 +1,3 @@ -use sp_arkworks::PairingError; use ark_algebra_test_templates::*; use ark_ff::{fields::Field, UniformRand, Zero}; use sp_ark_models::{AffineRepr, CurveGroup, Group}; diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 32c6c25b43bca..61c3a5733b79b 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -1,16 +1,12 @@ use ark_algebra_test_templates::*; use ark_std::vec::Vec; use sp_ark_bw6_761::HostFunctions; -use sp_arkworks::PairingError; #[derive(PartialEq, Eq)] pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, ()> { + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 8d1179c73095b..0655f278ffbea 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -29,7 +29,6 @@ doc = "Substrate's runtime standard library as compiled without Rust's standard library." )] -use sp_arkworks::PairingError; use sp_std::vec::Vec; #[cfg(feature = "std")] @@ -1120,10 +1119,7 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, ()> { + fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } @@ -1163,10 +1159,7 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, ()> { + fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } @@ -1206,10 +1199,7 @@ pub trait EllipticCurves { } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop( - a: Vec>, - b: Vec>, - ) -> Result, ()> { + fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } From b08e465b79a2cf4f7cc1d400924530ef0ca172e4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 24 Mar 2023 15:09:41 +0100 Subject: [PATCH 296/364] cargo update --- Cargo.lock | 107 +++++++++++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9f21f8754b17a..77a4185b434a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -779,7 +779,7 @@ version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cexpr", "clang-sys", "lazy_static", @@ -799,12 +799,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitflags" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" - [[package]] name = "bitvec" version = "1.0.1" @@ -1120,7 +1114,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.11", + "clap 4.1.13", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1238,7 +1232,7 @@ version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ - "bitflags 1.3.2", + "bitflags", "clap_lex 0.2.4", "indexmap", "textwrap", @@ -1246,11 +1240,11 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.11" +version = "4.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" +checksum = "3c911b090850d79fc64fe9ea01e28e465f65e821e08813ced95bced72f7a8a9b" dependencies = [ - "bitflags 2.0.2", + "bitflags", "clap_derive", "clap_lex 0.3.3", "is-terminal", @@ -1265,20 +1259,19 @@ version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", ] [[package]] name = "clap_derive" -version = "4.1.9" +version = "4.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" +checksum = "9a932373bab67b984c790ddf2c9ca295d8e3af3b7ef92de5a5bacdccdee4b09b" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.8", ] [[package]] @@ -2502,7 +2495,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.11", + "clap 4.1.13", "comfy-table", "frame-benchmarking", "frame-support", @@ -2593,7 +2586,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2662,7 +2655,7 @@ name = "frame-support" version = "4.0.0-dev" dependencies = [ "assert_matches", - "bitflags 1.3.2", + "bitflags", "environmental", "frame-metadata", "frame-support-procedural", @@ -3107,7 +3100,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags 1.3.2", + "bitflags", "libc", "libgit2-sys", "log", @@ -5054,7 +5047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags 1.3.2", + "bitflags", "byteorder", "libc", "netlink-packet-core", @@ -5107,7 +5100,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg-if", "libc", "memoffset 0.6.5", @@ -5119,7 +5112,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg-if", "libc", "memoffset 0.7.1", @@ -5132,7 +5125,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.11", + "clap 4.1.13", "derive_more", "fs_extra", "futures", @@ -5169,7 +5162,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.11", + "clap 4.1.13", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5290,7 +5283,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5349,7 +5342,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "generate-bags", "kitchensink-runtime", ] @@ -5358,7 +5351,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -6020,7 +6013,7 @@ version = "4.0.0-dev" dependencies = [ "array-bytes", "assert_matches", - "bitflags 1.3.2", + "bitflags", "env_logger 0.9.3", "environmental", "frame-benchmarking", @@ -6057,7 +6050,7 @@ dependencies = [ name = "pallet-contracts-primitives" version = "7.0.0" dependencies = [ - "bitflags 1.3.2", + "bitflags", "parity-scale-codec", "scale-info", "sp-runtime", @@ -7550,7 +7543,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags 1.3.2", + "bitflags", "cfg-if", "concurrent-queue", "libc", @@ -8050,7 +8043,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] @@ -8128,7 +8121,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ - "bitflags 1.3.2", + "bitflags", "libc", "mach", "winapi", @@ -8302,7 +8295,7 @@ version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno 0.2.8", "io-lifetimes 0.7.5", "libc", @@ -8316,7 +8309,7 @@ version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno 0.2.8", "io-lifetimes 1.0.9", "libc", @@ -8330,7 +8323,7 @@ version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno 0.3.0", "io-lifetimes 1.0.9", "libc", @@ -8560,7 +8553,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.11", + "clap 4.1.13", "fdlimit", "futures", "futures-timer", @@ -9229,7 +9222,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "async-trait", - "bitflags 1.3.2", + "bitflags", "bytes", "futures", "futures-timer", @@ -9674,7 +9667,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "fs4", "futures", "log", @@ -10013,7 +10006,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -10404,7 +10397,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10419,7 +10412,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10434,7 +10427,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10448,7 +10441,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10462,7 +10455,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10493,7 +10486,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-ec", "ark-ff", @@ -10509,7 +10502,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#0a7ee08b6d7651b07b92637aa7fd24a9fe668625" +source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" dependencies = [ "ark-serialize", "ark-std", @@ -10722,7 +10715,7 @@ version = "7.0.0" dependencies = [ "array-bytes", "base58", - "bitflags 1.3.2", + "bitflags", "blake2", "bounded-collections", "criterion", @@ -10924,7 +10917,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11338,7 +11331,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -11411,7 +11404,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "sc-cli", ] @@ -11439,7 +11432,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.11", + "clap 4.1.13", "frame-support", "frame-system", "sc-cli", @@ -11738,7 +11731,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "system-configuration-sys", ] @@ -12053,7 +12046,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "bitflags 1.3.2", + "bitflags", "bytes", "futures-core", "futures-util", @@ -12288,7 +12281,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.11", + "clap 4.1.13", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -13243,7 +13236,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ "async-trait", - "bitflags 1.3.2", + "bitflags", "bytes", "cc", "ipnet", From 9da264aa6d808b56e41221b79f12bdf0eabd8a9d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 25 Mar 2023 11:36:50 +0100 Subject: [PATCH 297/364] cargo update --- Cargo.lock | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4bbf2e909d7d..f354402ba907c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -556,7 +556,7 @@ dependencies = [ "anstyle", "bstr", "doc-comment", - "predicates 3.0.1", + "predicates 3.0.2", "predicates-core", "predicates-tree", "wait-timeout", @@ -632,13 +632,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.67" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -1271,7 +1271,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -1370,9 +1370,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -1724,7 +1724,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -1741,7 +1741,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -3513,9 +3513,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -7644,9 +7644,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +checksum = "c575290b64d24745b6c57a12a31465f0a66f3a4799686a6921526a33b0797965" dependencies = [ "anstyle", "difflib", @@ -8109,7 +8109,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -8126,9 +8126,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.2" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -10108,7 +10108,7 @@ checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -10435,7 +10435,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10450,7 +10450,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10465,7 +10465,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10479,7 +10479,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10493,7 +10493,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10524,7 +10524,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-ec", "ark-ff", @@ -10540,7 +10540,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#dcedc5acbd7fa621fca8ec9ac5cbdba3bf79177f" +source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" dependencies = [ "ark-serialize", "ark-std", @@ -11742,9 +11742,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" +checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" dependencies = [ "proc-macro2", "quote", @@ -11847,7 +11847,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] From db96f331dcd758fbcac3cacc7d18e9459a17c048 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 28 Mar 2023 22:19:00 +0200 Subject: [PATCH 298/364] cargo update --- Cargo.lock | 281 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 170 insertions(+), 111 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f354402ba907c..0202166c656c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -51,7 +51,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", ] @@ -62,7 +62,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" dependencies = [ "crypto-common", - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -203,12 +203,46 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + [[package]] name = "anstyle" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" version = "1.0.70" @@ -593,7 +627,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.3", + "rustix 0.37.4", "slab", "socket2", "waker-fn", @@ -638,7 +672,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -873,7 +907,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -882,7 +916,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1114,7 +1148,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.13", + "clap 4.2.0", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1184,7 +1218,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1193,7 +1227,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1240,38 +1274,47 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.13" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c911b090850d79fc64fe9ea01e28e465f65e821e08813ced95bced72f7a8a9b" +checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", - "clap_lex 0.3.3", - "is-terminal", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex 0.4.1", "strsim", - "termcolor", ] [[package]] name = "clap_complete" -version = "4.1.5" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" +checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", ] [[package]] name = "clap_derive" -version = "4.1.12" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a932373bab67b984c790ddf2c9ca295d8e3af3b7ef92de5a5bacdccdee4b09b" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -1285,12 +1328,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "codespan-reporting" @@ -1313,6 +1353,21 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys 0.45.0", +] + [[package]] name = "concurrent-queue" version = "2.1.0" @@ -1593,7 +1648,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1605,7 +1660,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1617,7 +1672,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "typenum", ] @@ -1628,7 +1683,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -1702,9 +1757,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -1714,9 +1769,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -1724,24 +1779,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] name = "cxxbridge-flags" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -1945,7 +2000,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -2082,9 +2137,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b0a1222f8072619e8a6b667a854020a03d363738303203c09468b3424a420a" +checksum = "644d3b8674a5fc5b929ae435bca85c2323d85ccb013a5509c2ac9ee11a6284ba" dependencies = [ "der 0.7.1", "elliptic-curve 0.13.2", @@ -2146,7 +2201,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.6", "ff 0.12.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.12.1", "hkdf", "pem-rfc7468", @@ -2167,7 +2222,7 @@ dependencies = [ "crypto-bigint 0.5.1", "digest 0.10.6", "ff 0.13.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.13.0", "pkcs8 0.10.1", "rand_core 0.6.4", @@ -2505,7 +2560,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.13", + "clap 4.2.0", "comfy-table", "frame-benchmarking", "frame-support", @@ -2596,7 +2651,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -3024,9 +3079,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -3534,7 +3589,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -3611,9 +3666,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" @@ -3791,7 +3846,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955890845095ccf31ef83ad41a05aabb4d8cc23dc3cac5a9f5c89cf26dd0da75" dependencies = [ "cfg-if", - "ecdsa 0.16.1", + "ecdsa 0.16.2", "elliptic-curve 0.13.2", "once_cell", "sha2 0.10.6", @@ -4865,9 +4920,9 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", @@ -4880,9 +4935,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", "proc-macro2", @@ -5135,7 +5190,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.13", + "clap 4.2.0", "derive_more", "fs_extra", "futures", @@ -5172,7 +5227,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.13", + "clap 4.2.0", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5293,7 +5348,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5352,7 +5407,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "generate-bags", "kitchensink-runtime", ] @@ -5361,7 +5416,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7741,9 +7796,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.53" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" +checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" dependencies = [ "unicode-ident", ] @@ -7898,9 +7953,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" dependencies = [ "bytes", "rand 0.8.5", @@ -8109,7 +8164,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -8354,9 +8409,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.3" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +checksum = "c348b5dc624ecee40108aa2922fed8bad89d7fcc2b9f8cb18f632898ac4a37f9" dependencies = [ "bitflags", "errno 0.3.0", @@ -8588,7 +8643,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.13", + "clap 4.2.0", "fdlimit", "futures", "futures-timer", @@ -9702,7 +9757,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "fs4", "futures", "log", @@ -9988,7 +10043,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8 0.9.0", "subtle", "zeroize", @@ -10002,7 +10057,7 @@ checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" dependencies = [ "base16ct 0.2.0", "der 0.7.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8 0.10.1", "subtle", "zeroize", @@ -10093,29 +10148,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -10435,7 +10490,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10450,7 +10505,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10465,7 +10520,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10479,7 +10534,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10493,7 +10548,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10524,7 +10579,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-ec", "ark-ff", @@ -10540,7 +10595,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#8977ff99ed1fe3464e97e03217cecc632c062f4d" +source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" dependencies = [ "ark-serialize", "ark-std", @@ -10955,7 +11010,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11312,9 +11367,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" +checksum = "c0959fd6f767df20b231736396e4f602171e00d95205676286e79d4a4eb67bef" [[package]] name = "spki" @@ -11442,7 +11497,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "sc-cli", ] @@ -11470,7 +11525,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.13", + "clap 4.2.0", "frame-support", "frame-system", "sc-cli", @@ -11742,9 +11797,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" +checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" dependencies = [ "proc-macro2", "quote", @@ -11847,7 +11902,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -11978,14 +12033,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", @@ -11998,13 +12052,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.11", ] [[package]] @@ -12319,7 +12373,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.13", + "clap 4.2.0", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12467,7 +12521,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -12510,6 +12564,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "1.3.0" @@ -12771,7 +12831,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e61a7006b0fdf24f6bbe8dcfdad5ca1b350de80061fb2827f31c82fbbb9565a" dependencies = [ - "spin 0.9.6", + "spin 0.9.7", "wasmi_arena", "wasmi_core 0.12.0", "wasmparser-nostd", @@ -13587,23 +13647,22 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure", + "syn 2.0.11", ] [[package]] From e81c093469c7ae06418c97dd2ea1dd65c2e45274 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 5 Apr 2023 11:34:37 +0200 Subject: [PATCH 299/364] reduce boilerplate code --- primitives/arkworks/src/bls12_377.rs | 49 ++++----------- primitives/arkworks/src/bls12_381.rs | 47 ++++---------- primitives/arkworks/src/bw6_761.rs | 47 ++++---------- primitives/arkworks/src/ed_on_bls12_377.rs | 34 ++-------- primitives/arkworks/src/ed_on_bls12_381.rs | 66 +++---------------- primitives/arkworks/src/lib.rs | 1 - primitives/arkworks/src/utils.rs | 73 ++++++++++++++++++---- 7 files changed, 111 insertions(+), 206 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 4868cd49bf855..58b3e5c407c8e 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,15 +20,10 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, -}; -use ark_bls12_377::{g1, g2, Bls12_377, G1Affine, G1Projective, G2Affine, G2Projective}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, + final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, + multi_miller_loop_generic, }; +use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks @@ -44,50 +39,30 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - msm_g1_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - msm_g2_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +/// Compute a scalar multiplication on G1 through arkworks +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 1f0036d174fd3..ff3c0e434dd8f 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,15 +20,10 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, -}; -use ark_bls12_381::{g1, g2, Bls12_381, G1Affine, G1Projective, G2Affine, G2Projective}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, + final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, + multi_miller_loop_generic, }; +use ark_bls12_381::{g1, g2, Bls12_381}; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks @@ -43,50 +38,30 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - msm_g1_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - msm_g2_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 5898efbbb98be..6c3e76649832b 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,15 +20,10 @@ #![warn(missing_docs)] use crate::utils::{ - deserialize_argument, final_exponentiation_generic, msm_g1_generic, msm_g2_generic, - multi_miller_loop_generic, serialize_result, -}; -use ark_bw6_761::{G1Affine, G1Projective, G2Affine, G2Projective, BW6_761}; -use ark_ec::{ - models::CurveConfig, - pairing::{MillerLoopOutput, Pairing}, - short_weierstrass::SWCurveConfig, + final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, + multi_miller_loop_generic, }; +use ark_bw6_761::{g1, g2, BW6_761}; use sp_std::vec::Vec; /// Compute multi miller loop through arkworks @@ -43,50 +38,30 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - msm_g1_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - msm_g2_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index af5acbd4a3863..2d4244816bf88 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,45 +19,21 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{ - models::CurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, VariableBaseMSM, -}; -use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective}; +use crate::utils::{msm_te_generic, mul_affine_te_generic, mul_projective_te_generic}; +use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) + mul_projective_te_generic::(base, scalar) } /// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_te_generic::(base, scalar) } /// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = ::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_te_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index f28f2dab3c407..9319c48cf7088 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -19,85 +19,39 @@ #![warn(missing_docs)] -use crate::utils::{deserialize_argument, serialize_result}; -use ark_ec::{ - models::CurveConfig, - short_weierstrass::{Affine as SWAffine, SWCurveConfig}, - twisted_edwards, - twisted_edwards::{Affine as TEAffine, TECurveConfig}, - VariableBaseMSM, +use crate::utils::{ + msm_sw_generic, msm_te_generic, mul_affine_generic, mul_affine_te_generic, + mul_projective_generic, mul_projective_te_generic, }; -use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; +use ark_ed_on_bls12_381::JubjubConfig; use sp_std::vec::Vec; /// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) + mul_projective_generic::(base, scalar) } /// Compute a scalar multiplication through arkworks pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_generic::(base, scalar) } /// Compute a scalar multiplication on G2 through arkworks pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_projective(&base, &scalar); - - serialize_result(result) + mul_projective_te_generic::(base, scalar) } /// Compute a scalar multiplication through arkworks pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); - - let result = ::mul_affine(&base, &scalar); - - serialize_result(result) + mul_affine_te_generic::(base, scalar) } /// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = ::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_te_generic::(bases, scalars) } /// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); - - let result = ::msm(&bases, &scalars).unwrap(); - - serialize_result(result) + msm_sw_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 79cdbcaeb210b..f7a8e04ba025b 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -1,6 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Codec, Decode, Encode}; pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index dd418552d7442..e228c8adad44a 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,4 +1,11 @@ -use ark_ec::pairing::{MillerLoopOutput, Pairing}; +use ark_ec::{ + pairing::{MillerLoopOutput, Pairing}, + short_weierstrass, + short_weierstrass::SWCurveConfig, + twisted_edwards, + twisted_edwards::TECurveConfig, + CurveConfig, VariableBaseMSM, +}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; @@ -43,30 +50,74 @@ pub fn final_exponentiation_generic(target: Vec) -> Result(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_sw_generic(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| deserialize_argument::<::G1Affine>(a)) + .map(|a| deserialize_argument::>(a)) + .collect(); + let scalars: Vec<_> = scalars + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); - let scalars: Vec<_> = - scalars.iter().map(|a| deserialize_argument::(a)).collect(); let result = - <::G1 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); serialize_result(result) } -pub fn msm_g2_generic(bases: Vec>, scalars: Vec>) -> Vec { +pub fn msm_te_generic(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() - .map(|a| deserialize_argument::<::G2Affine>(a)) + .map(|a| deserialize_argument::>(a)) + .collect(); + let scalars: Vec<_> = scalars + .iter() + .map(|a| deserialize_argument::<::ScalarField>(a)) .collect(); - let scalars: Vec<_> = - scalars.iter().map(|a| deserialize_argument::(a)).collect(); let result = - <::G2 as ark_ec::VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + + serialize_result(result) +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_generic(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_projective_te_generic(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_projective(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_generic(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_affine(&base, &scalar); + + serialize_result(result) +} + +/// Compute a scalar multiplication on G2 through arkworks +pub fn mul_affine_te_generic(base: Vec, scalar: Vec) -> Vec { + let base = deserialize_argument::>(&base); + let scalar = deserialize_argument::>(&scalar); + + let result = ::mul_affine(&base, &scalar); serialize_result(result) } From 7ef2caa5ca175eef70688fc6fafab41ced445fe6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 5 Apr 2023 11:35:36 +0200 Subject: [PATCH 300/364] cargo update --- Cargo.lock | 966 +++++++++++++++++++++++------------------------------ 1 file changed, 423 insertions(+), 543 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f1b3fa6ccba0d..4a0c3726ff772 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -51,7 +51,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", ] @@ -62,7 +62,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher 0.4.3", "cpufeatures", ] @@ -121,7 +121,7 @@ checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ "aead 0.5.1", "aes 0.8.2", - "cipher 0.4.4", + "cipher 0.4.3", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -203,51 +203,11 @@ dependencies = [ "winapi", ] -[[package]] -name = "anstream" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-wincon", - "concolor-override", - "concolor-query", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" - -[[package]] -name = "anstyle-parse" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-wincon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" -dependencies = [ - "anstyle", - "windows-sys 0.45.0", -] - [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -393,7 +353,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -406,7 +366,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -471,7 +431,7 @@ checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -492,9 +452,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" @@ -526,9 +486,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -548,7 +508,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -560,7 +520,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -572,7 +532,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -583,14 +543,13 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.10" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" +checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" dependencies = [ - "anstyle", "bstr", "doc-comment", - "predicates 3.0.2", + "predicates", "predicates-core", "predicates-tree", "wait-timeout", @@ -615,31 +574,32 @@ dependencies = [ [[package]] name = "async-io" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", - "cfg-if", "concurrent-queue", "futures-lite", + "libc", "log", "parking", "polling", - "rustix 0.37.4", "slab", "socket2", "waker-fn", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ "event-listener", + "futures-lite", ] [[package]] @@ -661,18 +621,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] @@ -764,9 +724,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" +checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" dependencies = [ "serde", ] @@ -818,7 +778,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn", ] [[package]] @@ -901,7 +861,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -910,7 +870,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -958,9 +918,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -997,9 +957,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" [[package]] name = "byteorder" @@ -1026,9 +986,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" dependencies = [ "serde", ] @@ -1050,7 +1010,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.16", "serde", "serde_json", "thiserror", @@ -1142,7 +1102,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.0", + "clap 4.1.8", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1153,9 +1113,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ "iana-time-zone", "js-sys", @@ -1212,7 +1172,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1221,14 +1181,14 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", @@ -1268,47 +1228,39 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ - "clap_builder", + "bitflags", "clap_derive", + "clap_lex 0.3.2", + "is-terminal", "once_cell", -] - -[[package]] -name = "clap_builder" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" -dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex 0.4.1", "strsim", + "termcolor", ] [[package]] name = "clap_complete" -version = "4.2.0" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" +checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] @@ -1322,9 +1274,12 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +dependencies = [ + "os_str_bytes", +] [[package]] name = "codespan-reporting" @@ -1347,21 +1302,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "concolor-override" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" -dependencies = [ - "windows-sys 0.45.0", -] - [[package]] name = "concurrent-queue" version = "2.1.0" @@ -1379,9 +1319,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" [[package]] name = "core-foundation" @@ -1419,9 +1359,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -1642,7 +1582,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1654,7 +1594,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1666,7 +1606,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "typenum", ] @@ -1677,7 +1617,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -1688,7 +1628,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1706,7 +1646,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher 0.4.3", ] [[package]] @@ -1751,9 +1691,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -1763,9 +1703,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", @@ -1773,31 +1713,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.11", + "syn", ] [[package]] name = "cxxbridge-flags" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] name = "darling" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1805,27 +1745,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn", ] [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1851,7 +1791,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn", ] [[package]] @@ -1891,11 +1831,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "displaydoc", "nom", "num-bigint", @@ -1911,7 +1851,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1922,7 +1862,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1943,7 +1883,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1953,7 +1893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn 1.0.109", + "syn", ] [[package]] @@ -1964,7 +1904,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -1994,7 +1934,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -2057,7 +1997,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2086,9 +2026,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -2108,7 +2048,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2131,9 +2071,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644d3b8674a5fc5b929ae435bca85c2323d85ccb013a5509c2ac9ee11a6284ba" +checksum = "d1b0a1222f8072619e8a6b667a854020a03d363738303203c09468b3424a420a" dependencies = [ "der 0.7.1", "elliptic-curve 0.13.2", @@ -2195,7 +2135,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.6", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.12.1", "hkdf", "pem-rfc7468", @@ -2216,7 +2156,7 @@ dependencies = [ "crypto-bigint 0.5.1", "digest 0.10.6", "ff 0.13.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.13.0", "pkcs8 0.10.1", "rand_core 0.6.4", @@ -2234,7 +2174,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2254,7 +2194,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2300,17 +2240,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "errno" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.45.0", -] - [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -2346,7 +2275,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2401,9 +2330,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.19" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" [[package]] name = "file-per-thread-logger" @@ -2554,7 +2483,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.0", + "clap 4.1.8", "comfy-table", "frame-benchmarking", "frame-support", @@ -2619,7 +2548,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 1.0.109", + "syn", "trybuild", ] @@ -2645,7 +2574,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2757,7 +2686,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2768,7 +2697,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2777,7 +2706,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -2921,9 +2850,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" dependencies = [ "futures-channel", "futures-core", @@ -2936,9 +2865,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" dependencies = [ "futures-core", "futures-sink", @@ -2946,15 +2875,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" dependencies = [ "futures-core", "futures-task", @@ -2964,9 +2893,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" [[package]] name = "futures-lite" @@ -2985,13 +2914,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3007,15 +2936,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" [[package]] name = "futures-timer" @@ -3025,9 +2954,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" dependencies = [ "futures-channel", "futures-core", @@ -3074,9 +3003,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -3415,9 +3344,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3454,16 +3383,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.54" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.46.0", + "winapi", ] [[package]] @@ -3529,7 +3458,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.34.0", + "windows", ] [[package]] @@ -3558,14 +3487,14 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -3584,7 +3513,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -3632,11 +3561,10 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.9" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ - "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -3661,19 +3589,19 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.9", - "rustix 0.36.11", + "io-lifetimes 1.0.5", + "rustix 0.36.8", "windows-sys 0.45.0", ] @@ -3688,9 +3616,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -3783,7 +3711,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -3841,7 +3769,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955890845095ccf31ef83ad41a05aabb4d8cc23dc3cac5a9f5c89cf26dd0da75" dependencies = [ "cfg-if", - "ecdsa 0.16.2", + "ecdsa 0.16.1", "elliptic-curve 0.13.2", "once_cell", "sha2 0.10.6", @@ -4062,9 +3990,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" +checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" dependencies = [ "bytes", "futures", @@ -4078,7 +4006,7 @@ dependencies = [ "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise", + "libp2p-noise 0.41.0", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -4130,30 +4058,36 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.1" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" +checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-identity", "log", - "multiaddr 0.17.1", + "multiaddr 0.17.0", "multihash 0.17.0", "multistream-select", "once_cell", "parking_lot 0.12.1", "pin-project", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", "rw-stream-sink", + "sec1 0.3.0", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", + "zeroize", ] [[package]] @@ -4191,24 +4125,6 @@ dependencies = [ "void", ] -[[package]] -name = "libp2p-identity" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" -dependencies = [ - "bs58", - "ed25519-dalek", - "log", - "multiaddr 0.17.1", - "multihash 0.17.0", - "prost", - "quick-protobuf", - "rand 0.8.5", - "thiserror", - "zeroize", -] - [[package]] name = "libp2p-kad" version = "0.42.1" @@ -4312,6 +4228,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "libp2p-noise" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" +dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core 0.39.0", + "log", + "once_cell", + "prost", + "prost-build", + "rand 0.8.5", + "sha2 0.10.6", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", +] + [[package]] name = "libp2p-ping" version = "0.41.0" @@ -4330,15 +4269,15 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core 0.39.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4397,7 +4336,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4418,14 +4357,13 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0" +version = "0.1.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.1", - "libp2p-identity", + "libp2p-core 0.39.0", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4451,9 +4389,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha" +version = "0.4.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" dependencies = [ "async-trait", "asynchronous-codec", @@ -4462,10 +4400,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.38.0", - "libp2p-noise", + "libp2p-core 0.39.0", + "libp2p-noise 0.42.0", "log", - "multihash 0.16.3", + "multihash 0.17.0", "prost", "prost-build", "prost-codec", @@ -4631,12 +4569,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" -[[package]] -name = "linux-raw-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" - [[package]] name = "lite-json" version = "0.2.0" @@ -4781,7 +4713,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.11", + "rustix 0.36.8", ] [[package]] @@ -4915,29 +4847,29 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if", "downcast", "fragile", "lazy_static", "mockall_derive", - "predicates 2.1.5", + "predicates", "predicates-tree", ] [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -4960,14 +4892,13 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" dependencies = [ "arrayref", "byteorder", "data-encoding", - "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -5028,7 +4959,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] @@ -5054,9 +4985,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.2" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" dependencies = [ "approx", "matrixmultiply", @@ -5076,7 +5007,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -5143,9 +5074,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" dependencies = [ "bytes", "futures", @@ -5185,7 +5116,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.0", + "clap 4.1.8", "derive_more", "fs_extra", "futures", @@ -5222,7 +5153,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.0", + "clap 4.1.8", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5343,7 +5274,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5402,7 +5333,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "generate-bags", "kitchensink-runtime", ] @@ -5411,7 +5342,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5687,7 +5618,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", ] [[package]] @@ -5722,9 +5653,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "output_vt100" @@ -6149,7 +6080,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7032,7 +6963,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 1.0.109", + "syn", ] [[package]] @@ -7340,7 +7271,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7411,9 +7342,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -7465,9 +7396,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.6" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7475,9 +7406,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7485,22 +7416,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7534,7 +7465,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7623,18 +7554,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.6.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ "autocfg", - "bitflags", "cfg-if", - "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.9", - "windows-sys 0.45.0", + "wepoll-ffi", + "windows-sys 0.42.0", ] [[package]] @@ -7692,29 +7621,17 @@ dependencies = [ "regex", ] -[[package]] -name = "predicates" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c575290b64d24745b6c57a12a31465f0a66f3a4799686a6921526a33b0797965" -dependencies = [ - "anstyle", - "difflib", - "itertools", - "predicates-core", -] - [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", "termtree", @@ -7734,12 +7651,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn", ] [[package]] @@ -7774,7 +7691,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "version_check", ] @@ -7802,9 +7719,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.54" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ "unicode-ident", ] @@ -7843,7 +7760,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7873,7 +7790,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 1.0.109", + "syn", "tempfile", "which", ] @@ -7901,7 +7818,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -7928,15 +7845,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-protobuf" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" -dependencies = [ - "byteorder", -] - [[package]] name = "quickcheck" version = "1.0.3" @@ -7959,9 +7867,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" dependencies = [ "bytes", "rand 0.8.5", @@ -7977,9 +7885,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.26" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -8088,9 +7996,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.7.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ "either", "rayon-core", @@ -8098,9 +8006,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -8155,22 +8063,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] @@ -8187,9 +8095,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -8207,9 +8115,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "region" @@ -8342,9 +8250,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -8373,7 +8281,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.16", ] [[package]] @@ -8392,7 +8300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ "bitflags", - "errno 0.2.8", + "errno", "io-lifetimes 0.7.5", "libc", "linux-raw-sys 0.0.46", @@ -8401,32 +8309,18 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.11" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", - "errno 0.2.8", - "io-lifetimes 1.0.9", + "errno", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", ] -[[package]] -name = "rustix" -version = "0.37.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c348b5dc624ecee40108aa2922fed8bad89d7fcc2b9f8cb18f632898ac4a37f9" -dependencies = [ - "bitflags", - "errno 0.3.0", - "io-lifetimes 1.0.9", - "libc", - "linux-raw-sys 0.3.0", - "windows-sys 0.45.0", -] - [[package]] name = "rustls" version = "0.19.1" @@ -8475,9 +8369,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rusty-fork" @@ -8503,9 +8397,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -8640,7 +8534,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -8649,7 +8543,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.0", + "clap 4.1.8", "fdlimit", "futures", "futures-timer", @@ -9189,7 +9083,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.11", + "rustix 0.36.8", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9765,7 +9659,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "fs4", "futures", "log", @@ -9869,7 +9763,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -9937,9 +9831,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.4.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61471dff9096de1d8b2319efed7162081e96793f5ebb147e50db10d50d648a4d" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", "cfg-if", @@ -9951,14 +9845,14 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.4.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219580e803a66b3f05761fd06f1f879a872444e49ce23f73694d26e5a954c7e6" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10007,9 +9901,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.5" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "sct" @@ -10051,7 +9945,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.9.0", "subtle", "zeroize", @@ -10065,7 +9959,7 @@ checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" dependencies = [ "base16ct 0.2.0", "der 0.7.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.10.1", "subtle", "zeroize", @@ -10141,9 +10035,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -10156,29 +10050,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", "ryu", @@ -10364,9 +10258,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -10417,7 +10311,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -10876,7 +10770,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.109", + "syn", ] [[package]] @@ -10893,7 +10787,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11019,7 +10913,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11114,7 +11008,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11338,7 +11232,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 1.0.109", + "syn", ] [[package]] @@ -11376,9 +11270,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.7" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0959fd6f767df20b231736396e4f602171e00d95205676286e79d4a4eb67bef" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11452,7 +11346,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11480,7 +11374,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn", ] [[package]] @@ -11506,7 +11400,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "sc-cli", ] @@ -11534,7 +11428,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.0", + "clap 4.1.8", "frame-support", "frame-system", "sc-cli", @@ -11750,7 +11644,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -11804,17 +11698,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "synstructure" version = "0.12.6" @@ -11823,7 +11706,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "unicode-xid", ] @@ -11869,7 +11752,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.11", + "rustix 0.36.8", "windows-sys 0.42.0", ] @@ -11884,9 +11767,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "textwrap" @@ -11896,22 +11779,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] @@ -12042,13 +11925,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" dependencies = [ "autocfg", "bytes", "libc", + "memchr", "mio", "num_cpus", "parking_lot 0.12.1", @@ -12056,18 +11940,18 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", ] [[package]] @@ -12192,7 +12076,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -12382,7 +12266,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.2.0", + "clap 4.1.8", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12416,9 +12300,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.80" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" +checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" dependencies = [ "basic-toml", "dissimilar", @@ -12493,15 +12377,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" @@ -12530,7 +12414,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -12573,12 +12457,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - [[package]] name = "uuid" version = "1.3.0" @@ -12638,11 +12516,12 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] @@ -12695,7 +12574,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-shared", ] @@ -12729,7 +12608,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12742,9 +12621,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" dependencies = [ "leb128", ] @@ -12840,7 +12719,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e61a7006b0fdf24f6bbe8dcfdad5ca1b350de80061fb2827f31c82fbbb9565a" dependencies = [ - "spin 0.9.7", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.12.0", "wasmparser-nostd", @@ -12955,7 +12834,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.11", + "rustix 0.36.8", "serde", "sha2 0.10.6", "toml", @@ -13035,7 +12914,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.11", + "rustix 0.36.8", ] [[package]] @@ -13066,7 +12945,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.11", + "rustix 0.36.8", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -13087,9 +12966,9 @@ dependencies = [ [[package]] name = "wast" -version = "55.0.0" +version = "54.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" +checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" dependencies = [ "leb128", "memchr", @@ -13099,9 +12978,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.61" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" +checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" dependencies = [ "wast", ] @@ -13215,7 +13094,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.2.0", + "der-parser 8.1.0", "elliptic-curve 0.12.3", "hkdf", "hmac 0.12.1", @@ -13357,6 +13236,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + [[package]] name = "which" version = "4.4.0" @@ -13428,15 +13316,6 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -13444,12 +13323,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.1", ] [[package]] @@ -13463,24 +13342,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" @@ -13490,9 +13369,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" @@ -13502,9 +13381,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" @@ -13514,9 +13393,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" @@ -13526,15 +13405,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" @@ -13544,9 +13423,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" @@ -13613,10 +13492,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "base64 0.13.1", "data-encoding", - "der-parser 8.2.0", + "der-parser 8.1.0", "lazy_static", "nom", "oid-registry 0.6.1", @@ -13656,22 +13535,23 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn", + "synstructure", ] [[package]] From 1501c510af6eb91a3b4d397c9a6cf6c53813f95f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 5 Apr 2023 11:51:43 +0200 Subject: [PATCH 301/364] update comments --- primitives/arkworks/src/bls12_377.rs | 9 --------- primitives/arkworks/src/bls12_381.rs | 8 -------- primitives/arkworks/src/bw6_761.rs | 8 -------- primitives/arkworks/src/ed_on_bls12_377.rs | 3 --- primitives/arkworks/src/ed_on_bls12_381.rs | 6 ------ primitives/arkworks/src/utils.rs | 14 +++++++++----- 6 files changed, 9 insertions(+), 39 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 58b3e5c407c8e..871089d9cf3f4 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -26,43 +26,34 @@ use crate::utils::{ use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; -/// Compute multi miller loop through arkworks - pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } -/// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a scalar multiplication on G1 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index ff3c0e434dd8f..70491d6e1b27b 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -26,42 +26,34 @@ use crate::utils::{ use ark_bls12_381::{g1, g2, Bls12_381}; use sp_std::vec::Vec; -/// Compute multi miller loop through arkworks pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } -/// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 6c3e76649832b..080ea0fb4a633 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -26,42 +26,34 @@ use crate::utils::{ use ark_bw6_761::{g1, g2, BW6_761}; use sp_std::vec::Vec; -/// Compute multi miller loop through arkworks pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { multi_miller_loop_generic::(a, b) } -/// Compute final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 2d4244816bf88..928c221d8313f 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -23,17 +23,14 @@ use crate::utils::{msm_te_generic, mul_affine_te_generic, mul_projective_te_gene use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; -/// Compute a scalar multiplication on G2 through arkworks pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { mul_projective_te_generic::(base, scalar) } -/// Compute a scalar multiplication through arkworks pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { mul_affine_te_generic::(base, scalar) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { msm_te_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 9319c48cf7088..f641e7fa4613b 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -26,32 +26,26 @@ use crate::utils::{ use ark_ed_on_bls12_381::JubjubConfig; use sp_std::vec::Vec; -/// Compute a scalar multiplication on G2 through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { mul_projective_generic::(base, scalar) } -/// Compute a scalar multiplication through arkworks pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { mul_affine_generic::(base, scalar) } -/// Compute a scalar multiplication on G2 through arkworks pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { mul_projective_te_generic::(base, scalar) } -/// Compute a scalar multiplication through arkworks pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { mul_affine_te_generic::(base, scalar) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { msm_te_generic::(bases, scalars) } -/// Compute a multi scalar multiplication on G! through arkworks pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { msm_sw_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index e228c8adad44a..afe0e8f17d2cd 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -9,18 +9,19 @@ use ark_ec::{ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{io::Cursor, vec, vec::Vec}; -pub fn serialize_result(result: impl CanonicalSerialize) -> Vec { +fn serialize_result(result: impl CanonicalSerialize) -> Vec { let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; let mut cursor = Cursor::new(&mut serialized_result[..]); result.serialize_uncompressed(&mut cursor).unwrap(); serialized_result } -pub fn deserialize_argument(argument: &Vec) -> Field { +fn deserialize_argument(argument: &Vec) -> Field { let cursor = Cursor::new(argument); Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() } +/// Compute a multi miller loop through arkworks pub fn multi_miller_loop_generic( a_vec: Vec>, b_vec: Vec>, @@ -39,6 +40,7 @@ pub fn multi_miller_loop_generic( Ok(serialize_result(result.0)) } +/// Compute a final exponentiation through arkworks pub fn final_exponentiation_generic(target: Vec) -> Result, ()> { let target = deserialize_argument::<::TargetField>(&target); @@ -50,6 +52,7 @@ pub fn final_exponentiation_generic(target: Vec) -> Result(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() @@ -66,6 +69,7 @@ pub fn msm_sw_generic(bases: Vec>, scalars: Vec(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() @@ -82,7 +86,7 @@ pub fn msm_te_generic(bases: Vec>, scalars: Vec(base: Vec, scalar: Vec) -> Vec { let base = deserialize_argument::>(&base); let scalar = deserialize_argument::>(&scalar); @@ -92,7 +96,7 @@ pub fn mul_projective_generic(base: Vec, scalar: Vec(base: Vec, scalar: Vec) -> Vec { let base = deserialize_argument::>(&base); let scalar = deserialize_argument::>(&scalar); @@ -102,7 +106,7 @@ pub fn mul_projective_te_generic(base: Vec, scalar: Ve serialize_result(result) } -/// Compute a scalar multiplication on G2 through arkworks +/// Compute a affine scalar multiplication through arkworks pub fn mul_affine_generic(base: Vec, scalar: Vec) -> Vec { let base = deserialize_argument::>(&base); let scalar = deserialize_argument::>(&scalar); From 9b3c36df7704fc659f46ad135ac526dd6697ce3c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 8 Apr 2023 17:07:02 +0200 Subject: [PATCH 302/364] cargo update --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6d84563c6daa2..71b160be52e2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,7 +359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -372,7 +372,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -437,7 +437,7 @@ checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1858,7 +1858,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] From ca487ec8598ba371702cd1cdd22b143c8640cdb8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 13 Apr 2023 14:16:11 +0200 Subject: [PATCH 303/364] optimize code quality --- primitives/arkworks/src/utils.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index afe0e8f17d2cd..b18f00d7425d6 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -35,9 +35,9 @@ pub fn multi_miller_loop_generic( .map(|elem| deserialize_argument::<::G2Affine>(elem)) .collect(); - let result = Curve::multi_miller_loop(g1, g2); + let result = Curve::multi_miller_loop(g1, g2).0; - Ok(serialize_result(result.0)) + Ok(serialize_result(result)) } /// Compute a final exponentiation through arkworks @@ -46,10 +46,7 @@ pub fn final_exponentiation_generic(target: Vec) -> Result Ok(serialize_result(result)), - None => Err(()), - } + result.map(serialize_result).ok_or(()) } /// Compute a multi scalar multiplication for short_weierstrass through arkworks From 70bcea0fa239a602ff9f567264cc961f0f76bc36 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 20 Apr 2023 09:57:33 +0200 Subject: [PATCH 304/364] use ark_scale (#13954) * use ark_scale * fix tests * fix tests * cleanup & comments * use correct PR branch --- Cargo.lock | 1089 ++++++++++------- primitives/arkworks/Cargo.toml | 2 + primitives/arkworks/src/bls12_377.rs | 22 +- primitives/arkworks/src/bls12_381.rs | 22 +- primitives/arkworks/src/bw6_761.rs | 22 +- primitives/arkworks/src/ed_on_bls12_377.rs | 9 +- primitives/arkworks/src/ed_on_bls12_381.rs | 18 +- primitives/arkworks/src/utils.rs | 192 +-- primitives/arkworks/test/tests/bls12_377.rs | 18 +- .../arkworks/test/tests/bls12_381/mod.rs | 23 +- primitives/arkworks/test/tests/bw6_761.rs | 18 +- .../arkworks/test/tests/ed_on_bls12_377.rs | 8 +- .../arkworks/test/tests/ed_on_bls12_381.rs | 16 +- primitives/arkworks/test/tests/mod.rs | 5 + primitives/io/src/lib.rs | 60 +- 15 files changed, 896 insertions(+), 628 deletions(-) create mode 100644 primitives/arkworks/test/tests/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 78120280a65e2..8717747317f0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -51,18 +51,18 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", ] [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.3", + "cipher 0.4.4", "cpufeatures", ] @@ -119,9 +119,9 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ - "aead 0.5.1", + "aead 0.5.2", "aes 0.8.2", - "cipher 0.4.3", + "cipher 0.4.4", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -153,7 +153,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", "once_cell", "version_check", ] @@ -165,7 +165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", - "getrandom 0.2.8", + "getrandom 0.2.9", "once_cell", "version_check", ] @@ -203,17 +203,60 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + [[package]] name = "anstyle" -version = "0.3.5" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" + +[[package]] +name = "anstyle-parse" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -417,6 +460,16 @@ dependencies = [ "tracing-subscriber 0.2.25", ] +[[package]] +name = "ark-scale" +version = "0.0.2" +source = "git+https://github.com/w3f/ark-scale#ded339ee875fbb8901d89ab3ea6f1e0ccde2f842" +dependencies = [ + "ark-serialize", + "ark-std", + "parity-scale-codec", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -458,9 +511,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -492,9 +545,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -543,20 +596,20 @@ dependencies = [ [[package]] name = "asn1_der" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] name = "assert_cmd" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" +checksum = "86d6b683edf8d1119fe420a94f8a7e389239666aa72e65495d91c00462510151" dependencies = [ "anstyle", "bstr", "doc-comment", - "predicates 3.0.2", + "predicates 3.0.3", "predicates-core", "predicates-tree", "wait-timeout", @@ -581,39 +634,38 @@ dependencies = [ [[package]] name = "async-io" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock", "autocfg", + "cfg-if", "concurrent-queue", "futures-lite", - "libc", "log", "parking", "polling", + "rustix 0.37.12", "slab", "socket2", "waker-fn", - "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] name = "async-stream" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", @@ -622,24 +674,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -657,9 +709,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "atty" @@ -731,9 +783,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" +checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" dependencies = [ "serde", ] @@ -868,7 +920,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -877,7 +929,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -925,9 +977,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -964,9 +1016,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" @@ -993,9 +1045,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -1011,13 +1063,13 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -1109,7 +1161,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.8", + "clap 4.2.3", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1120,9 +1172,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -1179,7 +1231,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1188,14 +1240,14 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -1212,9 +1264,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -1235,39 +1287,47 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "49f9152d70e42172fdb87de2efd7327160beee37886027cf86f30a233d5b30b4" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", - "clap_lex 0.3.2", - "is-terminal", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e067b220911598876eb55d52725ddcc201ffe3f0904018195973bc5b012ea2ca" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex 0.4.1", "strsim", - "termcolor", ] [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", ] [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -1281,12 +1341,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "codespan-reporting" @@ -1298,6 +1355,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "comfy-table" version = "6.1.4" @@ -1311,9 +1374,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ "crossbeam-utils", ] @@ -1326,9 +1389,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "core-foundation" @@ -1342,9 +1405,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core2" @@ -1366,9 +1429,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -1536,9 +1599,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1589,7 +1652,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1601,7 +1664,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1613,7 +1676,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "typenum", ] @@ -1624,7 +1687,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -1653,7 +1716,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher 0.4.4", ] [[package]] @@ -1698,9 +1761,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -1710,9 +1773,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -1720,31 +1783,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "cxxbridge-flags" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "darling" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -1752,9 +1815,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -1766,9 +1829,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", @@ -1814,9 +1877,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" +checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed" dependencies = [ "const-oid", "zeroize", @@ -1838,11 +1901,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -1941,7 +2004,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1951,6 +2014,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer 0.10.4", + "const-oid", "crypto-common", "subtle", ] @@ -2033,9 +2097,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -2078,14 +2142,15 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.1" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b0a1222f8072619e8a6b667a854020a03d363738303203c09468b3424a420a" +checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" dependencies = [ - "der 0.7.1", - "elliptic-curve 0.13.2", + "der 0.7.3", + "digest 0.10.6", + "elliptic-curve 0.13.4", "rfc6979 0.4.0", - "signature 2.0.0", + "signature 2.1.0", ] [[package]] @@ -2142,7 +2207,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.6", "ff 0.12.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.12.1", "hkdf", "pem-rfc7468", @@ -2155,19 +2220,19 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" dependencies = [ "base16ct 0.2.0", "crypto-bigint 0.5.1", "digest 0.10.6", "ff 0.13.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.13.0", - "pkcs8 0.10.1", + "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1 0.7.1", + "sec1 0.7.2", "subtle", "zeroize", ] @@ -2186,22 +2251,22 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -2249,13 +2314,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2348,9 +2413,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" [[package]] name = "file-per-thread-logger" @@ -2364,14 +2429,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", "redox_syscall 0.2.16", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2501,7 +2566,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.2.3", "comfy-table", "frame-benchmarking", "frame-support", @@ -2566,7 +2631,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 2.0.14", + "syn 2.0.15", "trybuild", ] @@ -2592,7 +2657,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2704,7 +2769,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -2715,7 +2780,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -2724,7 +2789,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -2918,9 +2983,9 @@ checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ "fastrand", "futures-core", @@ -2939,7 +3004,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -3022,9 +3087,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -3054,9 +3119,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "js-sys", @@ -3158,9 +3223,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -3363,9 +3428,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -3402,16 +3467,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.48.0", ] [[package]] @@ -3463,9 +3528,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" +checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" dependencies = [ "async-io", "core-foundation", @@ -3477,7 +3542,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows", + "windows 0.34.0", ] [[package]] @@ -3511,9 +3576,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -3532,7 +3597,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -3580,12 +3645,13 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ + "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -3608,20 +3674,20 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", - "rustix 0.36.8", - "windows-sys 0.45.0", + "io-lifetimes 1.0.10", + "rustix 0.37.12", + "windows-sys 0.48.0", ] [[package]] @@ -3635,9 +3701,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" @@ -3783,13 +3849,13 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955890845095ccf31ef83ad41a05aabb4d8cc23dc3cac5a9f5c89cf26dd0da75" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", - "ecdsa 0.16.1", - "elliptic-curve 0.13.2", + "ecdsa 0.16.6", + "elliptic-curve 0.13.4", "once_cell", "sha2 0.10.6", ] @@ -3969,9 +4035,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libgit2-sys" @@ -4009,14 +4075,14 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.8", + "getrandom 0.2.9", "instant", "libp2p-core 0.38.0", "libp2p-dns", @@ -4025,7 +4091,7 @@ dependencies = [ "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise 0.41.0", + "libp2p-noise", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -4077,36 +4143,30 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", - "multiaddr 0.17.0", + "multiaddr 0.17.1", "multihash 0.17.0", "multistream-select", "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1 0.3.0", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] @@ -4144,6 +4204,24 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.1", + "multihash 0.17.0", + "prost", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" version = "0.42.1" @@ -4247,29 +4325,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-noise" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core 0.39.0", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - [[package]] name = "libp2p-ping" version = "0.41.0" @@ -4288,15 +4343,15 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.2" +version = "0.7.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.39.0", + "libp2p-core 0.38.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4376,13 +4431,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.0", + "libp2p-core 0.39.1", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4408,9 +4464,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha.2" +version = "0.4.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" dependencies = [ "async-trait", "asynchronous-codec", @@ -4419,10 +4475,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.39.0", - "libp2p-noise 0.42.0", + "libp2p-core 0.38.0", + "libp2p-noise", "log", - "multihash 0.17.0", + "multihash 0.16.3", "prost", "prost-build", "prost-codec", @@ -4590,9 +4646,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +checksum = "3f508063cc7bb32987c71511216bd5a32be15bccb6a80b52df8b9d7f01fc3aa2" [[package]] name = "lite-json" @@ -4734,11 +4790,11 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.36.8", + "rustix 0.37.12", ] [[package]] @@ -4872,9 +4928,9 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", @@ -4887,9 +4943,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", "proc-macro2", @@ -4917,13 +4973,14 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", "byteorder", "data-encoding", + "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -5010,9 +5067,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -5099,9 +5156,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", "futures", @@ -5141,7 +5198,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.8", + "clap 4.2.3", "derive_more", "fs_extra", "futures", @@ -5178,7 +5235,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.8", + "clap 4.2.3", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5300,7 +5357,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5359,7 +5416,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "generate-bags", "kitchensink-runtime", ] @@ -5368,7 +5425,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5644,7 +5701,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] @@ -5679,9 +5736,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" @@ -6106,7 +6163,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -6989,7 +7046,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -7314,9 +7371,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -7368,9 +7425,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -7422,9 +7479,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" dependencies = [ "thiserror", "ucd-trie", @@ -7432,9 +7489,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.5" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" dependencies = [ "pest", "pest_generator", @@ -7442,22 +7499,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.5" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "pest_meta" -version = "2.5.5" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" dependencies = [ "once_cell", "pest", @@ -7524,12 +7581,12 @@ dependencies = [ [[package]] name = "pkcs8" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d2820d87d2b008616e5c27212dd9e0e694fb4c6b522de06094106813328cb49" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.1", - "spki 0.7.0", + "der 0.7.3", + "spki 0.7.1", ] [[package]] @@ -7580,16 +7637,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.5.2" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite 0.2.9", + "windows-sys 0.48.0", ] [[package]] @@ -7649,9 +7708,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c575290b64d24745b6c57a12a31465f0a66f3a4799686a6921526a33b0797965" +checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" dependencies = [ "anstyle", "difflib", @@ -7667,9 +7726,9 @@ checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -7689,9 +7748,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.23" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", "syn 1.0.109", @@ -7803,9 +7862,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", "prost-derive", @@ -7813,9 +7872,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", "heck", @@ -7848,9 +7907,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", @@ -7861,9 +7920,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ "prost", ] @@ -7883,6 +7942,15 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -7905,9 +7973,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" dependencies = [ "bytes", "rand 0.8.5", @@ -7995,7 +8063,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -8034,9 +8102,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -8044,9 +8112,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -8103,29 +8171,29 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -8297,9 +8365,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -8328,7 +8396,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -8356,13 +8424,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "e0af200a3324fa5bcd922e84e9b55a298ea9f431a489f01961acdebc6e908f25" dependencies = [ "bitflags", - "errno 0.2.8", - "io-lifetimes 1.0.5", + "errno 0.3.1", + "io-lifetimes 1.0.10", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8370,16 +8438,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.7" +version = "0.37.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" +checksum = "722529a737f5a942fdbac3a46cee213053196737c5eaa3386d52e85b786f2659" dependencies = [ "bitflags", - "errno 0.3.0", - "io-lifetimes 1.0.5", + "errno 0.3.1", + "io-lifetimes 1.0.10", "libc", - "linux-raw-sys 0.3.1", - "windows-sys 0.45.0", + "linux-raw-sys 0.3.2", + "windows-sys 0.48.0", ] [[package]] @@ -8430,9 +8498,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rusty-fork" @@ -8458,9 +8526,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safe-mix" @@ -8595,7 +8663,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -8604,7 +8672,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.2.3", "fdlimit", "futures", "futures-timer", @@ -9144,7 +9212,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.8", + "rustix 0.36.12", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9720,7 +9788,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "fs4", "futures", "log", @@ -9824,7 +9892,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -9962,9 +10030,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "sct" @@ -10006,7 +10074,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8 0.9.0", "subtle", "zeroize", @@ -10014,14 +10082,14 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" dependencies = [ "base16ct 0.2.0", - "der 0.7.1", - "generic-array 0.14.6", - "pkcs8 0.10.1", + "der 0.7.3", + "generic-array 0.14.7", + "pkcs8 0.10.2", "subtle", "zeroize", ] @@ -10096,9 +10164,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -10111,29 +10179,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -10211,9 +10279,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "54c2bb1a323307527314a36bfb73f24febb08ce2b8a554bf4ffd6f51ad15198c" dependencies = [ "digest 0.10.6", "keccak", @@ -10255,9 +10323,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ "digest 0.10.6", "rand_core 0.6.4", @@ -10265,9 +10333,9 @@ dependencies = [ [[package]] name = "simba" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", @@ -10384,7 +10452,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -10465,14 +10533,16 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "parity-scale-codec", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", "sp-ark-utils", "sp-arkworks", ] @@ -10480,14 +10550,16 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-bls12-381", "ark-ec", "ark-ff", + "ark-scale", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "parity-scale-codec", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", "sp-ark-utils", "sp-arkworks", ] @@ -10495,13 +10567,15 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-bw6-761", "ark-ff", + "ark-scale", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "parity-scale-codec", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", "sp-ark-utils", "sp-arkworks", ] @@ -10509,28 +10583,32 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "parity-scale-codec", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "parity-scale-codec", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", "sp-ark-utils", ] @@ -10545,7 +10623,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "getrandom 0.2.8", + "getrandom 0.2.9", "itertools", "num-traits", "zeroize", @@ -10554,14 +10632,14 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-ec", "ark-ff", "ark-serialize", "ark-std", "derivative", - "getrandom 0.2.8", + "getrandom 0.2.9", "itertools", "num-traits", "zeroize", @@ -10570,7 +10648,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#783bb6f0cb1313af8481225e037e3e043ea8e732" +source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" dependencies = [ "ark-serialize", "ark-std", @@ -10587,6 +10665,7 @@ dependencies = [ "ark-ed-on-bls12-377", "ark-ed-on-bls12-381", "ark-ff", + "ark-scale", "ark-serialize", "ark-std", "parity-scale-codec", @@ -10843,7 +10922,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -10860,7 +10939,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -10996,7 +11075,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11091,7 +11170,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -11316,7 +11395,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -11354,9 +11433,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spki" @@ -11370,12 +11449,12 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0445c905640145c7ea8c1993555957f65e7c46d0535b91ba501bc9bfc85522f" +checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" dependencies = [ "base64ct", - "der 0.7.1", + "der 0.7.3", ] [[package]] @@ -11484,7 +11563,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "sc-cli", ] @@ -11526,7 +11605,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.2.3", "frame-support", "frame-system", "sc-cli", @@ -11742,7 +11821,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -11798,9 +11877,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.14" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -11861,7 +11940,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.7", + "rustix 0.37.12", "windows-sys 0.45.0", ] @@ -11876,9 +11955,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "textwrap" @@ -11888,22 +11967,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -12059,7 +12138,7 @@ checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -12409,7 +12488,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.1.8", + "clap 4.2.3", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12445,9 +12524,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.77" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ "basic-toml", "dissimilar", @@ -12522,15 +12601,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -12559,7 +12638,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -12602,13 +12681,19 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -12661,12 +12746,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -12766,9 +12850,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] @@ -12864,7 +12948,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e61a7006b0fdf24f6bbe8dcfdad5ca1b350de80061fb2827f31c82fbbb9565a" dependencies = [ - "spin 0.9.5", + "spin 0.9.8", "wasmi_arena", "wasmi_core 0.12.0", "wasmparser-nostd", @@ -12979,7 +13063,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.8", + "rustix 0.36.12", "serde", "sha2 0.10.6", "toml 0.5.11", @@ -13059,7 +13143,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.8", + "rustix 0.36.12", ] [[package]] @@ -13090,7 +13174,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.8", + "rustix 0.36.12", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -13111,9 +13195,9 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.1" +version = "56.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +checksum = "6b54185c051d7bbe23757d50fe575880a2426a2f06d2e9f6a10fd9a4a42920c0" dependencies = [ "leb128", "memchr", @@ -13123,9 +13207,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.60" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +checksum = "56681922808216ab86d96bb750f70d500b5a7800e41564290fd46bb773581299" dependencies = [ "wast", ] @@ -13239,7 +13323,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve 0.12.3", "hkdf", "hmac 0.12.1", @@ -13381,15 +13465,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "which" version = "4.4.0" @@ -13461,19 +13536,28 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -13482,29 +13566,59 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" @@ -13514,9 +13628,15 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" @@ -13526,9 +13646,15 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" @@ -13538,9 +13664,15 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" @@ -13550,15 +13682,27 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" @@ -13568,9 +13712,15 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" @@ -13646,10 +13796,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", @@ -13680,32 +13830,31 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "yasna" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ "time 0.3.20", ] [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure", + "syn 2.0.15", ] [[package]] @@ -13748,9 +13897,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 16af2ac3c9b07..86b82f28705ea 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -22,6 +22,7 @@ ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } +ark-scale = { git = "https://github.com/w3f/ark-scale", default-features = false } [features] default = [ "std" ] @@ -37,4 +38,5 @@ std = [ "ark-ed-on-bls12-377/std", "sp-std/std", "codec/std", + "ark-scale/std", ] diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 871089d9cf3f4..7855ee92e97a2 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -26,34 +26,42 @@ use crate::utils::{ use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { +/// Compute a multi miller loop through arkworks +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { multi_miller_loop_generic::(a, b) } +/// Compute a final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 70491d6e1b27b..bd87c43cb08c2 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -26,34 +26,42 @@ use crate::utils::{ use ark_bls12_381::{g1, g2, Bls12_381}; use sp_std::vec::Vec; -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { +/// Compute a multi miller loop through arkworks +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { multi_miller_loop_generic::(a, b) } +/// Compute a final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 080ea0fb4a633..880a9ba475182 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -26,34 +26,42 @@ use crate::utils::{ use ark_bw6_761::{g1, g2, BW6_761}; use sp_std::vec::Vec; -pub fn multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { +/// Compute a multi miller loop through arkworks +pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { multi_miller_loop_generic::(a, b) } +/// Compute a final exponentiation through arkworks pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -pub fn msm_g1(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn msm_g2(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 +pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 +pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 928c221d8313f..9d04a101af36f 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -23,14 +23,17 @@ use crate::utils::{msm_te_generic, mul_affine_te_generic, mul_projective_te_gene use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; -pub fn mul_projective(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for twisted_edwards through arkworks +pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -pub fn mul_affine(base: Vec, scalar: Vec) -> Vec { +/// Compute a scalar multiplication for twisted_edwards through arkworks +pub fn mul_affine(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_te_generic::(base, scalar) } -pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar mulitplication for twisted_edwards through arkworks +pub fn msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index f641e7fa4613b..f730e08a2b161 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -26,26 +26,32 @@ use crate::utils::{ use ark_ed_on_bls12_381::JubjubConfig; use sp_std::vec::Vec; -pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for short_weierstrass through arkworks +pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Vec { +/// Compute a affine scalar multiplication for short_weierstrass through arkworks +pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_generic::(base, scalar) } -pub fn te_mul_projective(base: Vec, scalar: Vec) -> Vec { +/// Compute a projective scalar multiplication for twisted_edwards through arkworks +pub fn te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { +/// Compute a scalar multiplication for twisted_edwards through arkworks +pub fn te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { mul_affine_te_generic::(base, scalar) } -pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar mulitplication for twisted_edwards through arkworks +pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } -pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { +/// Compute a multi scalar multiplication for short_weierstrass through arkworks +pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index b18f00d7425d6..19ae564a0e020 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -1,124 +1,150 @@ use ark_ec::{ - pairing::{MillerLoopOutput, Pairing}, + pairing::{MillerLoopOutput, Pairing, PairingOutput}, short_weierstrass, short_weierstrass::SWCurveConfig, twisted_edwards, twisted_edwards::TECurveConfig, CurveConfig, VariableBaseMSM, }; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -fn serialize_result(result: impl CanonicalSerialize) -> Vec { - let mut serialized_result = vec![0u8; result.serialized_size(Compress::No)]; - let mut cursor = Cursor::new(&mut serialized_result[..]); - result.serialize_uncompressed(&mut cursor).unwrap(); - serialized_result -} +use ark_std::vec::Vec; +use codec::{Decode, Encode}; -fn deserialize_argument(argument: &Vec) -> Field { - let cursor = Cursor::new(argument); - Field::deserialize_with_mode(cursor, Compress::No, Validate::No).unwrap() -} +const HOST_CALL: ark_scale::Usage = ark_scale::HOST_CALL; +type ArkScale = ark_scale::ArkScale; -/// Compute a multi miller loop through arkworks -pub fn multi_miller_loop_generic( - a_vec: Vec>, - b_vec: Vec>, +pub(crate) fn multi_miller_loop_generic( + g1: Vec, + g2: Vec, ) -> Result, ()> { - let g1: Vec<_> = a_vec - .iter() - .map(|elem| deserialize_argument::<::G1Affine>(elem)) - .collect(); - let g2: Vec<_> = b_vec - .iter() - .map(|elem| deserialize_argument::<::G2Affine>(elem)) - .collect(); - - let result = Curve::multi_miller_loop(g1, g2).0; - - Ok(serialize_result(result)) + let g1 = + ::G1Affine>> as Decode>::decode(&mut g1.clone().as_slice()) + .map_err(|_| ())?; + let g2 = + ::G2Affine>> as Decode>::decode(&mut g2.clone().as_slice()) + .map_err(|_| ())?; + + let result = Curve::multi_miller_loop(g1.0, g2.0).0; + + let result: ArkScale<::TargetField> = result.into(); + Ok(::TargetField> as Encode>::encode(&result)) } -/// Compute a final exponentiation through arkworks -pub fn final_exponentiation_generic(target: Vec) -> Result, ()> { - let target = deserialize_argument::<::TargetField>(&target); +pub(crate) fn final_exponentiation_generic(target: Vec) -> Result, ()> { + let target = ::TargetField> as Decode>::decode( + &mut target.clone().as_slice(), + ) + .map_err(|_| ())?; - let result = Curve::final_exponentiation(MillerLoopOutput(target)); + let result = Curve::final_exponentiation(MillerLoopOutput(target.0)).ok_or(())?; - result.map(serialize_result).ok_or(()) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks -pub fn msm_sw_generic(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); +pub(crate) fn msm_sw_generic( + bases: Vec, + scalars: Vec, +) -> Result, ()> { + let bases = >> as Decode>::decode( + &mut bases.clone().as_slice(), + ) + .map_err(|_| ())?; + let scalars = ::ScalarField>> as Decode>::decode( + &mut scalars.clone().as_slice(), + ) + .map_err(|_| ())?; let result = - as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + as VariableBaseMSM>::msm(&bases.0, &scalars.0) + .map_err(|_| ())?; - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a multi scalar mulitplication for twisted_edwards through arkworks -pub fn msm_te_generic(bases: Vec>, scalars: Vec>) -> Vec { - let bases: Vec<_> = bases - .iter() - .map(|a| deserialize_argument::>(a)) - .collect(); - let scalars: Vec<_> = scalars - .iter() - .map(|a| deserialize_argument::<::ScalarField>(a)) - .collect(); +pub(crate) fn msm_te_generic( + bases: Vec, + scalars: Vec, +) -> Result, ()> { + let bases = >> as Decode>::decode( + &mut bases.clone().as_slice(), + ) + .map_err(|_| ())?; + let scalars = ::ScalarField>> as Decode>::decode( + &mut scalars.clone().as_slice(), + ) + .map_err(|_| ())?; let result = - as VariableBaseMSM>::msm(&bases, &scalars).unwrap(); + as VariableBaseMSM>::msm(&bases.0, &scalars.0).unwrap(); - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a projective scalar multiplication on G2 through arkworks -pub fn mul_projective_generic(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); +pub(crate) fn mul_projective_generic( + base: Vec, + scalar: Vec, +) -> Result, ()> { + let base = > as Decode>::decode( + &mut base.clone().as_slice(), + ) + .map_err(|_| ())?; + let scalar = + > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base.0, &scalar.0); - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a projective scalar multiplication for twisted_edwards through arkworks -pub fn mul_projective_te_generic(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); +pub(crate) fn mul_projective_te_generic( + base: Vec, + scalar: Vec, +) -> Result, ()> { + let base = > as Decode>::decode( + &mut base.clone().as_slice(), + ) + .map_err(|_| ())?; + let scalar = + > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; - let result = ::mul_projective(&base, &scalar); + let result = ::mul_projective(&base.0, &scalar.0); - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a affine scalar multiplication through arkworks -pub fn mul_affine_generic(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); +pub(crate) fn mul_affine_generic( + base: Vec, + scalar: Vec, +) -> Result, ()> { + let base = > as Decode>::decode( + &mut base.clone().as_slice(), + ) + .map_err(|_| ())?; + let scalar = + > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base.0, &scalar.0); - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } -/// Compute a scalar multiplication on G2 through arkworks -pub fn mul_affine_te_generic(base: Vec, scalar: Vec) -> Vec { - let base = deserialize_argument::>(&base); - let scalar = deserialize_argument::>(&scalar); +pub(crate) fn mul_affine_te_generic( + base: Vec, + scalar: Vec, +) -> Result, ()> { + let base = + > as Decode>::decode(&mut base.clone().as_slice()) + .map_err(|_| ())?; + let scalar = + > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; - let result = ::mul_affine(&base, &scalar); + let result = ::mul_affine(&base.0, &scalar.0); - serialize_result(result) + let result: ArkScale> = result.into(); + Ok(> as Encode>::encode(&result)) } diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 0c3b2d5ab8ab7..a3a79540df9a7 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -5,18 +5,30 @@ use sp_ark_bls12_377::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) } - fn bls12_377_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) } - fn bls12_377_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) } + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) + } + fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_affine_g1(base, scalar) + } + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) + } + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_affine_g2(base, scalar) + } } test_group!(g1; sp_ark_bls12_377::G1Projective; sw); diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index e42f5ae5481bf..ed4630c48ec87 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,30 +1,41 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, UniformRand, Zero}; -use sp_ark_models::{AffineRepr, CurveGroup, Group}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec, vec::Vec, One}; - +use sp_ark_models::{AffineRepr, CurveGroup, Group}; use sp_ark_bls12_381::{ - Fq, Fq2, Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, + fq::Fq, fq2::Fq2, fr::Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, }; pub struct Host {} impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec> ) -> Result, ()> { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) } - fn bls12_381_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) } - fn bls12_381_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) + } + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_affine_g1(base, scalar) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) + } + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_affine_g2(base, scalar) + } } type G1Projective = G1Projective_Host; diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 61c3a5733b79b..e09b9a342a819 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -6,18 +6,30 @@ use sp_ark_bw6_761::HostFunctions; pub struct Host; impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) } - fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) } - fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) } + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) + } + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) + } + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_affine_g1(base, scalar) + } + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_affine_g2(base, scalar) + } } test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 8b4a4d3d13784..9bbfdcf78bb99 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -5,9 +5,15 @@ use sp_ark_ed_on_bls12_377::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } + fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_mul_affine(base, scalar) + } + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) + } } test_group!(te; sp_ark_ed_on_bls12_377::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index a3bd0b5a82847..030ecd792ef55 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -5,12 +5,24 @@ use sp_ark_ed_on_bls12_381::HostFunctions; pub struct Host {} impl HostFunctions for Host { - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) } - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) } + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_affine(base, scalar) + } + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_te_mul_affine(base, scalar) + } + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_projective(base, scalar) + } } test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs new file mode 100644 index 0000000000000..e99ccc69281f3 --- /dev/null +++ b/primitives/arkworks/test/tests/mod.rs @@ -0,0 +1,5 @@ +mod bls12_377; +mod bls12_381; +mod bw6_761; +mod ed_on_bls12_377; +mod ed_on_bls12_381; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index df58d4dab105a..03ce7563c6037 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1146,7 +1146,7 @@ pub trait Crypto { #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_arkworks::bls12_381::multi_miller_loop(a, b) } @@ -1156,37 +1156,37 @@ pub trait EllipticCurves { } /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_381::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_381::mul_affine_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_381 - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_381::mul_projective_g2(base, scalar) } /// Compute a affine multiplication on G2 for bls12_381 - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_381::mul_affine_g2(base, scalar) } /// Compute a msm on G1 for bls12_381 - fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 - fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_arkworks::bls12_377::multi_miller_loop(a, b) } @@ -1196,37 +1196,37 @@ pub trait EllipticCurves { } /// Compute a projective multiplication on G1 for bls12_377 - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_377::mul_projective_g1(base, scalar) } /// Compute a affine multiplication on G1 for bls12_377 - fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_377::mul_affine_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_377 - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_377::mul_projective_g2(base, scalar) } /// Compute a affine multiplication on G2 for bls12_377 - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_377::mul_affine_g2(base, scalar) } /// Compute a msm on G1 for bls12_377 - fn bls12_377_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 - fn bls12_377_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { + fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_377::msm_g2(bases, scalars) } /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec>, b: Vec>) -> Result, ()> { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { sp_arkworks::bw6_761::multi_miller_loop(a, b) } @@ -1236,77 +1236,77 @@ pub trait EllipticCurves { } /// Compute a projective multiplication on G1 for bw6_761 - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bw6_761::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bw6_761 - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bw6_761::mul_projective_g2(base, scalar) } /// Compute a affine multiplication on G1 for bw6_761 - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { + fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bw6_761::mul_affine_g1(base, scalar) } /// Compute a affine multiplication on G2 for bw6_761 - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { + fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bw6_761::mul_affine_g2(base, scalar) } /// Compute a msm on G1 for bw6_761 - fn bw6_761_msm_g1(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { sp_arkworks::bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 - fn bw6_761_msm_g2(bases: Vec>, bigints: Vec>) -> Vec { + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { sp_arkworks::bw6_761::msm_g2(bases, bigints) } /// Compute a short weierstrass affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) } /// Compute twisted edwards projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) } /// Compute twisted edwards affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) } /// Compute short weierstrass projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) } /// Compute twisted edwards msm on ed_on_bls12_381 - fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) } /// Compute short weierstrass msm on ed_on_bls12_381 - fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } /// Compute affine multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_377::mul_affine(base, scalar) } /// Compute projective multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Vec { + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) } /// Compute msm on ed_on_bls12_377 - fn ed_on_bls12_377_msm(bases: Vec>, scalars: Vec>) -> Vec { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_377::msm(bases, scalars) } } From 2f8579e6a8b4ebdc5eaa7342b925f6ce8861579f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 21 Apr 2023 09:29:07 +0200 Subject: [PATCH 305/364] hazmat --- Cargo.lock | 105 ++++++++++++++----------------- primitives/arkworks/Cargo.toml | 2 +- primitives/arkworks/src/utils.rs | 33 +++++----- 3 files changed, 66 insertions(+), 74 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8717747317f0e..6ae1a3d499280 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -463,8 +463,9 @@ dependencies = [ [[package]] name = "ark-scale" version = "0.0.2" -source = "git+https://github.com/w3f/ark-scale#ded339ee875fbb8901d89ab3ea6f1e0ccde2f842" +source = "git+https://github.com/w3f/ark-scale#ddd0b655b639cd91b49aff2fe29b9ccfc92903e1" dependencies = [ + "ark-ec", "ark-serialize", "ark-std", "parity-scale-codec", @@ -646,7 +647,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.12", + "rustix 0.37.13", "slab", "socket2", "waker-fn", @@ -1161,7 +1162,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.3", + "clap 4.2.4", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1287,9 +1288,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.3" +version = "4.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f9152d70e42172fdb87de2efd7327160beee37886027cf86f30a233d5b30b4" +checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" dependencies = [ "clap_builder", "clap_derive", @@ -1298,9 +1299,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.3" +version = "4.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e067b220911598876eb55d52725ddcc201ffe3f0904018195973bc5b012ea2ca" +checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" dependencies = [ "anstream", "anstyle", @@ -1315,7 +1316,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", ] [[package]] @@ -1877,9 +1878,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed" +checksum = "86b14af2045fa69ed2b7a48934bebb842d0f33e73e96e78766ecb14bb5347a11" dependencies = [ "const-oid", "zeroize", @@ -2146,7 +2147,7 @@ version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" dependencies = [ - "der 0.7.3", + "der 0.7.4", "digest 0.10.6", "elliptic-curve 0.13.4", "rfc6979 0.4.0", @@ -2566,7 +2567,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.3", + "clap 4.2.4", "comfy-table", "frame-benchmarking", "frame-support", @@ -2657,7 +2658,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -3686,7 +3687,7 @@ checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.10", - "rustix 0.37.12", + "rustix 0.37.13", "windows-sys 0.48.0", ] @@ -4646,9 +4647,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f508063cc7bb32987c71511216bd5a32be15bccb6a80b52df8b9d7f01fc3aa2" +checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c" [[package]] name = "lite-json" @@ -4794,7 +4795,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.12", + "rustix 0.37.13", ] [[package]] @@ -5198,7 +5199,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.3", + "clap 4.2.4", "derive_more", "fs_extra", "futures", @@ -5235,7 +5236,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.3", + "clap 4.2.4", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5357,7 +5358,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5416,7 +5417,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "generate-bags", "kitchensink-runtime", ] @@ -5425,7 +5426,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7585,7 +7586,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.3", + "der 0.7.4", "spki 0.7.1", ] @@ -8438,15 +8439,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.12" +version = "0.37.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722529a737f5a942fdbac3a46cee213053196737c5eaa3386d52e85b786f2659" +checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0" dependencies = [ "bitflags", "errno 0.3.1", "io-lifetimes 1.0.10", "libc", - "linux-raw-sys 0.3.2", + "linux-raw-sys 0.3.3", "windows-sys 0.48.0", ] @@ -8672,7 +8673,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.3", + "clap 4.2.4", "fdlimit", "futures", "futures-timer", @@ -9788,7 +9789,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "fs4", "futures", "log", @@ -10087,7 +10088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" dependencies = [ "base16ct 0.2.0", - "der 0.7.3", + "der 0.7.4", "generic-array 0.14.7", "pkcs8 0.10.2", "subtle", @@ -10533,16 +10534,14 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale", "ark-serialize", "ark-std", - "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", "sp-arkworks", ] @@ -10550,16 +10549,14 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-bls12-381", "ark-ec", "ark-ff", - "ark-scale", "ark-serialize", "ark-std", - "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", "sp-arkworks", ] @@ -10567,15 +10564,13 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-bw6-761", "ark-ff", - "ark-scale", "ark-serialize", "ark-std", - "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", "sp-arkworks", ] @@ -10583,32 +10578,28 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale", "ark-serialize", "ark-std", - "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-r1cs-std", - "ark-scale", "ark-serialize", "ark-std", - "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-ark-utils", ] @@ -10632,7 +10623,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-ec", "ark-ff", @@ -10648,7 +10639,7 @@ dependencies = [ [[package]] name = "sp-ark-utils" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=ark-scale-integration#0cacab2f7950a7d7a2b9fd9ff2372e3bd2581ea8" +source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" dependencies = [ "ark-serialize", "ark-std", @@ -11075,7 +11066,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11454,7 +11445,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" dependencies = [ "base64ct", - "der 0.7.3", + "der 0.7.4", ] [[package]] @@ -11563,7 +11554,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "sc-cli", ] @@ -11605,7 +11596,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.3", + "clap 4.2.4", "frame-support", "frame-system", "sc-cli", @@ -11940,7 +11931,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.12", + "rustix 0.37.13", "windows-sys 0.45.0", ] @@ -12488,7 +12479,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.2.3", + "clap 4.2.4", "frame-remote-externalities", "frame-try-runtime", "hex", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 86b82f28705ea..e0fd59ac68c37 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -22,7 +22,7 @@ ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } -ark-scale = { git = "https://github.com/w3f/ark-scale", default-features = false } +ark-scale = { git = "https://github.com/w3f/ark-scale", features = ["hazmat"], default-features = false } [features] default = [ "std" ] diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 19ae564a0e020..dea6fdcaacd73 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -6,6 +6,7 @@ use ark_ec::{ twisted_edwards::TECurveConfig, CurveConfig, VariableBaseMSM, }; +use ark_scale::hazmat::ArkScaleProjective; use ark_std::vec::Vec; use codec::{Decode, Encode}; @@ -26,7 +27,7 @@ pub(crate) fn multi_miller_loop_generic( let result = Curve::multi_miller_loop(g1.0, g2.0).0; let result: ArkScale<::TargetField> = result.into(); - Ok(::TargetField> as Encode>::encode(&result)) + Ok(result.encode()) } pub(crate) fn final_exponentiation_generic(target: Vec) -> Result, ()> { @@ -38,7 +39,7 @@ pub(crate) fn final_exponentiation_generic(target: Vec) -> R let result = Curve::final_exponentiation(MillerLoopOutput(target.0)).ok_or(())?; let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + Ok(result.encode()) } pub(crate) fn msm_sw_generic( @@ -58,8 +59,8 @@ pub(crate) fn msm_sw_generic( as VariableBaseMSM>::msm(&bases.0, &scalars.0) .map_err(|_| ())?; - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } pub(crate) fn msm_te_generic( @@ -78,15 +79,15 @@ pub(crate) fn msm_te_generic( let result = as VariableBaseMSM>::msm(&bases.0, &scalars.0).unwrap(); - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } pub(crate) fn mul_projective_generic( base: Vec, scalar: Vec, ) -> Result, ()> { - let base = > as Decode>::decode( + let base = > as Decode>::decode( &mut base.clone().as_slice(), ) .map_err(|_| ())?; @@ -95,15 +96,15 @@ pub(crate) fn mul_projective_generic( let result = ::mul_projective(&base.0, &scalar.0); - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } pub(crate) fn mul_projective_te_generic( base: Vec, scalar: Vec, ) -> Result, ()> { - let base = > as Decode>::decode( + let base = > as Decode>::decode( &mut base.clone().as_slice(), ) .map_err(|_| ())?; @@ -112,8 +113,8 @@ pub(crate) fn mul_projective_te_generic( let result = ::mul_projective(&base.0, &scalar.0); - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } pub(crate) fn mul_affine_generic( @@ -129,8 +130,8 @@ pub(crate) fn mul_affine_generic( let result = ::mul_affine(&base.0, &scalar.0); - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } pub(crate) fn mul_affine_te_generic( @@ -145,6 +146,6 @@ pub(crate) fn mul_affine_te_generic( let result = ::mul_affine(&base.0, &scalar.0); - let result: ArkScale> = result.into(); - Ok(> as Encode>::encode(&result)) + let result: ArkScaleProjective> = result.into(); + Ok(result.encode()) } From 8aada1d55dcfd74338731e055c00c380701ac4a1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 21 Apr 2023 15:02:37 +0200 Subject: [PATCH 306/364] ed curves, use ArkScaleProjective --- Cargo.lock | 84 ++++++++++++++++------------- primitives/arkworks/src/utils.rs | 62 +++++++++------------ primitives/arkworks/test/Cargo.toml | 6 +-- 3 files changed, 76 insertions(+), 76 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ae1a3d499280..5f6869cdfc295 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -179,6 +179,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +dependencies = [ + "memchr", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -1312,9 +1321,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" +checksum = "1a19591b2ab0e3c04b588a0e04ddde7b9eaa423646d1b4a8092879216bf47473" dependencies = [ "clap 4.2.4", ] @@ -1430,9 +1439,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -3193,7 +3202,7 @@ version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", @@ -4036,9 +4045,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" [[package]] name = "libgit2-sys" @@ -4767,9 +4776,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "bb99c395ae250e1bf9133673f03ca9f97b7e71b705436bf8f089453445d1e9fe" dependencies = [ "rawpointer", ] @@ -7638,9 +7647,9 @@ dependencies = [ [[package]] name = "polling" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", "bitflags", @@ -8211,13 +8220,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.1", "memchr", - "regex-syntax", + "regex-syntax 0.7.1", ] [[package]] @@ -8226,7 +8235,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] @@ -8235,6 +8244,12 @@ version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +[[package]] +name = "regex-syntax" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" + [[package]] name = "region" version = "3.0.0" @@ -10534,73 +10549,79 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-ark-utils", "sp-arkworks", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-bls12-381", "ark-ec", "ark-ff", + "ark-scale", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-ark-utils", "sp-arkworks", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-bw6-761", + "ark-ec", "ark-ff", + "ark-scale", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-ark-utils", "sp-arkworks", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-ark-utils", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", "ark-r1cs-std", + "ark-scale", "ark-serialize", "ark-std", + "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-ark-utils", ] [[package]] @@ -10623,7 +10644,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" +source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" dependencies = [ "ark-ec", "ark-ff", @@ -10636,15 +10657,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "sp-ark-utils" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#2af7bb2777869905bb0051bf9e1e70d380ebe4ab" -dependencies = [ - "ark-serialize", - "ark-std", -] - [[package]] name = "sp-arkworks" version = "0.4.0" diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index dea6fdcaacd73..0bf835f690b93 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -17,12 +17,10 @@ pub(crate) fn multi_miller_loop_generic( g1: Vec, g2: Vec, ) -> Result, ()> { - let g1 = - ::G1Affine>> as Decode>::decode(&mut g1.clone().as_slice()) - .map_err(|_| ())?; - let g2 = - ::G2Affine>> as Decode>::decode(&mut g2.clone().as_slice()) - .map_err(|_| ())?; + let g1 = ::G1Affine>> as Decode>::decode(&mut g1.as_slice()) + .map_err(|_| ())?; + let g2 = ::G2Affine>> as Decode>::decode(&mut g2.as_slice()) + .map_err(|_| ())?; let result = Curve::multi_miller_loop(g1.0, g2.0).0; @@ -31,10 +29,9 @@ pub(crate) fn multi_miller_loop_generic( } pub(crate) fn final_exponentiation_generic(target: Vec) -> Result, ()> { - let target = ::TargetField> as Decode>::decode( - &mut target.clone().as_slice(), - ) - .map_err(|_| ())?; + let target = + ::TargetField> as Decode>::decode(&mut target.as_slice()) + .map_err(|_| ())?; let result = Curve::final_exponentiation(MillerLoopOutput(target.0)).ok_or(())?; @@ -46,12 +43,11 @@ pub(crate) fn msm_sw_generic( bases: Vec, scalars: Vec, ) -> Result, ()> { - let bases = >> as Decode>::decode( - &mut bases.clone().as_slice(), - ) - .map_err(|_| ())?; + let bases = + >> as Decode>::decode(&mut bases.as_slice()) + .map_err(|_| ())?; let scalars = ::ScalarField>> as Decode>::decode( - &mut scalars.clone().as_slice(), + &mut scalars.as_slice(), ) .map_err(|_| ())?; @@ -67,12 +63,11 @@ pub(crate) fn msm_te_generic( bases: Vec, scalars: Vec, ) -> Result, ()> { - let bases = >> as Decode>::decode( - &mut bases.clone().as_slice(), - ) - .map_err(|_| ())?; + let bases = + >> as Decode>::decode(&mut bases.as_slice()) + .map_err(|_| ())?; let scalars = ::ScalarField>> as Decode>::decode( - &mut scalars.clone().as_slice(), + &mut scalars.as_slice(), ) .map_err(|_| ())?; @@ -88,11 +83,10 @@ pub(crate) fn mul_projective_generic( scalar: Vec, ) -> Result, ()> { let base = > as Decode>::decode( - &mut base.clone().as_slice(), + &mut base.as_slice(), ) .map_err(|_| ())?; - let scalar = - > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; + let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; let result = ::mul_projective(&base.0, &scalar.0); @@ -105,11 +99,10 @@ pub(crate) fn mul_projective_te_generic( scalar: Vec, ) -> Result, ()> { let base = > as Decode>::decode( - &mut base.clone().as_slice(), + &mut base.as_slice(), ) .map_err(|_| ())?; - let scalar = - > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; + let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; let result = ::mul_projective(&base.0, &scalar.0); @@ -121,12 +114,9 @@ pub(crate) fn mul_affine_generic( base: Vec, scalar: Vec, ) -> Result, ()> { - let base = > as Decode>::decode( - &mut base.clone().as_slice(), - ) - .map_err(|_| ())?; - let scalar = - > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; + let base = > as Decode>::decode(&mut base.as_slice()) + .map_err(|_| ())?; + let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; let result = ::mul_affine(&base.0, &scalar.0); @@ -138,11 +128,9 @@ pub(crate) fn mul_affine_te_generic( base: Vec, scalar: Vec, ) -> Result, ()> { - let base = - > as Decode>::decode(&mut base.clone().as_slice()) - .map_err(|_| ())?; - let scalar = - > as Decode>::decode(&mut scalar.clone().as_slice()).map_err(|_| ())?; + let base = > as Decode>::decode(&mut base.as_slice()) + .map_err(|_| ())?; + let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; let result = ::mul_affine(&base.0, &scalar.0); diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 468cfd6011eef..4f813b61fac2d 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -21,9 +21,9 @@ sp-io = { version = "7.0.0", path = "../../io", default-features = false } sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", features = [ "curve" ], default-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", defult-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } From 5e86d971cde0f507c9a73bbccd33ecffec1128d9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 21 Apr 2023 15:58:56 +0200 Subject: [PATCH 307/364] Achimcc/arkworks integration remove affine hostcalls (#13971) * remove affine host-calls * remove affine host-call impls, also in tests * cargo update --- Cargo.lock | 22 ++++----- primitives/arkworks/src/bls12_377.rs | 10 ----- primitives/arkworks/src/bls12_381.rs | 10 ----- primitives/arkworks/src/bw6_761.rs | 10 ----- primitives/arkworks/src/ed_on_bls12_377.rs | 5 --- primitives/arkworks/src/ed_on_bls12_381.rs | 10 ----- primitives/arkworks/test/Cargo.toml | 10 ++--- primitives/arkworks/test/tests/bls12_377.rs | 6 --- .../arkworks/test/tests/bls12_381/mod.rs | 6 --- primitives/arkworks/test/tests/bw6_761.rs | 6 --- .../arkworks/test/tests/ed_on_bls12_377.rs | 3 -- .../arkworks/test/tests/ed_on_bls12_381.rs | 6 --- primitives/io/src/lib.rs | 45 ------------------- 13 files changed, 16 insertions(+), 133 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f6869cdfc295..a823261ac8941 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10549,7 +10549,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10558,14 +10558,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", "sp-arkworks", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10574,14 +10574,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", "sp-arkworks", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-bw6-761", "ark-ec", @@ -10590,14 +10590,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", "sp-arkworks", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10606,13 +10606,13 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10621,7 +10621,7 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", ] [[package]] @@ -10644,7 +10644,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#9b4b012ce1a92fdc079ce85e3f70eef8ee924936" +source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" dependencies = [ "ark-ec", "ark-ff", diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index 7855ee92e97a2..ba0dcde7087c6 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -55,13 +55,3 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index bd87c43cb08c2..af4ed509a35cc 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -55,13 +55,3 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 880a9ba475182..95d8a485739eb 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -55,13 +55,3 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G1 -pub fn mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} - -/// Compute a affine scalar multiplication for short_weierstrass through arkworks on G2 -pub fn mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 9d04a101af36f..e4e55b4c46b5f 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -28,11 +28,6 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -/// Compute a scalar multiplication for twisted_edwards through arkworks -pub fn mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_te_generic::(base, scalar) -} - /// Compute a multi scalar mulitplication for twisted_edwards through arkworks pub fn msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index f730e08a2b161..06495393ef4a5 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -31,21 +31,11 @@ pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> mul_projective_generic::(base, scalar) } -/// Compute a affine scalar multiplication for short_weierstrass through arkworks -pub fn sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_generic::(base, scalar) -} - /// Compute a projective scalar multiplication for twisted_edwards through arkworks pub fn te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -/// Compute a scalar multiplication for twisted_edwards through arkworks -pub fn te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - mul_affine_te_generic::(base, scalar) -} - /// Compute a multi scalar mulitplication for twisted_edwards through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 4f813b61fac2d..853f22a59f63f 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -21,11 +21,11 @@ sp-io = { version = "7.0.0", path = "../../io", default-features = false } sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", defult-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", defult-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } [features] default = [ "std" ] diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index a3a79540df9a7..51a8634169eeb 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -20,15 +20,9 @@ impl HostFunctions for Host { fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) } - fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_affine_g1(base, scalar) - } fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) } - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_affine_g2(base, scalar) - } } test_group!(g1; sp_ark_bls12_377::G1Projective; sw); diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index ed4630c48ec87..dcff91e40062b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -27,15 +27,9 @@ impl HostFunctions for Host { fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) } - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_affine_g1(base, scalar) - } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) } - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_affine_g2(base, scalar) - } } type G1Projective = G1Projective_Host; diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index e09b9a342a819..462cb5a1bd84b 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -24,12 +24,6 @@ impl HostFunctions for Host { fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) } - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_affine_g1(base, scalar) - } - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_affine_g2(base, scalar) - } } test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 9bbfdcf78bb99..86b73ea4c3e93 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -8,9 +8,6 @@ impl HostFunctions for Host { fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } - fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_mul_affine(base, scalar) - } fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) } diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs index 030ecd792ef55..8e6e431a2cafe 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381.rs @@ -11,15 +11,9 @@ impl HostFunctions for Host { fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) } - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_affine(base, scalar) - } fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_381_te_mul_projective(base, scalar) } - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_te_mul_affine(base, scalar) - } fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_projective(base, scalar) } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 03ce7563c6037..6659629171476 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1160,21 +1160,11 @@ pub trait EllipticCurves { sp_arkworks::bls12_381::mul_projective_g1(base, scalar) } - /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_381::mul_affine_g1(base, scalar) - } - /// Compute a projective multiplication on G2 for bls12_381 fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_381::mul_projective_g2(base, scalar) } - /// Compute a affine multiplication on G2 for bls12_381 - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_381::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bls12_381 fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_381::msm_g1(bases, scalars) @@ -1200,21 +1190,11 @@ pub trait EllipticCurves { sp_arkworks::bls12_377::mul_projective_g1(base, scalar) } - /// Compute a affine multiplication on G1 for bls12_377 - fn bls12_377_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_377::mul_affine_g1(base, scalar) - } - /// Compute a projective multiplication on G2 for bls12_377 fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::bls12_377::mul_projective_g2(base, scalar) } - /// Compute a affine multiplication on G2 for bls12_377 - fn bls12_377_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_377::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bls12_377 fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { sp_arkworks::bls12_377::msm_g1(bases, scalars) @@ -1245,16 +1225,6 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::mul_projective_g2(base, scalar) } - /// Compute a affine multiplication on G1 for bw6_761 - fn bw6_761_mul_affine_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bw6_761::mul_affine_g1(base, scalar) - } - - /// Compute a affine multiplication on G2 for bw6_761 - fn bw6_761_mul_affine_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bw6_761::mul_affine_g2(base, scalar) - } - /// Compute a msm on G1 for bw6_761 fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { sp_arkworks::bw6_761::msm_g1(bases, bigints) @@ -1265,21 +1235,11 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::msm_g2(bases, bigints) } - /// Compute a short weierstrass affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::sw_mul_affine(base, scalar) - } - /// Compute twisted edwards projective multiplication on ed_on_bls12_381 fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) } - /// Compute twisted edwards affine multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::te_mul_affine(base, scalar) - } - /// Compute short weierstrass projective multiplication on ed_on_bls12_381 fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) @@ -1295,11 +1255,6 @@ pub trait EllipticCurves { sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } - /// Compute affine multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_affine(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_377::mul_affine(base, scalar) - } - /// Compute projective multiplication on ed_on_bls12_377 fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) From ee0f2bef8e2f8ba1b1dcfff1a29aea6dfb0b5aa0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 21 Apr 2023 16:44:47 +0200 Subject: [PATCH 308/364] ark-substrate: use main branch --- Cargo.lock | 32 ++++++++++++++--------------- primitives/arkworks/test/Cargo.toml | 10 ++++----- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 87c693a3e253d..d0508203f1391 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3246,9 +3246,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -7880,13 +7880,13 @@ dependencies = [ [[package]] name = "proc-macro-warning" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e25495609acefcaeb5052edad8ac91017c9bc98fc38ef321ed524e50b68bac" +checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10620,14 +10620,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10636,14 +10636,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-bw6-761", "ark-ec", @@ -10652,14 +10652,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10668,13 +10668,13 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", ] [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10683,7 +10683,7 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls)", + "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", ] [[package]] @@ -10706,7 +10706,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate?branch=remove-affine-host-calls#3660a2686e932e39739f58ad7f90bc7123c08af6" +source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" dependencies = [ "ark-ec", "ark-ff", diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 853f22a59f63f..4f813b61fac2d 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -21,11 +21,11 @@ sp-io = { version = "7.0.0", path = "../../io", default-features = false } sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", defult-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", branch= "remove-affine-host-calls", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", defult-features = false } +sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "std" ] From 89b4e5955aea3d81941ee22f88b11ddc39773183 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 21 Apr 2023 18:16:41 +0200 Subject: [PATCH 309/364] cargo update --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0508203f1391..c446f83ea5fa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10627,7 +10627,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10643,7 +10643,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-bw6-761", "ark-ec", @@ -10659,7 +10659,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10674,7 +10674,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-ed-on-bls12-381", "ark-ff", @@ -10706,7 +10706,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#1fb8561e838d652370a9fe176fe5019b45594182" +source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" dependencies = [ "ark-ec", "ark-ff", From 9d3e6fc7144eaf2f524eb8999440a51e33568ad1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 12:39:57 +0200 Subject: [PATCH 310/364] Achimcc/arkworks integration bandersnatch (#13977) * use bandersnatch * bandersnatch * add abndersnatch sw msm * use correct PR branch --- Cargo.lock | 31 +++++++-------- primitives/arkworks/Cargo.toml | 4 +- ...381.rs => ed_on_bls12_381_bandersnatch.rs} | 10 ++--- primitives/arkworks/src/lib.rs | 2 +- primitives/arkworks/test/Cargo.toml | 4 +- .../arkworks/test/tests/ed_on_bls12_381.rs | 23 ----------- .../tests/ed_on_bls12_381_bandersnatch.rs | 35 +++++++++++++++++ primitives/arkworks/test/tests/mod.rs | 2 +- primitives/io/src/lib.rs | 39 +++++++++++++------ 9 files changed, 87 insertions(+), 63 deletions(-) rename primitives/arkworks/src/{ed_on_bls12_381.rs => ed_on_bls12_381_bandersnatch.rs} (84%) delete mode 100644 primitives/arkworks/test/tests/ed_on_bls12_381.rs create mode 100644 primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs diff --git a/Cargo.lock b/Cargo.lock index c446f83ea5fa1..2f490701f445d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -373,10 +373,10 @@ dependencies = [ ] [[package]] -name = "ark-ed-on-bls12-381" +name = "ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" dependencies = [ "ark-bls12-381", "ark-ec", @@ -10611,13 +10611,12 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", "ark-scale", - "ark-serialize", "ark-std", "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", @@ -10627,10 +10626,9 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ "ark-bls12-381", - "ark-ec", "ark-ff", "ark-scale", "ark-serialize", @@ -10643,13 +10641,11 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ "ark-bw6-761", - "ark-ec", "ark-ff", "ark-scale", - "ark-serialize", "ark-std", "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", @@ -10659,7 +10655,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10672,17 +10668,16 @@ dependencies = [ ] [[package]] -name = "sp-ark-ed-on-bls12-381" +name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ - "ark-ed-on-bls12-381", + "ark-ed-on-bls12-381-bandersnatch", "ark-ff", - "ark-r1cs-std", "ark-scale", - "ark-serialize", "ark-std", "parity-scale-codec", + "sp-ark-bls12-381", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", ] @@ -10706,7 +10701,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#79b6ce320157bb8fae65743a43bcb03a78d79c96" +source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" dependencies = [ "ark-ec", "ark-ff", @@ -10728,7 +10723,7 @@ dependencies = [ "ark-bw6-761", "ark-ec", "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381", + "ark-ed-on-bls12-381-bandersnatch", "ark-ff", "ark-scale", "ark-serialize", @@ -10750,7 +10745,7 @@ dependencies = [ "sp-ark-bls12-381", "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", - "sp-ark-ed-on-bls12-381", + "sp-ark-ed-on-bls12-381-bandersnatch", "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-arkworks", "sp-io", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index e0fd59ac68c37..818cbe52b2097 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -18,7 +18,7 @@ ark-std = { version = "0.4.0", default-features = false } ark-bls12-377 = { version = "0.4.0", features = ["curve"], default-features = false } ark-bls12-381 = { version = "0.4.0", features = ["curve"], default-features = false } ark-bw6-761 = { version = "0.4.0", default-features = false } -ark-ed-on-bls12-381 = { version = "0.4.0", default-features = false } +ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } @@ -34,7 +34,7 @@ std = [ "ark-bls12-377/std", "ark-bls12-381/std", "ark-bw6-761/std", - "ark-ed-on-bls12-381/std", + "ark-ed-on-bls12-381-bandersnatch/std", "ark-ed-on-bls12-377/std", "sp-std/std", "codec/std", diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs similarity index 84% rename from primitives/arkworks/src/ed_on_bls12_381.rs rename to primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs index 06495393ef4a5..f1bd0763be567 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs @@ -23,25 +23,25 @@ use crate::utils::{ msm_sw_generic, msm_te_generic, mul_affine_generic, mul_affine_te_generic, mul_projective_generic, mul_projective_te_generic, }; -use ark_ed_on_bls12_381::JubjubConfig; +use ark_ed_on_bls12_381_bandersnatch::BandersnatchConfig; use sp_std::vec::Vec; /// Compute a projective scalar multiplication for short_weierstrass through arkworks pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - mul_projective_generic::(base, scalar) + mul_projective_generic::(base, scalar) } /// Compute a projective scalar multiplication for twisted_edwards through arkworks pub fn te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - mul_projective_te_generic::(base, scalar) + mul_projective_te_generic::(base, scalar) } /// Compute a multi scalar mulitplication for twisted_edwards through arkworks pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { - msm_te_generic::(bases, scalars) + msm_te_generic::(bases, scalars) } /// Compute a multi scalar multiplication for short_weierstrass through arkworks pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - msm_sw_generic::(bases, scalars) + msm_sw_generic::(bases, scalars) } diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index f7a8e04ba025b..85ebc2586db67 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -4,5 +4,5 @@ pub mod bls12_377; pub mod bls12_381; pub mod bw6_761; pub mod ed_on_bls12_377; -pub mod ed_on_bls12_381; +pub mod ed_on_bls12_381_bandersnatch; mod utils; diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 4f813b61fac2d..c67a2b77290dd 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -25,7 +25,7 @@ sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", defult-features = false } sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "std" ] @@ -41,7 +41,7 @@ std = [ "sp-ark-bls12-381/std", "sp-ark-bw6-761/std", "sp-ark-ed-on-bls12-377/std", - "sp-ark-ed-on-bls12-381/std", + "sp-ark-ed-on-bls12-381-bandersnatch/std", "sp-arkworks/std" ] curve = [ "scalar_field", "base_field" ] diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381.rs b/primitives/arkworks/test/tests/ed_on_bls12_381.rs deleted file mode 100644 index 8e6e431a2cafe..0000000000000 --- a/primitives/arkworks/test/tests/ed_on_bls12_381.rs +++ /dev/null @@ -1,23 +0,0 @@ -use ark_algebra_test_templates::*; -use ark_std::vec::Vec; -use sp_ark_ed_on_bls12_381::HostFunctions; - -pub struct Host {} - -impl HostFunctions for Host { - fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_te_msm(bases, scalars) - } - fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_sw_msm(bases, scalars) - } - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_sw_mul_projective(base, scalar) - } -} - -test_group!(sw; sp_ark_ed_on_bls12_381::SWProjective; sw); -test_group!(te; sp_ark_ed_on_bls12_381::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs new file mode 100644 index 0000000000000..5b88020a7fd04 --- /dev/null +++ b/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs @@ -0,0 +1,35 @@ +use ark_algebra_test_templates::*; +use ark_std::vec::Vec; +use sp_ark_ed_on_bls12_381_bandersnatch::HostFunctions; + +pub struct Host {} + +impl HostFunctions for Host { + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_sw_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_bandersnatch_sw_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + } +} + +test_group!(sw; sp_ark_ed_on_bls12_381_bandersnatch::SWProjective; sw); +test_group!(te; sp_ark_ed_on_bls12_381_bandersnatch::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs index e99ccc69281f3..0c48b8c0eec28 100644 --- a/primitives/arkworks/test/tests/mod.rs +++ b/primitives/arkworks/test/tests/mod.rs @@ -2,4 +2,4 @@ mod bls12_377; mod bls12_381; mod bw6_761; mod ed_on_bls12_377; -mod ed_on_bls12_381; +mod ed_on_bls12_381_bandersnatch; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 6659629171476..4d7ba1b0bb7bc 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1235,24 +1235,41 @@ pub trait EllipticCurves { sp_arkworks::bw6_761::msm_g2(bases, bigints) } - /// Compute twisted edwards projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::te_mul_projective(base, scalar) + /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_arkworks::ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) } - /// Compute short weierstrass projective multiplication on ed_on_bls12_381 - fn ed_on_bls12_381_sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::sw_mul_projective(base, scalar) + /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_sw_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_arkworks::ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) } - /// Compute twisted edwards msm on ed_on_bls12_381 - fn ed_on_bls12_381_te_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) + /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_arkworks::ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) } - /// Compute short weierstrass msm on ed_on_bls12_381 + /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_sw_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_arkworks::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) + } + + /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) + sp_arkworks::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) } /// Compute projective multiplication on ed_on_bls12_377 From b78109cd4c36b8baca5e5fa3167b046ae9d22b44 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 12:40:35 +0200 Subject: [PATCH 311/364] cargo update --- Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2f490701f445d..6ccc1869395eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1019,9 +1019,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" [[package]] name = "byte-slice-cast" @@ -2741,7 +2741,7 @@ dependencies = [ "sp-runtime", "substrate-rpc-client", "tokio", - "tracing-subscriber 0.3.16", + "tracing-subscriber 0.3.17", ] [[package]] @@ -12410,9 +12410,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers 0.1.0", "nu-ansi-term", From 5023e155338beb538cd9dcd72f233a167671d8ba Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 12:59:14 +0200 Subject: [PATCH 312/364] cargo update --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ce42ade95af8..c1a7ef4428be9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10626,7 +10626,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10641,7 +10641,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10655,7 +10655,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10670,7 +10670,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ff", @@ -10701,7 +10701,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#e723741a6bbdd9b16989bad4b645e308d34afb53" +source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" dependencies = [ "ark-ec", "ark-ff", From fad84e07441a577e8f1d4da05f391dc0998a95ba Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 13:37:49 +0200 Subject: [PATCH 313/364] fix tests --- .../arkworks/test/tests/bls12_381/mod.rs | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index dcff91e40062b..d6328da172918 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -1,14 +1,16 @@ +#![cfg_attr(not(feature = "std"), no_std)] use ark_algebra_test_templates::*; -use ark_ff::{fields::Field, UniformRand, Zero}; +use ark_ff::{fields::Field, One, Zero}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, vec::Vec, One}; -use sp_ark_models::{AffineRepr, CurveGroup, Group}; +use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand}; +use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; -use sp_ark_bls12_381::{ +use crate::{ fq::Fq, fq2::Fq2, fr::Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, }; +#[derive(PartialEq, Eq)] pub struct Host {} impl HostFunctions for Host { @@ -32,19 +34,19 @@ impl HostFunctions for Host { } } +test_group!(g1; crate::G1Projective; sw); +test_group!(g2; crate::G2Projective; sw); +test_group!(pairing_output; PairingOutput>; msm); +test_pairing!(ark_pairing; crate::Bls12_381); + type G1Projective = G1Projective_Host; type G1Affine = G1Affine_Host; type G2Projective = G2Projective_Host; type G2Affine = G2Affine_Host; -test_group!(g1; sp_ark_bls12_381::G1Projective; sw); -test_group!(g2; sp_ark_bls12_381::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); -test_pairing!(pairing; sp_ark_bls12_381::Bls12_381); - #[test] fn test_g1_endomorphism_beta() { - assert!(sp_ark_bls12_381::g1::BETA.pow(&[3u64]).is_one()); + assert!(crate::g1::BETA.pow([3u64]).is_one()); } #[test] @@ -62,7 +64,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } @@ -85,7 +87,7 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } @@ -126,7 +128,7 @@ macro_rules! test_vectors { #[test] fn g1_compressed_valid_test_vectors() { let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::No, bytes); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); } #[test] @@ -138,7 +140,7 @@ fn g1_uncompressed_valid_test_vectors() { #[test] fn g2_compressed_valid_test_vectors() { let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); } #[test] From e0e3a5a5dbb26a3bb95236feef6c2ca8fe220222 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 13:38:35 +0200 Subject: [PATCH 314/364] cleanup --- primitives/arkworks/src/utils.rs | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index 0bf835f690b93..ac3535b1108bd 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -122,18 +122,4 @@ pub(crate) fn mul_affine_generic( let result: ArkScaleProjective> = result.into(); Ok(result.encode()) -} - -pub(crate) fn mul_affine_te_generic( - base: Vec, - scalar: Vec, -) -> Result, ()> { - let base = > as Decode>::decode(&mut base.as_slice()) - .map_err(|_| ())?; - let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; - - let result = ::mul_affine(&base.0, &scalar.0); - - let result: ArkScaleProjective> = result.into(); - Ok(result.encode()) -} +} \ No newline at end of file From 1c9e8b1bbb73d1ddbf62da92a9d7765dbc343055 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 13:42:10 +0200 Subject: [PATCH 315/364] cleanup --- primitives/arkworks/src/bls12_377.rs | 3 +-- primitives/arkworks/src/bls12_381.rs | 3 +-- primitives/arkworks/src/bw6_761.rs | 3 +-- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- .../arkworks/src/ed_on_bls12_381_bandersnatch.rs | 3 +-- primitives/arkworks/src/utils.rs | 14 -------------- 6 files changed, 5 insertions(+), 23 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index ba0dcde7087c6..bb14134a952d2 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, - multi_miller_loop_generic, + final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index af4ed509a35cc..70dcbc35e4c64 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, - multi_miller_loop_generic, + final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; use ark_bls12_381::{g1, g2, Bls12_381}; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 95d8a485739eb..eae8f0f0907f6 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - final_exponentiation_generic, msm_sw_generic, mul_affine_generic, mul_projective_generic, - multi_miller_loop_generic, + final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; use ark_bw6_761::{g1, g2, BW6_761}; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index e4e55b4c46b5f..b7aeb38190b2a 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -19,7 +19,7 @@ #![warn(missing_docs)] -use crate::utils::{msm_te_generic, mul_affine_te_generic, mul_projective_te_generic}; +use crate::utils::{msm_te_generic, mul_projective_te_generic}; use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs index f1bd0763be567..9468e225387cc 100644 --- a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs @@ -20,8 +20,7 @@ #![warn(missing_docs)] use crate::utils::{ - msm_sw_generic, msm_te_generic, mul_affine_generic, mul_affine_te_generic, - mul_projective_generic, mul_projective_te_generic, + msm_sw_generic, msm_te_generic, mul_projective_generic, mul_projective_te_generic, }; use ark_ed_on_bls12_381_bandersnatch::BandersnatchConfig; use sp_std::vec::Vec; diff --git a/primitives/arkworks/src/utils.rs b/primitives/arkworks/src/utils.rs index ac3535b1108bd..7099947e89dd0 100644 --- a/primitives/arkworks/src/utils.rs +++ b/primitives/arkworks/src/utils.rs @@ -109,17 +109,3 @@ pub(crate) fn mul_projective_te_generic( let result: ArkScaleProjective> = result.into(); Ok(result.encode()) } - -pub(crate) fn mul_affine_generic( - base: Vec, - scalar: Vec, -) -> Result, ()> { - let base = > as Decode>::decode(&mut base.as_slice()) - .map_err(|_| ())?; - let scalar = > as Decode>::decode(&mut scalar.as_slice()).map_err(|_| ())?; - - let result = ::mul_affine(&base.0, &scalar.0); - - let result: ArkScaleProjective> = result.into(); - Ok(result.encode()) -} \ No newline at end of file From 1f5ded9e63b5d5ae8defab002d9178ff95f054b1 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Sat, 22 Apr 2023 13:53:56 +0200 Subject: [PATCH 316/364] fix tests --- primitives/arkworks/test/tests/bls12_381/mod.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index d6328da172918..d7cac6be71781 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -5,7 +5,7 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand}; use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; -use crate::{ +use sp_ark_bls12_381::{ fq::Fq, fq2::Fq2, fr::Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, }; @@ -34,10 +34,10 @@ impl HostFunctions for Host { } } -test_group!(g1; crate::G1Projective; sw); -test_group!(g2; crate::G2Projective; sw); -test_group!(pairing_output; PairingOutput>; msm); -test_pairing!(ark_pairing; crate::Bls12_381); +test_group!(g1; sp_ark_bls12_381::G1Projective; sw); +test_group!(g2; sp_ark_bls12_381::G2Projective; sw); +test_group!(pairing_output; PairingOutput>; msm); +test_pairing!(ark_pairing; sp_ark_bls12_381::Bls12_381); type G1Projective = G1Projective_Host; type G1Affine = G1Affine_Host; @@ -46,7 +46,7 @@ type G2Affine = G2Affine_Host; #[test] fn test_g1_endomorphism_beta() { - assert!(crate::g1::BETA.pow([3u64]).is_one()); + assert!(sp_ark_bls12_381::g1::BETA.pow([3u64]).is_one()); } #[test] @@ -64,7 +64,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } @@ -87,7 +87,7 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { + if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return; } From fbca295c5e456b55542b6e8e3dc0277456764463 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 24 Apr 2023 08:50:38 +0200 Subject: [PATCH 317/364] refactor tests --- .../arkworks/test/tests/bls12_381/mod.rs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index d7cac6be71781..163487a2f5e79 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -2,7 +2,7 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, One, Zero}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand}; +use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand, Zero}; use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; use sp_ark_bls12_381::{ @@ -34,15 +34,16 @@ impl HostFunctions for Host { } } -test_group!(g1; sp_ark_bls12_381::G1Projective; sw); -test_group!(g2; sp_ark_bls12_381::G2Projective; sw); -test_group!(pairing_output; PairingOutput>; msm); -test_pairing!(ark_pairing; sp_ark_bls12_381::Bls12_381); - type G1Projective = G1Projective_Host; type G1Affine = G1Affine_Host; type G2Projective = G2Projective_Host; type G2Affine = G2Affine_Host; +type Bls12_381 = sp_ark_bls12_381::Bls12_381; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; PairingOutput; msm); +test_pairing!(ark_pairing; super::Bls12_381); #[test] fn test_g1_endomorphism_beta() { @@ -64,10 +65,10 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return; - } + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } } } } @@ -87,10 +88,10 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let greatest = rng.gen(); if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !> as ark_std::Zero>::is_zero(&p.mul_bigint(Fr::characteristic())) { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return; - } + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } } } } From b23d63ff35eae807ce67bf301ab9ff5d27104a93 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 24 Apr 2023 08:51:14 +0200 Subject: [PATCH 318/364] cargo update --- Cargo.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c1a7ef4428be9..40d328a4dc6cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -656,7 +656,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.13", + "rustix 0.37.14", "slab", "socket2", "waker-fn", @@ -3710,7 +3710,7 @@ checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.10", - "rustix 0.37.13", + "rustix 0.37.14", "windows-sys 0.48.0", ] @@ -4691,9 +4691,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c" +checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" [[package]] name = "lite-json" @@ -4839,7 +4839,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.13", + "rustix 0.37.14", ] [[package]] @@ -8505,9 +8505,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.12" +version = "0.36.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0af200a3324fa5bcd922e84e9b55a298ea9f431a489f01961acdebc6e908f25" +checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658" dependencies = [ "bitflags", "errno 0.3.1", @@ -8519,15 +8519,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.13" +version = "0.37.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0" +checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" dependencies = [ "bitflags", "errno 0.3.1", "io-lifetimes 1.0.10", "libc", - "linux-raw-sys 0.3.3", + "linux-raw-sys 0.3.4", "windows-sys 0.48.0", ] @@ -9290,7 +9290,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.12", + "rustix 0.36.13", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10626,7 +10626,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10641,7 +10641,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10655,7 +10655,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10670,7 +10670,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ff", @@ -10701,7 +10701,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4dbe0d6401eeb78462c7f3db75a36a12ae36c5e6" +source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" dependencies = [ "ark-ec", "ark-ff", @@ -11984,7 +11984,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.13", + "rustix 0.37.14", "windows-sys 0.45.0", ] @@ -13107,7 +13107,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.12", + "rustix 0.36.13", "serde", "sha2 0.10.6", "toml 0.5.11", @@ -13187,7 +13187,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.12", + "rustix 0.36.13", ] [[package]] @@ -13218,7 +13218,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.12", + "rustix 0.36.13", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", From a7f7bde0e1b8b4b1997ad40262f67f6dc2cb9c42 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 26 Apr 2023 09:27:43 +0200 Subject: [PATCH 319/364] cargo update --- Cargo.lock | 90 ++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 519be749ac5d4..93bd128301f54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450" dependencies = [ "anstyle", "anstyle-parse", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -656,7 +656,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.14", + "rustix 0.37.15", "slab", "socket2", "waker-fn", @@ -1296,9 +1296,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "eef2b3ded6a26dfaec672a742c93c8cf6b689220324da509ec5caa20de55dc83" dependencies = [ "bitflags", "clap_lex 0.2.4", @@ -1590,7 +1590,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.23", + "clap 3.2.24", "criterion-plot", "futures", "itertools", @@ -1898,9 +1898,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b14af2045fa69ed2b7a48934bebb842d0f33e73e96e78766ecb14bb5347a11" +checksum = "05e58dffcdcc8ee7b22f0c1f71a69243d7c2d9ad87b5a14361f2424a1565c219" dependencies = [ "const-oid", "zeroize", @@ -2167,7 +2167,7 @@ version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" dependencies = [ - "der 0.7.4", + "der 0.7.5", "digest 0.10.6", "elliptic-curve 0.13.4", "rfc6979 0.4.0", @@ -3710,7 +3710,7 @@ checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.10", - "rustix 0.37.14", + "rustix 0.37.15", "windows-sys 0.48.0", ] @@ -4839,7 +4839,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.14", + "rustix 0.37.15", ] [[package]] @@ -7660,7 +7660,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.4", + "der 0.7.5", "spki 0.7.1", ] @@ -8519,9 +8519,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.14" +version = "0.37.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" +checksum = "a0661814f891c57c930a610266415528da53c4933e6dea5fb350cbfe048a9ece" dependencies = [ "bitflags", "errno 0.3.1", @@ -10165,7 +10165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" dependencies = [ "base16ct 0.2.0", - "der 0.7.4", + "der 0.7.5", "generic-array 0.14.7", "pkcs8 0.10.2", "subtle", @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10626,7 +10626,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10641,7 +10641,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10655,7 +10655,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10670,7 +10670,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ff", @@ -10701,7 +10701,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5cf5f6daa2326dd1c5f967c4f4fe69d19eeeebc8" +source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" dependencies = [ "ark-ec", "ark-ff", @@ -11499,7 +11499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" dependencies = [ "base64ct", - "der 0.7.4", + "der 0.7.5", ] [[package]] @@ -11972,9 +11972,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.6" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" +checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "tempfile" @@ -11985,7 +11985,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.14", + "rustix 0.37.15", "windows-sys 0.45.0", ] @@ -12158,9 +12158,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" dependencies = [ "autocfg", "bytes", @@ -12172,14 +12172,14 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", @@ -12199,9 +12199,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "76cd2598a37719e3cd4c28af93f978506a97a2920ef4d96e4b12e38b8cbc8940" dependencies = [ "futures-core", "pin-project-lite 0.2.9", @@ -12224,9 +12224,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -12323,11 +12323,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d" dependencies = [ - "cfg-if", "log", "pin-project-lite 0.2.9", "tracing-attributes", @@ -12336,13 +12335,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -13434,18 +13433,15 @@ dependencies = [ [[package]] name = "webrtc-media" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" +checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" dependencies = [ "byteorder", "bytes", - "derive_builder", - "displaydoc", "rand 0.8.5", "rtp", "thiserror", - "webrtc-util", ] [[package]] From ab3a1118091c534eb964ae82bf626e61500edbb7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 27 Apr 2023 16:08:00 +0200 Subject: [PATCH 320/364] cargo update --- Cargo.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9e588e6654dd2..942af35b914f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1681,9 +1681,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -2246,7 +2246,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.1", + "crypto-bigint 0.5.2", "digest 0.10.6", "ff 0.13.0", "generic-array 0.14.7", @@ -7554,9 +7554,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" +checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" dependencies = [ "thiserror", "ucd-trie", @@ -7564,9 +7564,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" +checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" dependencies = [ "pest", "pest_generator", @@ -7574,9 +7574,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" +checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" dependencies = [ "pest", "pest_meta", @@ -7587,9 +7587,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.7" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" +checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" dependencies = [ "once_cell", "pest", @@ -10038,9 +10038,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" +checksum = "dfdef77228a4c05dc94211441595746732131ad7f6530c6c18f045da7b7ab937" dependencies = [ "bitvec", "cfg-if", @@ -10052,9 +10052,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" +checksum = "53012eae69e5aa5c14671942a5dd47de59d4cdcff8532a6dd0e081faf1119482" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10626,7 +10626,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10641,7 +10641,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10655,7 +10655,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10670,7 +10670,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ff", @@ -10701,7 +10701,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#73cb4cbf2fe1d9c8e4a2da2e1aa324ec128a1fae" +source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" dependencies = [ "ark-ec", "ark-ff", @@ -12200,9 +12200,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cd2598a37719e3cd4c28af93f978506a97a2920ef4d96e4b12e38b8cbc8940" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite 0.2.9", From 909df359148419d65f1c554286272cd5fb7ef492 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 27 Apr 2023 21:54:34 +0200 Subject: [PATCH 321/364] refactor tests --- Cargo.lock | 22 +++--- Cargo.toml | 1 + primitives/arkworks/test/Cargo.toml | 6 +- primitives/arkworks/test/tests/bls12_377.rs | 33 ++------- .../arkworks/test/tests/bls12_381/mod.rs | 69 +++++++------------ primitives/arkworks/test/tests/bw6_761.rs | 34 ++------- .../arkworks/test/tests/ed_on_bls12_377.rs | 16 +---- .../tests/ed_on_bls12_381_bandersnatch.rs | 35 +--------- 8 files changed, 54 insertions(+), 162 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 942af35b914f6..ca0a02bbcf04e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -472,7 +472,7 @@ dependencies = [ [[package]] name = "ark-scale" version = "0.0.2" -source = "git+https://github.com/w3f/ark-scale#ddd0b655b639cd91b49aff2fe29b9ccfc92903e1" +source = "git+https://github.com/w3f/ark-scale#f9fdb109d377cf196e3a62711481877435c12180" dependencies = [ "ark-ec", "ark-serialize", @@ -10611,7 +10611,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10621,12 +10621,13 @@ dependencies = [ "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", + "sp-io", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10636,12 +10637,13 @@ dependencies = [ "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", + "sp-io", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10650,12 +10652,13 @@ dependencies = [ "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", "sp-arkworks", + "sp-io", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10665,20 +10668,24 @@ dependencies = [ "ark-std", "parity-scale-codec", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-io", ] [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ + "ark-ec", "ark-ed-on-bls12-381-bandersnatch", "ark-ff", + "ark-r1cs-std", "ark-scale", "ark-std", "parity-scale-codec", "sp-ark-bls12-381", "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", + "sp-io", ] [[package]] @@ -10701,7 +10708,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#5bc94da0067ac0889d5fc10a511d37da32cc6eda" +source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" dependencies = [ "ark-ec", "ark-ff", @@ -10748,7 +10755,6 @@ dependencies = [ "sp-ark-ed-on-bls12-381-bandersnatch", "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-arkworks", - "sp-io", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a019f41e66edd..f17a363731ce1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -333,3 +333,4 @@ codegen-units = 1 [patch.crates-io] sp-arkworks = { path = "./primitives/arkworks" } +sp-io = { path = "./primitives/io" } diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index c67a2b77290dd..13ff54cf5da58 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -17,12 +17,11 @@ ark-serialize = { version = "0.4.0", default-features = false } sp-ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] -sp-io = { version = "7.0.0", path = "../../io", default-features = false } sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", defult-features = false } +sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } @@ -34,7 +33,7 @@ std = [ "ark-std/std", "ark-serialize/std", "sp-ark-models/std", - "sp-io/std", + "sp-arkworks/std", "ark-ec/std", "ark-algebra-test-templates/std", "sp-ark-bls12-377/std", @@ -42,7 +41,6 @@ std = [ "sp-ark-bw6-761/std", "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381-bandersnatch/std", - "sp-arkworks/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs index 51a8634169eeb..3f808e04bd953 100644 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ b/primitives/arkworks/test/tests/bls12_377.rs @@ -1,31 +1,6 @@ use ark_algebra_test_templates::*; -use ark_std::vec::Vec; -use sp_ark_bls12_377::HostFunctions; -pub struct Host {} - -impl HostFunctions for Host { - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) - } - fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) - } - fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) - } - fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) - } - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) - } - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) - } -} - -test_group!(g1; sp_ark_bls12_377::G1Projective; sw); -test_group!(g2; sp_ark_bls12_377::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); -test_pairing!(pairing; sp_ark_bls12_377::Bls12_377); +test_group!(g1; sp_ark_bls12_377::curves::g1::G1Projective; sw); +test_group!(g2; sp_ark_bls12_377::curves::g2::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; sp_ark_bls12_377::curves::Bls12_377); diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index 163487a2f5e79..c63ffe261981b 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -2,48 +2,23 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, One, Zero}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand, Zero}; +use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand}; use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; use sp_ark_bls12_381::{ - fq::Fq, fq2::Fq2, fr::Fr, G1Affine as G1Affine_Host, G1Projective as G1Projective_Host, - G2Affine as G2Affine_Host, G2Projective as G2Projective_Host, HostFunctions, + curves::{ + g1::{G1Affine, G1Projective}, + g2::{G2Affine, G2Projective}, + }, + fq::Fq, + fq2::Fq2, + fr::Fr, }; -#[derive(PartialEq, Eq)] -pub struct Host {} - -impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) - } - fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) - } - fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) - } - fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) - } - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) - } - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) - } -} - -type G1Projective = G1Projective_Host; -type G1Affine = G1Affine_Host; -type G2Projective = G2Projective_Host; -type G2Affine = G2Affine_Host; -type Bls12_381 = sp_ark_bls12_381::Bls12_381; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; PairingOutput; msm); -test_pairing!(ark_pairing; super::Bls12_381); +test_group!(g1; sp_ark_bls12_381::curves::g1::G1Projective; sw); +test_group!(g2; sp_ark_bls12_381::curves::g2::G2Projective; sw); +test_group!(pairing_output; PairingOutput; msm); +test_pairing!(ark_pairing; sp_ark_bls12_381::curves::Bls12_381); #[test] fn test_g1_endomorphism_beta() { @@ -53,7 +28,7 @@ fn test_g1_endomorphism_beta() { #[test] fn test_g1_subgroup_membership_via_endomorphism() { let mut rng = test_rng(); - let generator = G1Projective::rand(&mut rng).into_affine(); + let generator = sp_ark_bls12_381::curves::g1::G1Projective::rand(&mut rng).into_affine(); assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } @@ -64,8 +39,12 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let x = Fq::rand(&mut rng); let greatest = rng.gen(); - if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + if let Some(p) = + sp_ark_bls12_381::curves::g1::G1Affine::get_point_from_x_unchecked(x, greatest) + { + if !::is_zero( + &p.mul_bigint(Fr::characteristic()), + ) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return } @@ -76,7 +55,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { #[test] fn test_g2_subgroup_membership_via_endomorphism() { let mut rng = test_rng(); - let generator = G2Projective::rand(&mut rng).into_affine(); + let generator = sp_ark_bls12_381::curves::g2::G2Projective::rand(&mut rng).into_affine(); assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } @@ -87,8 +66,12 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let x = Fq2::rand(&mut rng); let greatest = rng.gen(); - if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + if let Some(p) = + sp_ark_bls12_381::curves::g2::G2Affine::get_point_from_x_unchecked(x, greatest) + { + if !::is_zero( + &p.mul_bigint(Fr::characteristic()), + ) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return } diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs index 462cb5a1bd84b..0ffafd347ca10 100644 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ b/primitives/arkworks/test/tests/bw6_761.rs @@ -1,32 +1,6 @@ use ark_algebra_test_templates::*; -use ark_std::vec::Vec; -use sp_ark_bw6_761::HostFunctions; -#[derive(PartialEq, Eq)] -pub struct Host; - -impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) - } - fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) - } - fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) - } - fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) - } - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) - } - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) - } -} - -test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); -test_group!(g2; sp_ark_bw6_761::g2::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput>; msm); -test_pairing!(pairing; sp_ark_bw6_761::BW6_761); +test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); +test_group!(g2; sp_ark_bw6_761::g2::G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; sp_ark_bw6_761::curves::BW6_761); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs index 86b73ea4c3e93..9ff9632e985d7 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_377.rs @@ -1,16 +1,2 @@ use ark_algebra_test_templates::*; -use ark_std::vec::Vec; -use sp_ark_ed_on_bls12_377::HostFunctions; - -pub struct Host {} - -impl HostFunctions for Host { - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) - } - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) - } -} - -test_group!(te; sp_ark_ed_on_bls12_377::EdwardsProjective; te); +test_group!(te; sp_ark_ed_on_bls12_377::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs index 5b88020a7fd04..14e2c7c12554e 100644 --- a/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs @@ -1,35 +1,4 @@ use ark_algebra_test_templates::*; -use ark_std::vec::Vec; -use sp_ark_ed_on_bls12_381_bandersnatch::HostFunctions; -pub struct Host {} - -impl HostFunctions for Host { - fn ed_on_bls12_381_bandersnatch_te_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) - } - fn ed_on_bls12_381_bandersnatch_sw_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) - } - fn ed_on_bls12_381_bandersnatch_te_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_bandersnatch_sw_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) - } -} - -test_group!(sw; sp_ark_ed_on_bls12_381_bandersnatch::SWProjective; sw); -test_group!(te; sp_ark_ed_on_bls12_381_bandersnatch::EdwardsProjective; te); +test_group!(sw; sp_ark_ed_on_bls12_381_bandersnatch::SWProjective; sw); +test_group!(te; sp_ark_ed_on_bls12_381_bandersnatch::EdwardsProjective; te); From e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 28 Apr 2023 17:23:56 +0200 Subject: [PATCH 322/364] cleanup & update tests --- primitives/arkworks/test/Cargo.toml | 10 +++++----- primitives/arkworks/test/tests/bls12_381/mod.rs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 13ff54cf5da58..0db95a8e012c7 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -20,11 +20,11 @@ sp-ark-models = { version = "0.4.0", default-features = false } sp-arkworks = { path = "../" } ark-ec = { version = "0.4.0", default-features = false } ark-algebra-test-templates = { version = "0.4.0", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bw6-761 = { version = "0.4.0",git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bw6-761 = { version = "0.4.0-alpha",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "std" ] diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/test/tests/bls12_381/mod.rs index c63ffe261981b..7bbc4cfc957c3 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/test/tests/bls12_381/mod.rs @@ -2,7 +2,7 @@ use ark_algebra_test_templates::*; use ark_ff::{fields::Field, One, Zero}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, vec::Vec, UniformRand}; +use ark_std::{rand::Rng, test_rng, vec, UniformRand}; use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; use sp_ark_bls12_381::{ From c00b5cedf3c27388f2fc474c27a78b6cc6452163 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 1 May 2023 22:19:50 +0200 Subject: [PATCH 323/364] upgrade arkworks/algebra --- Cargo.lock | 1564 ++++++++++++++++----------- primitives/arkworks/test/Cargo.toml | 8 +- 2 files changed, 912 insertions(+), 660 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0dc074efc3485..983f2443c4a05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", @@ -263,9 +263,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "approx" @@ -656,7 +656,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.15", + "rustix 0.37.18", "slab", "socket2", "waker-fn", @@ -761,7 +761,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.6.2", "object 0.30.3", "rustc-demangle", ] @@ -828,7 +828,7 @@ dependencies = [ "env_logger 0.9.3", "hash-db", "log", - "sp-core", + "sp-core 7.0.0", "sp-runtime", ] @@ -980,9 +980,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bounded-collections" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a071c348a5ef6da1d3a87166b408170b46002382b1dda83992b5c2208cefb370" +checksum = "e3888522b497857eb606bf51695988dba7096941822c1bcf676e3a929a9ae7a0" dependencies = [ "log", "parity-scale-codec", @@ -1182,13 +1182,13 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.4", + "clap 4.2.5", "node-cli", "rand 0.8.5", "sc-chain-spec", "sc-keystore", - "sp-core", - "sp-keystore", + "sp-core 7.0.0", + "sp-keystore 0.13.0", ] [[package]] @@ -1296,9 +1296,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.24" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef2b3ded6a26dfaec672a742c93c8cf6b689220324da509ec5caa20de55dc83" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "bitflags", "clap_lex 0.2.4", @@ -1308,9 +1308,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.4" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +checksum = "8a1f23fa97e1d1641371b51f35535cb26959b8e27ab50d167a8b996b5bada819" dependencies = [ "clap_builder", "clap_derive", @@ -1319,9 +1319,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.4" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +checksum = "0fdc5d93c358224b4d6867ef1356d740de2303e9892edc06c5340daeccd96bab" dependencies = [ "anstream", "anstyle", @@ -1336,7 +1336,7 @@ version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a19591b2ab0e3c04b588a0e04ddde7b9eaa423646d1b4a8092879216bf47473" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", ] [[package]] @@ -1590,7 +1590,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.24", + "clap 3.2.25", "criterion-plot", "futures", "itertools", @@ -2497,13 +2497,13 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -2570,13 +2570,13 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-runtime-interface 7.0.0", + "sp-std 5.0.0", + "sp-storage 7.0.0", "static_assertions", ] @@ -2587,7 +2587,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.4", + "clap 4.2.5", "comfy-table", "frame-benchmarking", "frame-support", @@ -2612,16 +2612,16 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-database", - "sp-externalities", + "sp-externalities 0.13.0", "sp-inherents", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-storage 7.0.0", + "sp-trie 7.0.0", "thiserror", "thousands", ] @@ -2635,9 +2635,9 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -2667,18 +2667,18 @@ dependencies = [ "rand 0.8.5", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-npos-elections", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2703,12 +2703,12 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "sp-version", ] @@ -2736,8 +2736,8 @@ dependencies = [ "pallet-elections-phragmen", "parity-scale-codec", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "substrate-rpc-client", "tokio", @@ -2767,15 +2767,15 @@ dependencies = [ "smallvec", "sp-api", "sp-arithmetic", - "sp-core", + "sp-core 7.0.0", "sp-core-hashing-proc-macro", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "sp-weights", "tt-call", ] @@ -2830,11 +2830,11 @@ dependencies = [ "serde", "sp-api", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-state-machine", - "sp-std", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", "sp-version", "trybuild", ] @@ -2847,7 +2847,7 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "sp-version", ] @@ -2872,11 +2872,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-externalities", - "sp-io", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-version", "sp-weights", "substrate-test-runtime-client", @@ -2891,10 +2891,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -2913,7 +2913,7 @@ dependencies = [ "parity-scale-codec", "sp-api", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -3710,7 +3710,7 @@ checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.10", - "rustix 0.37.15", + "rustix 0.37.18", "windows-sys 0.48.0", ] @@ -4013,14 +4013,14 @@ dependencies = [ "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-offchain", "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 5.0.0", "sp-transaction-pool", "sp-version", "static_assertions", @@ -4188,9 +4188,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" dependencies = [ "either", "fnv", @@ -4251,18 +4251,18 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" +checksum = "9e2d584751cecb2aabaa56106be6be91338a60a0f4e420cf2af639204f596fc1" dependencies = [ "bs58", "ed25519-dalek", "log", "multiaddr 0.17.1", "multihash 0.17.0", - "prost", "quick-protobuf", "rand 0.8.5", + "sha2 0.10.6", "thiserror", "zeroize", ] @@ -4482,7 +4482,7 @@ checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.1", + "libp2p-core 0.39.2", "libp2p-identity", "rcgen 0.10.0", "ring", @@ -4634,9 +4634,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" dependencies = [ "cc", "libc", @@ -4691,9 +4691,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" +checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" [[package]] name = "lite-json" @@ -4811,10 +4811,11 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb99c395ae250e1bf9133673f03ca9f97b7e71b705436bf8f089453445d1e9fe" +checksum = "fcce854c9e76cfd191182c280eb5460cb8efd2cb4e58a1fd56bc41102d7e5802" dependencies = [ + "autocfg", "rawpointer", ] @@ -4839,7 +4840,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.15", + "rustix 0.37.18", ] [[package]] @@ -4920,6 +4921,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.6" @@ -4947,10 +4957,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-beefy", - "sp-core", + "sp-core 7.0.0", "sp-mmr-primitives", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-test-runtime-client", "tokio", ] @@ -4966,7 +4976,7 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-mmr-primitives", "sp-runtime", ] @@ -5070,9 +5080,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "core2", - "digest 0.10.6", "multihash-derive", - "sha2 0.10.6", "unsigned-varint", ] @@ -5243,7 +5251,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.4", + "clap 4.2.5", "derive_more", "fs_extra", "futures", @@ -5264,13 +5272,13 @@ dependencies = [ "serde", "serde_json", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-timestamp", - "sp-tracing", - "sp-trie", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "tempfile", ] @@ -5280,7 +5288,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.4", + "clap 4.2.5", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5340,14 +5348,14 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "sp-timestamp", - "sp-tracing", + "sp-tracing 6.0.0", "sp-transaction-pool", "sp-transaction-storage-proof", "substrate-build-script-utils", @@ -5387,14 +5395,14 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-babe", - "sp-core", - "sp-externalities", + "sp-core 7.0.0", + "sp-externalities 0.13.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", + "sp-state-machine 0.13.0", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "wat", ] @@ -5402,14 +5410,14 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "parity-scale-codec", "sc-cli", "sc-client-api", "sc-executor", "sc-service", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "thiserror", ] @@ -5422,7 +5430,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-core", + "sp-core 7.0.0", "sp-runtime", ] @@ -5450,7 +5458,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "substrate-frame-rpc-system", "substrate-state-trie-migration-rpc", @@ -5460,7 +5468,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "generate-bags", "kitchensink-runtime", ] @@ -5469,7 +5477,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5498,9 +5506,9 @@ dependencies = [ "sp-consensus", "sp-consensus-aura", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-keyring", "sp-runtime", "sp-timestamp", @@ -5534,12 +5542,12 @@ dependencies = [ "sp-block-builder", "sp-consensus-aura", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-offchain", "sp-runtime", "sp-session", - "sp-std", + "sp-std 5.0.0", "sp-transaction-pool", "sp-version", "substrate-wasm-builder", @@ -5570,9 +5578,9 @@ dependencies = [ "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-keyring", "sp-runtime", "sp-timestamp", @@ -5845,11 +5853,11 @@ dependencies = [ "pallet-identity", "parity-scale-codec", "scale-info", - "sp-core", - "sp-core-hashing", - "sp-io", + "sp-core 7.0.0", + "sp-core-hashing 5.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5862,10 +5870,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5883,11 +5891,11 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-storage", + "sp-std 5.0.0", + "sp-storage 7.0.0", ] [[package]] @@ -5900,10 +5908,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5915,10 +5923,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5932,10 +5940,10 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-aura", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5949,10 +5957,10 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-authority-discovery", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5964,10 +5972,10 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -5990,12 +5998,12 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-babe", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6010,11 +6018,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", ] [[package]] @@ -6038,11 +6046,11 @@ dependencies = [ "log", "pallet-bags-list", "pallet-staking", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", - "sp-storage", - "sp-tracing", + "sp-std 5.0.0", + "sp-storage 7.0.0", + "sp-tracing 6.0.0", ] [[package]] @@ -6056,10 +6064,10 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6080,12 +6088,12 @@ dependencies = [ "scale-info", "serde", "sp-consensus-beefy", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6105,11 +6113,11 @@ dependencies = [ "serde", "sp-api", "sp-consensus-beefy", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6124,10 +6132,10 @@ dependencies = [ "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6143,10 +6151,10 @@ dependencies = [ "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6159,10 +6167,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6194,11 +6202,11 @@ dependencies = [ "serde", "smallvec", "sp-api", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "wasm-instrument 0.4.0", "wasmi 0.28.0", "wasmparser-nostd", @@ -6213,7 +6221,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-weights", ] @@ -6239,10 +6247,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6256,10 +6264,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6276,10 +6284,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6292,10 +6300,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6314,12 +6322,12 @@ dependencies = [ "rand 0.8.5", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-npos-elections", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "strum", ] @@ -6346,12 +6354,12 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-npos-elections", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "substrate-test-utils", ] @@ -6366,10 +6374,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6382,11 +6390,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6404,12 +6412,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "substrate-test-utils", ] @@ -6425,10 +6433,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6452,13 +6460,13 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-grandpa", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-keyring", "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6472,10 +6480,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6491,11 +6499,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6508,11 +6516,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-keyring", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6524,10 +6532,10 @@ dependencies = [ "parity-scale-codec", "safe-mix", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6541,10 +6549,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6557,10 +6565,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6577,11 +6585,11 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "sp-weights", ] @@ -6597,11 +6605,11 @@ dependencies = [ "itertools", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-mmr-primitives", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6615,10 +6623,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6633,11 +6641,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6659,10 +6667,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6676,10 +6684,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6691,10 +6699,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6707,12 +6715,12 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", ] [[package]] @@ -6731,12 +6739,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-runtime-interface", + "sp-runtime-interface 7.0.0", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6749,9 +6757,9 @@ dependencies = [ "log", "pallet-nomination-pools", "rand 0.8.5", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", ] [[package]] @@ -6761,7 +6769,7 @@ dependencies = [ "pallet-nomination-pools", "parity-scale-codec", "sp-api", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6780,12 +6788,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", ] [[package]] @@ -6799,11 +6807,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6826,11 +6834,11 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6844,10 +6852,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6861,10 +6869,10 @@ dependencies = [ "pallet-utility", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6878,10 +6886,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6894,10 +6902,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6916,10 +6924,10 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6932,10 +6940,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6952,11 +6960,11 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6967,10 +6975,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -6984,10 +6992,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7001,10 +7009,10 @@ dependencies = [ "pallet-preimage", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-weights", "substrate-test-utils", ] @@ -7018,10 +7026,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7035,13 +7043,13 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-session", "sp-staking", - "sp-std", - "sp-trie", + "sp-std 5.0.0", + "sp-trie 7.0.0", ] [[package]] @@ -7060,11 +7068,11 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-session", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7078,10 +7086,10 @@ dependencies = [ "parity-scale-codec", "rand_chacha 0.2.2", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7104,13 +7112,13 @@ dependencies = [ "scale-info", "serde", "sp-application-crypto", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-npos-elections", "sp-runtime", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "substrate-test-utils", ] @@ -7155,11 +7163,11 @@ dependencies = [ "parking_lot 0.12.1", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "substrate-state-trie-migration-rpc", "thousands", "tokio", @@ -7174,10 +7182,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7189,8 +7197,8 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", ] @@ -7204,11 +7212,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-timestamp", ] @@ -7225,11 +7233,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", - "sp-storage", + "sp-std 5.0.0", + "sp-storage 7.0.0", ] [[package]] @@ -7243,10 +7251,10 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7258,7 +7266,7 @@ dependencies = [ "parity-scale-codec", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-rpc", "sp-runtime", "sp-weights", @@ -7288,11 +7296,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-transaction-storage-proof", ] @@ -7309,10 +7317,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7326,10 +7334,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7345,10 +7353,10 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7362,10 +7370,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7380,10 +7388,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -8520,15 +8528,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.15" +version = "0.37.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0661814f891c57c930a610266415528da53c4933e6dea5fb350cbfe048a9ece" +checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" dependencies = [ "bitflags", "errno 0.3.1", "io-lifetimes 1.0.10", "libc", - "linux-raw-sys 0.3.4", + "linux-raw-sys 0.3.6", "windows-sys 0.48.0", ] @@ -8644,8 +8652,8 @@ name = "sc-allocator" version = "4.1.0-dev" dependencies = [ "log", - "sp-core", - "sp-wasm-interface", + "sp-core 7.0.0", + "sp-wasm-interface 7.0.0", "thiserror", ] @@ -8670,10 +8678,10 @@ dependencies = [ "sp-api", "sp-authority-discovery", "sp-blockchain", - "sp-core", - "sp-keystore", + "sp-core 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -8697,7 +8705,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", "substrate-prometheus-endpoint", @@ -8713,10 +8721,10 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "substrate-test-runtime-client", ] @@ -8733,9 +8741,9 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", ] [[package]] @@ -8754,7 +8762,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.4", + "clap 4.2.5", "fdlimit", "futures", "futures-timer", @@ -8777,12 +8785,12 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-keyring", - "sp-keystore", - "sp-panic-handler", + "sp-keystore 0.13.0", + "sp-panic-handler 5.0.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "sp-version", "tempfile", "thiserror", @@ -8805,13 +8813,13 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-database", - "sp-externalities", - "sp-keystore", + "sp-externalities 0.13.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", - "sp-storage", + "sp-state-machine 0.13.0", + "sp-storage 7.0.0", "sp-test-primitives", "substrate-prometheus-endpoint", "substrate-test-runtime", @@ -8841,12 +8849,12 @@ dependencies = [ "schnellru", "sp-arithmetic", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-database", "sp-runtime", - "sp-state-machine", - "sp-tracing", - "sp-trie", + "sp-state-machine 0.13.0", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "substrate-test-runtime-client", "tempfile", ] @@ -8868,9 +8876,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-test-primitives", "substrate-prometheus-endpoint", "thiserror", @@ -8900,13 +8908,13 @@ dependencies = [ "sp-consensus", "sp-consensus-aura", "sp-consensus-slots", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "sp-timestamp", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "tempfile", @@ -8945,13 +8953,13 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "sp-timestamp", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -8976,9 +8984,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core", + "sp-core 7.0.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "substrate-test-runtime-client", "thiserror", @@ -9014,12 +9022,12 @@ dependencies = [ "sp-consensus", "sp-consensus-beefy", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-mmr-primitives", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "tempfile", @@ -9042,7 +9050,7 @@ dependencies = [ "serde", "serde_json", "sp-consensus-beefy", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "substrate-test-runtime-client", "thiserror", @@ -9096,11 +9104,11 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -9123,7 +9131,7 @@ dependencies = [ "serde", "sp-blockchain", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-keyring", "sp-runtime", "substrate-test-runtime-client", @@ -9156,9 +9164,9 @@ dependencies = [ "sp-consensus-aura", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", "sp-timestamp", "substrate-prometheus-endpoint", @@ -9185,7 +9193,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-pow", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", "substrate-prometheus-endpoint", @@ -9208,10 +9216,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "substrate-test-runtime-client", ] @@ -9235,18 +9243,18 @@ dependencies = [ "sc-runtime-test", "sc-tracing", "sp-api", - "sp-core", - "sp-externalities", - "sp-io", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-io 7.0.0", "sp-maybe-compressed-blob", - "sp-panic-handler", + "sp-panic-handler 5.0.0", "sp-runtime", - "sp-runtime-interface", - "sp-state-machine", - "sp-tracing", - "sp-trie", + "sp-runtime-interface 7.0.0", + "sp-state-machine 0.13.0", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "sp-version", - "sp-wasm-interface", + "sp-wasm-interface 7.0.0", "substrate-test-runtime", "tempfile", "tracing", @@ -9261,7 +9269,7 @@ version = "0.10.0-dev" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface", + "sp-wasm-interface 7.0.0", "thiserror", "wasm-instrument 0.3.0", "wasmi 0.13.2", @@ -9274,8 +9282,8 @@ dependencies = [ "log", "sc-allocator", "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-runtime-interface 7.0.0", + "sp-wasm-interface 7.0.0", "wasmi 0.13.2", ] @@ -9295,9 +9303,9 @@ dependencies = [ "sc-allocator", "sc-executor-common", "sc-runtime-test", - "sp-io", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-io 7.0.0", + "sp-runtime-interface 7.0.0", + "sp-wasm-interface 7.0.0", "tempfile", "wasmtime", "wat", @@ -9327,8 +9335,8 @@ dependencies = [ "parking_lot 0.12.1", "serde_json", "sp-application-crypto", - "sp-core", - "sp-keystore", + "sp-core 7.0.0", + "sp-keystore 0.13.0", "tempfile", "thiserror", ] @@ -9373,10 +9381,10 @@ dependencies = [ "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "sp-test-primitives", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime", "substrate-test-runtime-client", @@ -9406,7 +9414,7 @@ dependencies = [ "sc-network-common", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "substrate-test-runtime", "substrate-test-runtime-client", @@ -9480,7 +9488,7 @@ dependencies = [ "sc-network-common", "sc-peerset", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "thiserror", ] @@ -9514,10 +9522,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "sp-test-primitives", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -9547,9 +9555,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-test-runtime", "substrate-test-runtime-client", "tokio", @@ -9603,10 +9611,10 @@ dependencies = [ "sc-utils", "sp-api", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-offchain", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-test-runtime-client", "threadpool", "tokio", @@ -9659,9 +9667,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-offchain", "sp-rpc", "sp-runtime", @@ -9682,7 +9690,7 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core", + "sp-core 7.0.0", "sp-rpc", "sp-runtime", "sp-version", @@ -9726,7 +9734,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-maybe-compressed-blob", "sp-runtime", "sp-version", @@ -9741,11 +9749,11 @@ dependencies = [ name = "sc-runtime-test" version = "2.0.0" dependencies = [ - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-runtime-interface 7.0.0", + "sp-std 5.0.0", "substrate-wasm-builder", ] @@ -9794,16 +9802,16 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-externalities", - "sp-keystore", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-keystore 0.13.0", "sp-runtime", "sp-session", - "sp-state-machine", - "sp-storage", + "sp-state-machine 0.13.0", + "sp-storage 7.0.0", "sp-transaction-pool", "sp-transaction-storage-proof", - "sp-trie", + "sp-trie 7.0.0", "sp-version", "static_init", "substrate-prometheus-endpoint", @@ -9840,13 +9848,13 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-tracing", - "sp-trie", + "sp-state-machine 0.13.0", + "sp-storage 7.0.0", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "substrate-test-runtime", "substrate-test-runtime-client", "tempfile", @@ -9860,20 +9868,20 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.1", - "sp-core", + "sp-core 7.0.0", ] [[package]] name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "fs4", "futures", "log", "sc-client-db", "sc-utils", - "sp-core", + "sp-core 7.0.0", "thiserror", "tokio", ] @@ -9909,10 +9917,10 @@ dependencies = [ "sc-telemetry", "serde", "serde_json", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -9954,10 +9962,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-rpc", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "thiserror", "tracing", "tracing-log", @@ -9997,9 +10005,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "sp-transaction-pool", "substrate-prometheus-endpoint", "substrate-test-runtime", @@ -10509,13 +10517,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core", + "sp-core 7.0.0", "sp-metadata-ir", "sp-runtime", - "sp-state-machine", - "sp-std", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", "sp-test-primitives", - "sp-trie", + "sp-trie 7.0.0", "sp-version", "thiserror", ] @@ -10546,10 +10554,10 @@ dependencies = [ "sc-block-builder", "sp-api", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-state-machine", - "sp-tracing", + "sp-state-machine 0.13.0", + "sp-tracing 6.0.0", "sp-version", "substrate-test-runtime-client", "trybuild", @@ -10562,9 +10570,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-std", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-std 5.0.0", ] [[package]] @@ -10573,8 +10581,8 @@ version = "2.0.0" dependencies = [ "sp-api", "sp-application-crypto", - "sp-core", - "sp-keystore", + "sp-core 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", "substrate-test-runtime-client", ] @@ -10591,8 +10599,8 @@ dependencies = [ "rand 0.8.5", "scale-info", "serde", - "sp-core", - "sp-std", + "sp-core 7.0.0", + "sp-std 5.0.0", "static_assertions", ] @@ -10611,8 +10619,8 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10620,15 +10628,14 @@ dependencies = [ "ark-scale", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-arkworks", - "sp-io", + "sp-ark-models 0.4.0-alpha", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-bls12-381" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10636,30 +10643,28 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-arkworks", - "sp-io", + "sp-ark-models 0.4.0-alpha", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-bw6-761" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-bw6-761", "ark-ff", "ark-scale", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-arkworks", - "sp-io", + "sp-ark-models 0.4.0-alpha", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-ed-on-bls12-377" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10668,14 +10673,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-io", + "sp-ark-models 0.4.0-alpha", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" -version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", @@ -10685,15 +10690,14 @@ dependencies = [ "ark-std", "parity-scale-codec", "sp-ark-bls12-381", - "sp-ark-models 0.4.0 (git+https://github.com/paritytech/ark-substrate)", - "sp-io", + "sp-ark-models 0.4.0-alpha", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-models" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" +version = "0.4.0-alpha" +source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" dependencies = [ "ark-ec", "ark-ff", @@ -10709,7 +10713,8 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0" -source = "git+https://github.com/paritytech/ark-substrate#4c1dc019c966e224a2b6a8fc92bb85c4b3beb358" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" dependencies = [ "ark-ec", "ark-ff", @@ -10737,7 +10742,7 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -10754,7 +10759,7 @@ dependencies = [ "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381-bandersnatch", - "sp-ark-models 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-ark-models 0.4.0", "sp-arkworks", ] @@ -10767,7 +10772,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -10778,7 +10783,7 @@ dependencies = [ "sp-api", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -10794,7 +10799,7 @@ dependencies = [ "sp-consensus", "sp-database", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "thiserror", ] @@ -10805,10 +10810,10 @@ dependencies = [ "async-trait", "futures", "log", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-test-primitives", "thiserror", ] @@ -10826,7 +10831,7 @@ dependencies = [ "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-timestamp", ] @@ -10842,11 +10847,11 @@ dependencies = [ "sp-application-crypto", "sp-consensus", "sp-consensus-slots", - "sp-core", + "sp-core 7.0.0", "sp-inherents", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-timestamp", ] @@ -10861,12 +10866,12 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-mmr-primitives", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "strum", ] @@ -10881,10 +10886,10 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core", - "sp-keystore", + "sp-core 7.0.0", + "sp-keystore 0.13.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -10893,9 +10898,9 @@ version = "0.10.0-dev" dependencies = [ "parity-scale-codec", "sp-api", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -10905,7 +10910,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 5.0.0", "sp-timestamp", ] @@ -10941,14 +10946,58 @@ dependencies = [ "secrecy", "serde", "serde_json", - "sp-core-hashing", + "sp-core-hashing 5.0.0", "sp-core-hashing-proc-macro", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", + "sp-debug-derive 5.0.0", + "sp-externalities 0.13.0", + "sp-runtime-interface 7.0.0", "sp-serializer", - "sp-std", - "sp-storage", + "sp-std 5.0.0", + "sp-storage 7.0.0", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tiny-bip39", + "zeroize", +] + +[[package]] +name = "sp-core" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "array-bytes", + "bitflags", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "lazy_static", + "libsecp256k1", + "log", + "merlin", + "parity-scale-codec", + "parking_lot 0.12.1", + "paste", + "primitive-types", + "rand 0.8.5", + "regex", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "sp-core-hashing 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-debug-derive 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-runtime-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "ss58-registry", "substrate-bip39", "thiserror", @@ -10965,7 +11014,21 @@ dependencies = [ "digest 0.10.6", "sha2 0.10.6", "sha3", - "sp-std", + "sp-std 5.0.0", + "twox-hash", +] + +[[package]] +name = "sp-core-hashing" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.6", + "sha2 0.10.6", + "sha3", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "twox-hash", ] @@ -10975,7 +11038,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "sp-core-hashing", + "sp-core-hashing 5.0.0", "syn 2.0.15", ] @@ -10996,14 +11059,35 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "sp-debug-derive" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "sp-externalities" +version = "0.13.0" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std 5.0.0", + "sp-storage 7.0.0", +] + [[package]] name = "sp-externalities" version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" dependencies = [ "environmental", "parity-scale-codec", - "sp-std", - "sp-storage", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] @@ -11015,9 +11099,9 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "thiserror", ] @@ -11035,14 +11119,41 @@ dependencies = [ "rustversion", "secp256k1", "sp-arkworks", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-keystore 0.13.0", + "sp-runtime-interface 7.0.0", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-io" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "bytes", + "ed25519", + "ed25519-dalek", + "futures", + "libsecp256k1", + "log", + "parity-scale-codec", + "rustversion", + "secp256k1", + "sp-arkworks", + "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-keystore 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-runtime-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-state-machine 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-tracing 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-trie 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "tracing", "tracing-core", ] @@ -11052,7 +11163,7 @@ name = "sp-keyring" version = "7.0.0" dependencies = [ "lazy_static", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "strum", ] @@ -11067,8 +11178,21 @@ dependencies = [ "rand 0.7.3", "rand_chacha 0.2.2", "serde", - "sp-core", - "sp-externalities", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "thiserror", +] + +[[package]] +name = "sp-keystore" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "futures", + "parity-scale-codec", + "parking_lot 0.12.1", + "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "thiserror", ] @@ -11087,7 +11211,7 @@ dependencies = [ "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -11101,10 +11225,10 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core", - "sp-debug-derive", + "sp-core 7.0.0", + "sp-debug-derive 5.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "thiserror", ] @@ -11117,9 +11241,9 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "substrate-test-utils", ] @@ -11127,7 +11251,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11141,7 +11265,7 @@ name = "sp-offchain" version = "4.0.0-dev" dependencies = [ "sp-api", - "sp-core", + "sp-core 7.0.0", "sp-runtime", ] @@ -11154,6 +11278,16 @@ dependencies = [ "regex", ] +[[package]] +name = "sp-panic-handler" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + [[package]] name = "sp-rpc" version = "6.0.0" @@ -11161,7 +11295,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "sp-core", + "sp-core 7.0.0", ] [[package]] @@ -11181,11 +11315,11 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-arithmetic", - "sp-core", - "sp-io", - "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "sp-weights", "substrate-test-runtime-client", "zstd 0.12.3+zstd.1.5.2", @@ -11200,23 +11334,53 @@ dependencies = [ "parity-scale-codec", "primitive-types", "rustversion", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface-proc-macro", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-io 7.0.0", + "sp-runtime-interface-proc-macro 6.0.0", "sp-runtime-interface-test-wasm", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-storage 7.0.0", + "sp-tracing 6.0.0", + "sp-wasm-interface 7.0.0", "static_assertions", "trybuild", ] +[[package]] +name = "sp-runtime-interface" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-runtime-interface-proc-macro 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-tracing 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-wasm-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "6.0.0" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" dependencies = [ "Inflector", "proc-macro-crate", @@ -11231,12 +11395,12 @@ version = "2.0.0" dependencies = [ "sc-executor", "sc-executor-common", - "sp-io", + "sp-io 7.0.0", "sp-runtime", - "sp-runtime-interface", + "sp-runtime-interface 7.0.0", "sp-runtime-interface-test-wasm", "sp-runtime-interface-test-wasm-deprecated", - "sp-state-machine", + "sp-state-machine 0.13.0", "tracing", "tracing-core", ] @@ -11246,10 +11410,10 @@ name = "sp-runtime-interface-test-wasm" version = "2.0.0" dependencies = [ "bytes", - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-runtime-interface 7.0.0", + "sp-std 5.0.0", "substrate-wasm-builder", ] @@ -11257,10 +11421,10 @@ dependencies = [ name = "sp-runtime-interface-test-wasm-deprecated" version = "2.0.0" dependencies = [ - "sp-core", - "sp-io", - "sp-runtime-interface", - "sp-std", + "sp-core 7.0.0", + "sp-io 7.0.0", + "sp-runtime-interface 7.0.0", + "sp-std 5.0.0", "substrate-wasm-builder", ] @@ -11279,10 +11443,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -11292,9 +11456,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -11310,21 +11474,46 @@ dependencies = [ "pretty_assertions", "rand 0.8.5", "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", + "sp-core 7.0.0", + "sp-externalities 0.13.0", + "sp-panic-handler 5.0.0", "sp-runtime", - "sp-std", - "sp-trie", + "sp-std 5.0.0", + "sp-trie 7.0.0", "thiserror", "tracing", "trie-db", ] +[[package]] +name = "sp-state-machine" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-panic-handler 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-trie 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "thiserror", + "tracing", +] + [[package]] name = "sp-std" version = "5.0.0" +[[package]] +name = "sp-std" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" + [[package]] name = "sp-storage" version = "7.0.0" @@ -11333,8 +11522,21 @@ dependencies = [ "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 5.0.0", + "sp-std 5.0.0", +] + +[[package]] +name = "sp-storage" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] @@ -11345,7 +11547,7 @@ dependencies = [ "scale-info", "serde", "sp-application-crypto", - "sp-core", + "sp-core 7.0.0", "sp-runtime", ] @@ -11359,7 +11561,7 @@ dependencies = [ "parity-scale-codec", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "thiserror", ] @@ -11368,7 +11570,19 @@ name = "sp-tracing" version = "6.0.0" dependencies = [ "parity-scale-codec", - "sp-std", + "sp-std 5.0.0", + "tracing", + "tracing-core", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sp-tracing" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "parity-scale-codec", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "tracing", "tracing-core", "tracing-subscriber 0.2.25", @@ -11390,11 +11604,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 7.0.0", "sp-inherents", "sp-runtime", - "sp-std", - "sp-trie", + "sp-std 5.0.0", + "sp-trie 7.0.0", ] [[package]] @@ -11413,9 +11627,9 @@ dependencies = [ "parking_lot 0.12.1", "scale-info", "schnellru", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "thiserror", "tracing", "trie-bench", @@ -11424,6 +11638,29 @@ dependencies = [ "trie-standardmap", ] +[[package]] +name = "sp-trie" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "ahash 0.8.3", + "hash-db", + "hashbrown 0.13.2", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", + "schnellru", + "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "thiserror", + "tracing", + "trie-db", + "trie-root", +] + [[package]] name = "sp-version" version = "5.0.0" @@ -11435,7 +11672,7 @@ dependencies = [ "serde", "sp-core-hashing-proc-macro", "sp-runtime", - "sp-std", + "sp-std 5.0.0", "sp-version-proc-macro", "thiserror", ] @@ -11459,7 +11696,21 @@ dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std", + "sp-std 5.0.0", + "wasmi 0.13.2", + "wasmtime", +] + +[[package]] +name = "sp-wasm-interface" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", "wasmi 0.13.2", "wasmtime", ] @@ -11473,9 +11724,9 @@ dependencies = [ "serde", "smallvec", "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", + "sp-core 7.0.0", + "sp-debug-derive 5.0.0", + "sp-std 5.0.0", ] [[package]] @@ -11512,9 +11763,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.39.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" +checksum = "eb47a8ad42e5fc72d5b1eb104a5546937eaf39843499948bb666d6e93c62423b" dependencies = [ "Inflector", "num-format", @@ -11616,7 +11867,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "sc-cli", ] @@ -11658,11 +11909,11 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.4", + "clap 4.2.5", "frame-support", "frame-system", "sc-cli", - "sp-core", + "sp-core 7.0.0", "sp-runtime", ] @@ -11677,9 +11928,9 @@ dependencies = [ "sc-rpc-api", "scale-info", "serde", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-storage", + "sp-storage 7.0.0", "tokio", ] @@ -11699,9 +11950,9 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-test-runtime-client", "tokio", ] @@ -11726,7 +11977,7 @@ dependencies = [ "log", "sc-rpc-api", "serde", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "tokio", ] @@ -11743,10 +11994,10 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core", + "sp-core 7.0.0", "sp-runtime", - "sp-state-machine", - "sp-trie", + "sp-state-machine 0.13.0", + "sp-trie 7.0.0", "trie-db", ] @@ -11768,11 +12019,11 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-keyring", - "sp-keystore", + "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", ] [[package]] @@ -11803,19 +12054,19 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-beefy", "sp-consensus-grandpa", - "sp-core", - "sp-externalities", + "sp-core 7.0.0", + "sp-externalities 0.13.0", "sp-inherents", - "sp-io", + "sp-io 7.0.0", "sp-keyring", "sp-offchain", "sp-runtime", - "sp-runtime-interface", + "sp-runtime-interface 7.0.0", "sp-session", - "sp-state-machine", - "sp-std", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", "sp-transaction-pool", - "sp-trie", + "sp-trie 7.0.0", "sp-version", "substrate-test-runtime-client", "substrate-wasm-builder", @@ -11835,7 +12086,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "substrate-test-client", "substrate-test-runtime", @@ -11993,7 +12244,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.15", + "rustix 0.37.18", "windows-sys 0.45.0", ] @@ -12331,10 +12582,11 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.38" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ + "cfg-if", "log", "pin-project-lite 0.2.9", "tracing-attributes", @@ -12540,7 +12792,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.2.4", + "clap 4.2.5", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12555,15 +12807,15 @@ dependencies = [ "sp-api", "sp-consensus-aura", "sp-consensus-babe", - "sp-core", - "sp-debug-derive", - "sp-externalities", + "sp-core 7.0.0", + "sp-debug-derive 5.0.0", + "sp-externalities 0.13.0", "sp-inherents", - "sp-io", - "sp-keystore", + "sp-io 7.0.0", + "sp-keystore 0.13.0", "sp-rpc", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-timestamp", "sp-transaction-storage-proof", "sp-version", @@ -12741,9 +12993,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" dependencies = [ "getrandom 0.2.9", ] @@ -12902,9 +13154,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "d05d0b6fcd0aeb98adf16e7975331b3c17222aa815148f5b976370ce589d80ef" dependencies = [ "leb128", ] @@ -13247,9 +13499,9 @@ dependencies = [ [[package]] name = "wast" -version = "56.0.0" +version = "57.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b54185c051d7bbe23757d50fe575880a2426a2f06d2e9f6a10fd9a4a42920c0" +checksum = "6eb0f5ed17ac4421193c7477da05892c2edafd67f9639e3c11a82086416662dc" dependencies = [ "leb128", "memchr", @@ -13259,9 +13511,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56681922808216ab86d96bb750f70d500b5a7800e41564290fd46bb773581299" +checksum = "ab9ab0d87337c3be2bb6fc5cd331c4ba9fd6bcb4ee85048a0dd59ed9ecf92e53" dependencies = [ "wast", ] @@ -13773,9 +14025,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "5617da7e1f97bf363947d767b91aaf3c2bbc19db7fda9c65af1278713d58e0a2" dependencies = [ "memchr", ] diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 0db95a8e012c7..b3d6e14e498f4 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -11,15 +11,15 @@ license = "MIT/Apache-2.0" edition = "2021" [dependencies] -ark-ff = { version="0.4.0", default-features = false } +ark-ff = { version="0.4.2", default-features = false } ark-std = { version = "0.4.0", default-features = false } -ark-serialize = { version = "0.4.0", default-features = false } +ark-serialize = { version = "0.4.2", default-features = false } sp-ark-models = { version = "0.4.0", default-features = false } [dev-dependencies] sp-arkworks = { path = "../" } -ark-ec = { version = "0.4.0", default-features = false } -ark-algebra-test-templates = { version = "0.4.0", default-features = false } +ark-ec = { version = "0.4.2", default-features = false } +ark-algebra-test-templates = { version = "0.4.2", default-features = false } sp-ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } sp-ark-bw6-761 = { version = "0.4.0-alpha",git = "https://github.com/paritytech/ark-substrate", default-features = false } From 73e4f64ff0d2fc6c51a1a83d5456b98292043d2d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 3 May 2023 12:27:13 +0200 Subject: [PATCH 324/364] cargo update --- Cargo.lock | 229 +++++++++++++++-------------------------------------- 1 file changed, 66 insertions(+), 163 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 066ad3c4dfbc3..be14eb127b0db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -217,21 +217,6 @@ name = "anstream" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" -dependencies = [ - "anstyle 1.0.0", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", @@ -276,40 +261,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "anstyle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" - -[[package]] -name = "anstyle-parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "anstyle-wincon" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" -dependencies = [ - "anstyle 1.0.0", - "windows-sys 0.48.0", -] - [[package]] name = "anyhow" version = "1.0.71" @@ -521,7 +472,7 @@ dependencies = [ [[package]] name = "ark-scale" version = "0.0.2" -source = "git+https://github.com/w3f/ark-scale#f9fdb109d377cf196e3a62711481877435c12180" +source = "git+https://github.com/w3f/ark-scale#2da0a330df465a7e1691a9ef86f7511469f5312a" dependencies = [ "ark-ec", "ark-serialize", @@ -665,7 +616,7 @@ version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86d6b683edf8d1119fe420a94f8a7e389239666aa72e65495d91c00462510151" dependencies = [ - "anstyle 0.3.5", + "anstyle", "bstr", "doc-comment", "predicates 3.0.3", @@ -1231,7 +1182,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.5", + "clap 4.2.7", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1357,9 +1308,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.5" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a1f23fa97e1d1641371b51f35535cb26959b8e27ab50d167a8b996b5bada819" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" dependencies = [ "clap_builder", "clap_derive", @@ -1368,12 +1319,12 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.5" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdc5d93c358224b4d6867ef1356d740de2303e9892edc06c5340daeccd96bab" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" dependencies = [ "anstream", - "anstyle 1.0.0", + "anstyle", "bitflags", "clap_lex 0.4.1", "strsim", @@ -1385,7 +1336,7 @@ version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a19591b2ab0e3c04b588a0e04ddde7b9eaa423646d1b4a8092879216bf47473" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", ] [[package]] @@ -1397,7 +1348,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.15", ] [[package]] @@ -2636,7 +2587,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.5", + "clap 4.2.7", "comfy-table", "frame-benchmarking", "frame-support", @@ -2727,7 +2678,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -4860,9 +4811,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcce854c9e76cfd191182c280eb5460cb8efd2cb4e58a1fd56bc41102d7e5802" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" dependencies = [ "autocfg", "rawpointer", @@ -5300,7 +5251,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.5", + "clap 4.2.7", "derive_more", "fs_extra", "futures", @@ -5337,7 +5288,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.5", + "clap 4.2.7", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5459,7 +5410,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5517,7 +5468,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "generate-bags", "kitchensink-runtime", ] @@ -5526,7 +5477,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -7445,9 +7396,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bfb81cf5c90a222db2fb7b3a7cbf8cc7f38dfb6647aca4d98edf8281f56ed5" +checksum = "bd4572a52711e2ccff02b4973ec7e4a5b5c23387ebbfbd6cd42b34755714cefc" dependencies = [ "blake2", "crc32fast", @@ -7845,7 +7796,7 @@ version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" dependencies = [ - "anstyle 0.3.5", + "anstyle", "difflib", "itertools", "predicates-core", @@ -8811,7 +8762,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.5", + "clap 4.2.7", "fdlimit", "futures", "futures-timer", @@ -9926,7 +9877,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "fs4", "futures", "log", @@ -10671,7 +10622,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10686,7 +10637,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10701,7 +10652,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10715,7 +10666,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10731,7 +10682,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", @@ -10748,7 +10699,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#44957cd837b275bc05bcfde027dd6394a9297736" +source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" dependencies = [ "ark-ec", "ark-ff", @@ -11015,7 +10966,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "array-bytes", "bitflags", @@ -11072,7 +11023,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "blake2b_simd", "byteorder", @@ -11113,7 +11064,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "proc-macro2", "quote", @@ -11133,7 +11084,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "environmental", "parity-scale-codec", @@ -11185,7 +11136,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "bytes", "ed25519", @@ -11237,7 +11188,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "futures", "parity-scale-codec", @@ -11302,7 +11253,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11332,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "backtrace", "lazy_static", @@ -11402,7 +11353,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11431,7 +11382,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "Inflector", "proc-macro-crate", @@ -11539,7 +11490,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "hash-db", "log", @@ -11563,7 +11514,7 @@ version = "5.0.0" [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" [[package]] name = "sp-storage" @@ -11580,7 +11531,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11630,7 +11581,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "parity-scale-codec", "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", @@ -11692,7 +11643,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "ahash 0.8.3", "hash-db", @@ -11755,7 +11706,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#e4c507d0fb9ebf1e9cd7c61b55b708c7129efa22" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11918,7 +11869,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "sc-cli", ] @@ -11960,7 +11911,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "frame-support", "frame-system", "sc-cli", @@ -12843,7 +12794,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.2.5", + "clap 4.2.7", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -13042,12 +12993,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "uuid" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - [[package]] name = "uuid" version = "1.3.2" @@ -13909,13 +13854,13 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -13924,7 +13869,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.42.1", + "windows-targets 0.42.2", ] [[package]] @@ -13942,13 +13887,13 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -13978,12 +13923,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - [[package]] name = "windows_aarch64_msvc" version = "0.34.0" @@ -14002,12 +13941,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - [[package]] name = "windows_i686_gnu" version = "0.34.0" @@ -14026,12 +13959,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - [[package]] name = "windows_i686_msvc" version = "0.34.0" @@ -14050,12 +13977,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - [[package]] name = "windows_x86_64_gnu" version = "0.34.0" @@ -14074,12 +13995,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -14092,12 +14007,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - [[package]] name = "windows_x86_64_msvc" version = "0.34.0" @@ -14116,17 +14025,11 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - [[package]] name = "winnow" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5617da7e1f97bf363947d767b91aaf3c2bbc19db7fda9c65af1278713d58e0a2" +checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" dependencies = [ "memchr", ] From e974cc8ecb04537b7179e7b17564c28093a5867f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 8 May 2023 15:53:43 +0200 Subject: [PATCH 325/364] adopt tests --- Cargo.lock | 324 ++++++++---------- Cargo.toml | 1 - primitives/arkworks/Cargo.toml | 17 + primitives/arkworks/src/lib.rs | 3 + primitives/arkworks/src/tests/bls12_377.rs | 38 ++ .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin .../{test => src}/tests/bls12_381/mod.rs | 72 ++-- primitives/arkworks/src/tests/bw6_761.rs | 38 ++ .../arkworks/src/tests/ed_on_bls12_377.rs | 16 + .../src/tests/ed_on_bls12_381_bandersnatch.rs | 39 +++ .../arkworks/{test => src}/tests/mod.rs | 0 primitives/arkworks/test/Cargo.toml | 48 --- primitives/arkworks/test/lib.rs | 4 - primitives/arkworks/test/tests/bls12_377.rs | 6 - primitives/arkworks/test/tests/bw6_761.rs | 6 - .../arkworks/test/tests/ed_on_bls12_377.rs | 2 - .../tests/ed_on_bls12_381_bandersnatch.rs | 4 - 20 files changed, 338 insertions(+), 280 deletions(-) create mode 100644 primitives/arkworks/src/tests/bls12_377.rs rename primitives/arkworks/{test => src}/tests/bls12_381/g1_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks/{test => src}/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks/{test => src}/tests/bls12_381/g2_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks/{test => src}/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks/{test => src}/tests/bls12_381/mod.rs (59%) create mode 100644 primitives/arkworks/src/tests/bw6_761.rs create mode 100644 primitives/arkworks/src/tests/ed_on_bls12_377.rs create mode 100644 primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs rename primitives/arkworks/{test => src}/tests/mod.rs (100%) delete mode 100644 primitives/arkworks/test/Cargo.toml delete mode 100644 primitives/arkworks/test/lib.rs delete mode 100644 primitives/arkworks/test/tests/bls12_377.rs delete mode 100644 primitives/arkworks/test/tests/bw6_761.rs delete mode 100644 primitives/arkworks/test/tests/ed_on_bls12_377.rs delete mode 100644 primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs diff --git a/Cargo.lock b/Cargo.lock index e61fb7ac76565..a423bcb7541f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -556,7 +556,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.20", + "time 0.3.21", ] [[package]] @@ -572,7 +572,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.20", + "time 0.3.21", ] [[package]] @@ -662,7 +662,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.18", + "rustix 0.37.19", "slab", "socket2", "waker-fn", @@ -2102,13 +2102,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -2347,17 +2347,6 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - [[package]] name = "errno" version = "0.3.1" @@ -2962,13 +2951,12 @@ dependencies = [ [[package]] name = "fs4" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea55201cc351fdb478217c0fb641b59813da9b4efe4c414a9d8f989a657d149" +checksum = "a7f5b6908aecca5812a4569056285e58c666588c9573ee59765bf1d3692699e2" dependencies = [ - "libc", - "rustix 0.35.13", - "winapi", + "rustix 0.37.19", + "windows-sys 0.48.0", ] [[package]] @@ -3651,7 +3639,7 @@ checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" dependencies = [ "console", "number_prefix", - "portable-atomic", + "portable-atomic 0.3.20", "unicode-width", ] @@ -3701,12 +3689,6 @@ dependencies = [ "webrtc-util", ] -[[package]] -name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - [[package]] name = "io-lifetimes" version = "1.0.10" @@ -3749,8 +3731,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.10", - "rustix 0.37.18", + "io-lifetimes", + "rustix 0.37.19", "windows-sys 0.48.0", ] @@ -3946,9 +3928,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ "cpufeatures", ] @@ -4062,7 +4044,7 @@ dependencies = [ "sp-session", "sp-staking", "sp-statement-store", - "sp-std", + "sp-std 5.0.0", "sp-transaction-pool", "sp-version", "static_assertions", @@ -4122,9 +4104,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.142" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "libgit2-sys" @@ -4719,12 +4701,6 @@ dependencies = [ "nalgebra", ] -[[package]] -name = "linux-raw-sys" -version = "0.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -4733,9 +4709,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" +checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" [[package]] name = "lite-json" @@ -4888,7 +4864,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.18", + "rustix 0.37.19", ] [[package]] @@ -5299,7 +5275,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes 4.2.0", - "clap 4.2.5", + "clap 4.2.7", "derive_more", "fs_extra", "futures", @@ -5450,10 +5426,10 @@ dependencies = [ "sp-keyring", "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-statement-store", - "sp-tracing", - "sp-trie", + "sp-tracing 6.0.0", + "sp-trie 7.0.0", "wat", ] @@ -6382,13 +6358,13 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-npos-elections", "sp-runtime", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 5.0.0", + "sp-tracing 6.0.0", ] [[package]] @@ -7270,11 +7246,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core", - "sp-io", + "sp-core 7.0.0", + "sp-io 7.0.0", "sp-runtime", "sp-statement-store", - "sp-std", + "sp-std 5.0.0", ] [[package]] @@ -7519,9 +7495,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -7773,14 +7749,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.5", - "spki 0.7.1", + "spki 0.7.2", ] [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "platforms" @@ -7875,9 +7851,18 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "0.3.19" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" +dependencies = [ + "portable-atomic 1.3.1", +] + +[[package]] +name = "portable-atomic" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" +checksum = "1bbda379e6e462c97ea6afe9f6233619b202bbc4968d7caa6917788d2070a044" [[package]] name = "ppv-lite86" @@ -8323,7 +8308,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring", - "time 0.3.20", + "time 0.3.21", "x509-parser 0.13.2", "yasna", ] @@ -8336,7 +8321,7 @@ checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", "ring", - "time 0.3.20", + "time 0.3.21", "yasna", ] @@ -8607,20 +8592,6 @@ dependencies = [ "nom", ] -[[package]] -name = "rustix" -version = "0.35.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" -dependencies = [ - "bitflags", - "errno 0.2.8", - "io-lifetimes 0.7.5", - "libc", - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - [[package]] name = "rustix" version = "0.36.13" @@ -8628,8 +8599,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658" dependencies = [ "bitflags", - "errno 0.3.1", - "io-lifetimes 1.0.10", + "errno", + "io-lifetimes", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8637,15 +8608,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.18" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", - "errno 0.3.1", - "io-lifetimes 1.0.10", + "errno", + "io-lifetimes", "libc", - "linux-raw-sys 0.3.6", + "linux-raw-sys 0.3.7", "windows-sys 0.48.0", ] @@ -8927,9 +8898,9 @@ dependencies = [ "sp-externalities 0.13.0", "sp-keystore 0.13.0", "sp-runtime", - "sp-state-machine", + "sp-state-machine 0.13.0", "sp-statement-store", - "sp-storage", + "sp-storage 7.0.0", "sp-test-primitives", "substrate-prometheus-endpoint", "substrate-test-runtime", @@ -10019,10 +9990,10 @@ dependencies = [ "sc-client-api", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 7.0.0", "sp-runtime", "sp-statement-store", - "sp-tracing", + "sp-tracing 6.0.0", "substrate-prometheus-endpoint", "tempfile", "tokio", @@ -10423,18 +10394,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.160" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" dependencies = [ "proc-macro2", "quote", @@ -10523,9 +10494,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c2bb1a323307527314a36bfb73f24febb08ce2b8a554bf4ffd6f51ad15198c" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.6", "keccak", @@ -10605,9 +10576,9 @@ dependencies = [ [[package]] name = "slice-group-by" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" @@ -10777,7 +10748,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10785,14 +10756,14 @@ dependencies = [ "ark-scale", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0-alpha", + "sp-ark-models", "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10800,28 +10771,26 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0-alpha", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-ark-models", ] [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-bw6-761", "ark-ff", "ark-scale", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0-alpha", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-ark-models", ] [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10830,14 +10799,13 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-ark-models 0.4.0-alpha", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-ark-models", ] [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", @@ -10847,31 +10815,13 @@ dependencies = [ "ark-std", "parity-scale-codec", "sp-ark-bls12-381", - "sp-ark-models 0.4.0-alpha", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-ark-models", ] [[package]] name = "sp-ark-models" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#89340cc7df401cbc5416be8d3e76a142292ec75a" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "getrandom 0.2.9", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "sp-ark-models" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" +source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" dependencies = [ "ark-ec", "ark-ff", @@ -10888,6 +10838,7 @@ dependencies = [ name = "sp-arkworks" version = "0.4.0" dependencies = [ + "ark-algebra-test-templates", "ark-bls12-377", "ark-bls12-381", "ark-bw6-761", @@ -10899,25 +10850,14 @@ dependencies = [ "ark-serialize", "ark-std", "parity-scale-codec", - "sp-std 5.0.0", -] - -[[package]] -name = "sp-arkworks-test" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", "sp-ark-bls12-377", "sp-ark-bls12-381", "sp-ark-bw6-761", "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381-bandersnatch", - "sp-ark-models 0.4.0", - "sp-arkworks", + "sp-ark-models", + "sp-io 7.0.0", + "sp-std 5.0.0", ] [[package]] @@ -11121,9 +11061,9 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "bitflags", "blake2", "bounded-collections", @@ -11178,7 +11118,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "blake2b_simd", "byteorder", @@ -11219,7 +11159,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "proc-macro2", "quote", @@ -11239,7 +11179,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "environmental", "parity-scale-codec", @@ -11291,7 +11231,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "bytes", "ed25519", @@ -11343,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "futures", "parity-scale-codec", @@ -11438,7 +11378,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "backtrace", "lazy_static", @@ -11508,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11537,7 +11477,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "Inflector", "proc-macro-crate", @@ -11642,6 +11582,26 @@ dependencies = [ "trie-db", ] +[[package]] +name = "sp-state-machine" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-panic-handler 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-trie 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "thiserror", + "tracing", +] + [[package]] name = "sp-statement-store" version = "4.0.0-dev" @@ -11651,11 +11611,11 @@ dependencies = [ "scale-info", "sp-api", "sp-application-crypto", - "sp-core", - "sp-externalities", + "sp-core 7.0.0", + "sp-externalities 0.13.0", "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-runtime-interface 7.0.0", + "sp-std 5.0.0", "thiserror", ] @@ -11666,7 +11626,7 @@ version = "5.0.0" [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" [[package]] name = "sp-storage" @@ -11683,7 +11643,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11733,7 +11693,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "parity-scale-codec", "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", @@ -11795,7 +11755,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "ahash 0.8.3", "hash-db", @@ -11858,7 +11818,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#c00b5cedf3c27388f2fc474c27a78b6cc6452163" +source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11918,9 +11878,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", "der 0.7.5", @@ -12223,9 +12183,9 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-beefy", "sp-consensus-grandpa", - "sp-core", - "sp-debug-derive", - "sp-externalities", + "sp-core 7.0.0", + "sp-debug-derive 5.0.0", + "sp-externalities 0.13.0", "sp-inherents", "sp-io 7.0.0", "sp-keyring", @@ -12233,9 +12193,9 @@ dependencies = [ "sp-runtime", "sp-runtime-interface 7.0.0", "sp-session", - "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-state-machine 0.13.0", + "sp-std 5.0.0", + "sp-tracing 6.0.0", "sp-transaction-pool", "sp-trie 7.0.0", "sp-version", @@ -12415,7 +12375,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.18", + "rustix 0.37.19", "windows-sys 0.45.0", ] @@ -12508,9 +12468,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ "itoa", "serde", @@ -12520,15 +12480,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ "time-core", ] @@ -13753,7 +13713,7 @@ dependencies = [ "sha2 0.10.6", "stun", "thiserror", - "time 0.3.20", + "time 0.3.21", "tokio", "turn", "url", @@ -14258,7 +14218,7 @@ dependencies = [ "ring", "rusticata-macros", "thiserror", - "time 0.3.20", + "time 0.3.21", ] [[package]] @@ -14276,7 +14236,7 @@ dependencies = [ "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time 0.3.20", + "time 0.3.21", ] [[package]] @@ -14305,7 +14265,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.20", + "time 0.3.21", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index f112d6a9c831e..de0703128f53c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -186,7 +186,6 @@ members = [ "primitives/arithmetic", "primitives/arithmetic/fuzzer", "primitives/arkworks", - "primitives/arkworks/test", "primitives/authority-discovery", "primitives/block-builder", "primitives/blockchain", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 818cbe52b2097..b67b2ae41dd6e 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -24,6 +24,16 @@ sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } ark-scale = { git = "https://github.com/w3f/ark-scale", features = ["hazmat"], default-features = false } +[dev-dependencies] +sp-io = { path = "../io", default-features = false } +ark-algebra-test-templates = { version = "0.4.2", default-features = false } +sp-ark-models = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bw6-761 = { version = "0.4.0-alpha",git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } + [features] default = [ "std" ] std = [ @@ -39,4 +49,11 @@ std = [ "sp-std/std", "codec/std", "ark-scale/std", + "sp-io/std", + "ark-algebra-test-templates/std", + "sp-ark-bls12-377/std", + "sp-ark-bls12-381/std", + "sp-ark-bw6-761/std", + "sp-ark-ed-on-bls12-377/std", + "sp-ark-ed-on-bls12-381-bandersnatch/std", ] diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 85ebc2586db67..9b1c2eca895f5 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -6,3 +6,6 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381_bandersnatch; mod utils; + +#[cfg(test)] +mod tests; diff --git a/primitives/arkworks/src/tests/bls12_377.rs b/primitives/arkworks/src/tests/bls12_377.rs new file mode 100644 index 0000000000000..cb5ce4f32be0e --- /dev/null +++ b/primitives/arkworks/src/tests/bls12_377.rs @@ -0,0 +1,38 @@ +use ark_algebra_test_templates::*; +use sp_ark_bls12_377::{ + Bls12_377 as Bls12_377Host, G1Projective as G1ProjectiveHost, G2Projective as G2ProjectiveHost, + HostFunctions, +}; + +#[derive(PartialEq, Eq)] +struct Host; + +impl HostFunctions for Host { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) + } + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) + } + fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) + } + fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) + } + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) + } + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) + } +} + +type Bls12_377 = Bls12_377Host; +type G1Projective = G1ProjectiveHost; +type G2Projective = G2ProjectiveHost; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; super::Bls12_377); diff --git a/primitives/arkworks/test/tests/bls12_381/g1_compressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/bls12_381/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/test/tests/bls12_381/g1_compressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/bls12_381/g1_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/test/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/test/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/test/tests/bls12_381/g2_compressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/bls12_381/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/test/tests/bls12_381/g2_compressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/bls12_381/g2_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/test/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/test/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/test/tests/bls12_381/mod.rs b/primitives/arkworks/src/tests/bls12_381/mod.rs similarity index 59% rename from primitives/arkworks/test/tests/bls12_381/mod.rs rename to primitives/arkworks/src/tests/bls12_381/mod.rs index 7bbc4cfc957c3..ac29ca34607bb 100755 --- a/primitives/arkworks/test/tests/bls12_381/mod.rs +++ b/primitives/arkworks/src/tests/bls12_381/mod.rs @@ -1,24 +1,50 @@ #![cfg_attr(not(feature = "std"), no_std)] use ark_algebra_test_templates::*; +use ark_ec::{AffineRepr, CurveGroup, Group}; use ark_ff::{fields::Field, One, Zero}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{rand::Rng, test_rng, vec, UniformRand}; -use sp_ark_models::{pairing::PairingOutput, AffineRepr, CurveGroup, Group}; - use sp_ark_bls12_381::{ - curves::{ - g1::{G1Affine, G1Projective}, - g2::{G2Affine, G2Projective}, - }, - fq::Fq, - fq2::Fq2, - fr::Fr, + fq::Fq, fq2::Fq2, fr::Fr, Bls12_381 as Bls12_381Host, G1Affine as G1AffineHost, + G1Projective as G1ProjectiveHost, G2Affine as G2AffineHost, G2Projective as G2ProjectiveHost, + HostFunctions, }; +use sp_ark_models::pairing::PairingOutput; -test_group!(g1; sp_ark_bls12_381::curves::g1::G1Projective; sw); -test_group!(g2; sp_ark_bls12_381::curves::g2::G2Projective; sw); -test_group!(pairing_output; PairingOutput; msm); -test_pairing!(ark_pairing; sp_ark_bls12_381::curves::Bls12_381); +#[derive(PartialEq, Eq)] +struct Host; + +impl HostFunctions for Host { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) + } + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) + } + fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) + } + fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) + } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) + } +} + +type Bls12_381 = Bls12_381Host; +type G1Projective = G1ProjectiveHost; +type G2Projective = G2ProjectiveHost; +type G1Affine = G1AffineHost; +type G2Affine = G2AffineHost; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; PairingOutput; msm); +test_pairing!(ark_pairing; super::Bls12_381); #[test] fn test_g1_endomorphism_beta() { @@ -28,7 +54,7 @@ fn test_g1_endomorphism_beta() { #[test] fn test_g1_subgroup_membership_via_endomorphism() { let mut rng = test_rng(); - let generator = sp_ark_bls12_381::curves::g1::G1Projective::rand(&mut rng).into_affine(); + let generator = G1Projective::rand(&mut rng).into_affine(); assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } @@ -39,12 +65,8 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { let x = Fq::rand(&mut rng); let greatest = rng.gen(); - if let Some(p) = - sp_ark_bls12_381::curves::g1::G1Affine::get_point_from_x_unchecked(x, greatest) - { - if !::is_zero( - &p.mul_bigint(Fr::characteristic()), - ) { + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return } @@ -55,7 +77,7 @@ fn test_g1_subgroup_non_membership_via_endomorphism() { #[test] fn test_g2_subgroup_membership_via_endomorphism() { let mut rng = test_rng(); - let generator = sp_ark_bls12_381::curves::g2::G2Projective::rand(&mut rng).into_affine(); + let generator = G2Projective::rand(&mut rng).into_affine(); assert!(generator.is_in_correct_subgroup_assuming_on_curve()); } @@ -66,12 +88,8 @@ fn test_g2_subgroup_non_membership_via_endomorphism() { let x = Fq2::rand(&mut rng); let greatest = rng.gen(); - if let Some(p) = - sp_ark_bls12_381::curves::g2::G2Affine::get_point_from_x_unchecked(x, greatest) - { - if !::is_zero( - &p.mul_bigint(Fr::characteristic()), - ) { + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { assert!(!p.is_in_correct_subgroup_assuming_on_curve()); return } diff --git a/primitives/arkworks/src/tests/bw6_761.rs b/primitives/arkworks/src/tests/bw6_761.rs new file mode 100644 index 0000000000000..cd63321a94d65 --- /dev/null +++ b/primitives/arkworks/src/tests/bw6_761.rs @@ -0,0 +1,38 @@ +use ark_algebra_test_templates::*; +use sp_ark_bw6_761::{ + G1Projective as G1ProjectiveHost, G2Projective as G2ProjectiveHost, HostFunctions, + BW6_761 as BW6_761Host, +}; + +#[derive(PartialEq, Eq)] +struct Host; + +impl HostFunctions for Host { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) + } + fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) + } + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) + } + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) + } + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) + } + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) + } +} + +type BW6_761 = BW6_761Host; +type G1Projective = G1ProjectiveHost; +type G2Projective = G2ProjectiveHost; + +test_group!(g1; G1Projective; sw); +test_group!(g2; G2Projective; sw); +test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); +test_pairing!(pairing; super::BW6_761); diff --git a/primitives/arkworks/src/tests/ed_on_bls12_377.rs b/primitives/arkworks/src/tests/ed_on_bls12_377.rs new file mode 100644 index 0000000000000..26a2d3bcb08f3 --- /dev/null +++ b/primitives/arkworks/src/tests/ed_on_bls12_377.rs @@ -0,0 +1,16 @@ +use ark_algebra_test_templates::*; +use sp_ark_ed_on_bls12_377::{EdwardsProjective as EdwardsProjectiveHost, HostFunctions}; + +struct Host {} + +impl HostFunctions for Host { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) + } + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) + } +} + +type EdwardsProjective = EdwardsProjectiveHost; +test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs new file mode 100644 index 0000000000000..cd727a6d4f73e --- /dev/null +++ b/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs @@ -0,0 +1,39 @@ +use ark_algebra_test_templates::*; +use sp_ark_ed_on_bls12_381_bandersnatch::{ + EdwardsProjective as EdwardsProjectiveHost, HostFunctions, SWProjective as SWProjectiveHost, +}; + +pub struct Host {} + +impl HostFunctions for Host { + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_sw_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_bandersnatch_sw_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + } +} + +type EdwardsProjective = EdwardsProjectiveHost; +type SWProjective = SWProjectiveHost; + +test_group!(sw; SWProjective; sw); +test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/src/tests/mod.rs similarity index 100% rename from primitives/arkworks/test/tests/mod.rs rename to primitives/arkworks/src/tests/mod.rs diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml deleted file mode 100644 index b3d6e14e498f4..0000000000000 --- a/primitives/arkworks/test/Cargo.toml +++ /dev/null @@ -1,48 +0,0 @@ -[package] -name = "sp-arkworks-test" -version = "0.4.0" -authors = ["Parity Technologies ", "Achim Schneider ", "arkworks contributors" ] -repository = "https://github.com/paritytech/substrate/" -description = "Tests for arkwokrs pairing-friendly elliptic curves, optimized for Substrate" -keywords = ["cryptography", "finite-fields", "elliptic-curves" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-ff = { version="0.4.2", default-features = false } -ark-std = { version = "0.4.0", default-features = false } -ark-serialize = { version = "0.4.2", default-features = false } -sp-ark-models = { version = "0.4.0", default-features = false } - -[dev-dependencies] -sp-arkworks = { path = "../" } -ark-ec = { version = "0.4.2", default-features = false } -ark-algebra-test-templates = { version = "0.4.2", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bw6-761 = { version = "0.4.0-alpha",git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } - -[features] -default = [ "std" ] -std = [ - "ark-ff/std", - "ark-std/std", - "ark-serialize/std", - "sp-ark-models/std", - "sp-arkworks/std", - "ark-ec/std", - "ark-algebra-test-templates/std", - "sp-ark-bls12-377/std", - "sp-ark-bls12-381/std", - "sp-ark-bw6-761/std", - "sp-ark-ed-on-bls12-377/std", - "sp-ark-ed-on-bls12-381-bandersnatch/std", -] -curve = [ "scalar_field", "base_field" ] -scalar_field = [] -base_field = [] - diff --git a/primitives/arkworks/test/lib.rs b/primitives/arkworks/test/lib.rs deleted file mode 100644 index c0d41f9771e21..0000000000000 --- a/primitives/arkworks/test/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(test)] -mod tests; \ No newline at end of file diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs deleted file mode 100644 index 3f808e04bd953..0000000000000 --- a/primitives/arkworks/test/tests/bls12_377.rs +++ /dev/null @@ -1,6 +0,0 @@ -use ark_algebra_test_templates::*; - -test_group!(g1; sp_ark_bls12_377::curves::g1::G1Projective; sw); -test_group!(g2; sp_ark_bls12_377::curves::g2::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; sp_ark_bls12_377::curves::Bls12_377); diff --git a/primitives/arkworks/test/tests/bw6_761.rs b/primitives/arkworks/test/tests/bw6_761.rs deleted file mode 100644 index 0ffafd347ca10..0000000000000 --- a/primitives/arkworks/test/tests/bw6_761.rs +++ /dev/null @@ -1,6 +0,0 @@ -use ark_algebra_test_templates::*; - -test_group!(g1; sp_ark_bw6_761::g1::G1Projective; sw); -test_group!(g2; sp_ark_bw6_761::g2::G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; sp_ark_bw6_761::curves::BW6_761); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_377.rs b/primitives/arkworks/test/tests/ed_on_bls12_377.rs deleted file mode 100644 index 9ff9632e985d7..0000000000000 --- a/primitives/arkworks/test/tests/ed_on_bls12_377.rs +++ /dev/null @@ -1,2 +0,0 @@ -use ark_algebra_test_templates::*; -test_group!(te; sp_ark_ed_on_bls12_377::EdwardsProjective; te); diff --git a/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs deleted file mode 100644 index 14e2c7c12554e..0000000000000 --- a/primitives/arkworks/test/tests/ed_on_bls12_381_bandersnatch.rs +++ /dev/null @@ -1,4 +0,0 @@ -use ark_algebra_test_templates::*; - -test_group!(sw; sp_ark_ed_on_bls12_381_bandersnatch::SWProjective; sw); -test_group!(te; sp_ark_ed_on_bls12_381_bandersnatch::EdwardsProjective; te); From d0802cee68e4d7d833f8d295761a6ed2fcb5a6e3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 9 May 2023 11:22:59 +0200 Subject: [PATCH 326/364] versioning ark-substrate --- primitives/arkworks/Cargo.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index b67b2ae41dd6e..adbdf5749286d 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -27,12 +27,12 @@ ark-scale = { git = "https://github.com/w3f/ark-scale", features = ["hazmat"], d [dev-dependencies] sp-io = { path = "../io", default-features = false } ark-algebra-test-templates = { version = "0.4.2", default-features = false } -sp-ark-models = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bw6-761 = { version = "0.4.0-alpha",git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0-alpha", git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-ed-on-bls12-381-bandersnatch = { git = "https://github.com/paritytech/ark-substrate", default-features = false } [features] default = [ "std" ] From 5fb318d9af6b6be8694c843d9e0b44697fc252df Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 9 May 2023 15:05:58 +0200 Subject: [PATCH 327/364] cargo update --- Cargo.lock | 1429 ++++++++++++++++++++++------------------------------ 1 file changed, 591 insertions(+), 838 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 08942768127b4..d28f6afc5240f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -834,7 +834,7 @@ dependencies = [ "env_logger 0.9.3", "hash-db", "log", - "sp-core 7.0.0", + "sp-core", "sp-runtime", ] @@ -1193,8 +1193,8 @@ dependencies = [ "rand 0.8.5", "sc-chain-spec", "sc-keystore", - "sp-core 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-keystore", ] [[package]] @@ -1214,9 +1214,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" dependencies = [ "ciborium-io", "ciborium-ll", @@ -1225,15 +1225,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" [[package]] name = "ciborium-ll" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", "half", @@ -2584,13 +2584,13 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-runtime", - "sp-runtime-interface 7.0.0", - "sp-std 5.0.0", - "sp-storage 7.0.0", + "sp-runtime-interface", + "sp-std", + "sp-storage", "static_assertions", ] @@ -2626,16 +2626,16 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-database", - "sp-externalities 0.13.0", + "sp-externalities", "sp-inherents", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-storage 7.0.0", - "sp-trie 7.0.0", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-trie", "thiserror", "thousands", ] @@ -2649,9 +2649,9 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -2681,11 +2681,11 @@ dependencies = [ "rand 0.8.5", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -2717,12 +2717,12 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "sp-version", ] @@ -2751,8 +2751,8 @@ dependencies = [ "pallet-elections-phragmen", "parity-scale-codec", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "spinners", "substrate-rpc-client", @@ -2783,15 +2783,15 @@ dependencies = [ "smallvec", "sp-api", "sp-arithmetic", - "sp-core 7.0.0", + "sp-core", "sp-core-hashing-proc-macro", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-runtime", "sp-staking", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-state-machine", + "sp-std", + "sp-tracing", "sp-weights", "tt-call", ] @@ -2847,11 +2847,11 @@ dependencies = [ "serde", "sp-api", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", + "sp-state-machine", + "sp-std", "sp-version", "trybuild", ] @@ -2864,7 +2864,7 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "sp-version", ] @@ -2889,11 +2889,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-io 7.0.0", + "sp-core", + "sp-externalities", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-version", "sp-weights", "substrate-test-runtime-client", @@ -2908,10 +2908,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -2930,7 +2930,7 @@ dependencies = [ "parity-scale-codec", "sp-api", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -4036,15 +4036,15 @@ dependencies = [ "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-offchain", "sp-runtime", "sp-session", "sp-staking", "sp-statement-store", - "sp-std 5.0.0", + "sp-std", "sp-transaction-pool", "sp-version", "static_assertions", @@ -4981,10 +4981,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-beefy", - "sp-core 7.0.0", + "sp-core", "sp-mmr-primitives", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-test-runtime-client", "tokio", ] @@ -5000,7 +5000,7 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-mmr-primitives", "sp-runtime", ] @@ -5296,13 +5296,13 @@ dependencies = [ "serde", "serde_json", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-timestamp", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", + "sp-tracing", + "sp-trie", "tempfile", ] @@ -5374,14 +5374,14 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "sp-timestamp", - "sp-tracing 6.0.0", + "sp-tracing", "sp-transaction-pool", "sp-transaction-storage-proof", "substrate-build-script-utils", @@ -5421,15 +5421,15 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-babe", - "sp-core 7.0.0", - "sp-externalities 0.13.0", + "sp-core", + "sp-externalities", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-statement-store", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", + "sp-tracing", + "sp-trie", "wat", ] @@ -5444,7 +5444,7 @@ dependencies = [ "sc-executor", "sc-service", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "thiserror", ] @@ -5457,7 +5457,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-core 7.0.0", + "sp-core", "sp-runtime", ] @@ -5485,7 +5485,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "sp-statement-store", "substrate-frame-rpc-system", @@ -5535,9 +5535,9 @@ dependencies = [ "sp-consensus", "sp-consensus-aura", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-keyring", "sp-runtime", "sp-timestamp", @@ -5571,12 +5571,12 @@ dependencies = [ "sp-block-builder", "sp-consensus-aura", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-offchain", "sp-runtime", "sp-session", - "sp-std 5.0.0", + "sp-std", "sp-transaction-pool", "sp-version", "substrate-wasm-builder", @@ -5607,9 +5607,9 @@ dependencies = [ "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-keyring", "sp-runtime", "sp-timestamp", @@ -5888,11 +5888,11 @@ dependencies = [ "pallet-identity", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-core-hashing 5.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-core-hashing", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -5905,10 +5905,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -5926,11 +5926,11 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-storage 7.0.0", + "sp-std", + "sp-storage", ] [[package]] @@ -5943,10 +5943,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -5958,10 +5958,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -5975,10 +5975,10 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-aura", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -5992,10 +5992,10 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-authority-discovery", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6007,10 +6007,10 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6033,12 +6033,12 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-babe", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6053,11 +6053,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", ] [[package]] @@ -6081,11 +6081,11 @@ dependencies = [ "log", "pallet-bags-list", "pallet-staking", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", - "sp-storage 7.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-storage", + "sp-tracing", ] [[package]] @@ -6100,10 +6100,10 @@ dependencies = [ "parity-scale-codec", "paste", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6124,12 +6124,12 @@ dependencies = [ "scale-info", "serde", "sp-consensus-beefy", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6149,11 +6149,11 @@ dependencies = [ "serde", "sp-api", "sp-consensus-beefy", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6168,10 +6168,10 @@ dependencies = [ "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6187,10 +6187,10 @@ dependencies = [ "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6203,10 +6203,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6238,11 +6238,11 @@ dependencies = [ "serde", "smallvec", "sp-api", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "wasm-instrument 0.4.0", "wasmi 0.28.0", "wasmparser-nostd", @@ -6257,7 +6257,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-weights", ] @@ -6283,10 +6283,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6300,10 +6300,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6320,10 +6320,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6336,10 +6336,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6358,13 +6358,13 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-npos-elections", "sp-runtime", "sp-staking", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", ] [[package]] @@ -6383,12 +6383,12 @@ dependencies = [ "rand 0.8.5", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "strum", ] @@ -6415,12 +6415,12 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "substrate-test-utils", ] @@ -6435,10 +6435,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6451,11 +6451,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6473,12 +6473,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "substrate-test-utils", ] @@ -6494,10 +6494,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6521,13 +6521,13 @@ dependencies = [ "scale-info", "sp-application-crypto", "sp-consensus-grandpa", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-keyring", "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6541,10 +6541,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6560,11 +6560,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6577,11 +6577,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-keyring", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6593,10 +6593,10 @@ dependencies = [ "parity-scale-codec", "safe-mix", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6610,10 +6610,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6626,10 +6626,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6646,11 +6646,11 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "sp-weights", ] @@ -6666,11 +6666,11 @@ dependencies = [ "itertools", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-mmr-primitives", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6684,10 +6684,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6702,11 +6702,11 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6728,10 +6728,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6745,10 +6745,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6760,10 +6760,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6776,12 +6776,12 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", ] [[package]] @@ -6800,12 +6800,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-runtime-interface 7.0.0", + "sp-runtime-interface", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6818,9 +6818,9 @@ dependencies = [ "log", "pallet-nomination-pools", "rand 0.8.5", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", ] [[package]] @@ -6830,7 +6830,7 @@ dependencies = [ "pallet-nomination-pools", "parity-scale-codec", "sp-api", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6849,12 +6849,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", ] [[package]] @@ -6868,11 +6868,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6895,11 +6895,11 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6913,10 +6913,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6930,10 +6930,10 @@ dependencies = [ "pallet-utility", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6947,10 +6947,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6963,10 +6963,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -6985,10 +6985,10 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7001,10 +7001,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7021,11 +7021,11 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7036,10 +7036,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7053,10 +7053,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7070,10 +7070,10 @@ dependencies = [ "pallet-preimage", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-weights", "substrate-test-utils", ] @@ -7087,10 +7087,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7104,13 +7104,13 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0", - "sp-trie 7.0.0", + "sp-std", + "sp-trie", ] [[package]] @@ -7129,11 +7129,11 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-session", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7147,10 +7147,10 @@ dependencies = [ "parity-scale-codec", "rand_chacha 0.2.2", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7173,13 +7173,13 @@ dependencies = [ "scale-info", "serde", "sp-application-crypto", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-npos-elections", "sp-runtime", "sp-staking", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "substrate-test-utils", ] @@ -7224,11 +7224,11 @@ dependencies = [ "parking_lot 0.12.1", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-std", + "sp-tracing", "substrate-state-trie-migration-rpc", "thousands", "tokio", @@ -7246,11 +7246,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", "sp-statement-store", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7261,10 +7261,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7276,8 +7276,8 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", ] @@ -7291,11 +7291,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-timestamp", ] @@ -7312,11 +7312,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", - "sp-storage 7.0.0", + "sp-std", + "sp-storage", ] [[package]] @@ -7330,10 +7330,10 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7345,7 +7345,7 @@ dependencies = [ "parity-scale-codec", "sp-api", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-rpc", "sp-runtime", "sp-weights", @@ -7375,11 +7375,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-transaction-storage-proof", ] @@ -7396,10 +7396,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7413,10 +7413,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7432,10 +7432,10 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7449,10 +7449,10 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -7467,10 +7467,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -8169,9 +8169,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -8732,8 +8732,8 @@ name = "sc-allocator" version = "4.1.0-dev" dependencies = [ "log", - "sp-core 7.0.0", - "sp-wasm-interface 7.0.0", + "sp-core", + "sp-wasm-interface", "thiserror", ] @@ -8758,10 +8758,10 @@ dependencies = [ "sp-api", "sp-authority-discovery", "sp-blockchain", - "sp-core 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-keystore", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -8785,7 +8785,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", "substrate-prometheus-endpoint", @@ -8801,10 +8801,10 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "substrate-test-runtime-client", ] @@ -8821,9 +8821,9 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", ] [[package]] @@ -8865,12 +8865,12 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-keyring", - "sp-keystore 0.13.0", - "sp-panic-handler 5.0.0", + "sp-keystore", + "sp-panic-handler", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "sp-version", "tempfile", "thiserror", @@ -8893,14 +8893,14 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-database", - "sp-externalities 0.13.0", - "sp-keystore 0.13.0", + "sp-externalities", + "sp-keystore", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-statement-store", - "sp-storage 7.0.0", + "sp-storage", "sp-test-primitives", "substrate-prometheus-endpoint", "substrate-test-runtime", @@ -8930,12 +8930,12 @@ dependencies = [ "schnellru", "sp-arithmetic", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-database", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", + "sp-state-machine", + "sp-tracing", + "sp-trie", "substrate-test-runtime-client", "tempfile", ] @@ -8957,9 +8957,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-test-primitives", "substrate-prometheus-endpoint", "thiserror", @@ -8989,13 +8989,13 @@ dependencies = [ "sp-consensus", "sp-consensus-aura", "sp-consensus-slots", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "sp-timestamp", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "tempfile", @@ -9034,13 +9034,13 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "sp-timestamp", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -9065,9 +9065,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 7.0.0", + "sp-core", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "substrate-test-runtime-client", "thiserror", @@ -9103,12 +9103,12 @@ dependencies = [ "sp-consensus", "sp-consensus-beefy", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-mmr-primitives", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "tempfile", @@ -9131,7 +9131,7 @@ dependencies = [ "serde", "serde_json", "sp-consensus-beefy", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "substrate-test-runtime-client", "thiserror", @@ -9185,11 +9185,11 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -9212,7 +9212,7 @@ dependencies = [ "serde", "sp-blockchain", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-keyring", "sp-runtime", "substrate-test-runtime-client", @@ -9246,9 +9246,9 @@ dependencies = [ "sp-consensus-aura", "sp-consensus-babe", "sp-consensus-slots", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", "sp-timestamp", "substrate-prometheus-endpoint", @@ -9275,7 +9275,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-pow", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", "substrate-prometheus-endpoint", @@ -9298,10 +9298,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "substrate-test-runtime-client", ] @@ -9325,18 +9325,18 @@ dependencies = [ "sc-runtime-test", "sc-tracing", "sp-api", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-io 7.0.0", + "sp-core", + "sp-externalities", + "sp-io", "sp-maybe-compressed-blob", - "sp-panic-handler 5.0.0", + "sp-panic-handler", "sp-runtime", - "sp-runtime-interface 7.0.0", - "sp-state-machine 0.13.0", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", + "sp-runtime-interface", + "sp-state-machine", + "sp-tracing", + "sp-trie", "sp-version", - "sp-wasm-interface 7.0.0", + "sp-wasm-interface", "substrate-test-runtime", "tempfile", "tracing", @@ -9351,7 +9351,7 @@ version = "0.10.0-dev" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface 7.0.0", + "sp-wasm-interface", "thiserror", "wasm-instrument 0.3.0", "wasmi 0.13.2", @@ -9364,8 +9364,8 @@ dependencies = [ "log", "sc-allocator", "sc-executor-common", - "sp-runtime-interface 7.0.0", - "sp-wasm-interface 7.0.0", + "sp-runtime-interface", + "sp-wasm-interface", "wasmi 0.13.2", ] @@ -9385,9 +9385,9 @@ dependencies = [ "sc-allocator", "sc-executor-common", "sc-runtime-test", - "sp-io 7.0.0", - "sp-runtime-interface 7.0.0", - "sp-wasm-interface 7.0.0", + "sp-io", + "sp-runtime-interface", + "sp-wasm-interface", "tempfile", "wasmtime", "wat", @@ -9417,8 +9417,8 @@ dependencies = [ "parking_lot 0.12.1", "serde_json", "sp-application-crypto", - "sp-core 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-keystore", "tempfile", "thiserror", ] @@ -9463,10 +9463,10 @@ dependencies = [ "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "sp-test-primitives", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime", "substrate-test-runtime-client", @@ -9496,7 +9496,7 @@ dependencies = [ "sc-network-common", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "substrate-test-runtime", "substrate-test-runtime-client", @@ -9570,7 +9570,7 @@ dependencies = [ "sc-network-common", "sc-peerset", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "thiserror", ] @@ -9624,10 +9624,10 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "sp-test-primitives", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "thiserror", @@ -9657,9 +9657,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-test-runtime", "substrate-test-runtime-client", "tokio", @@ -9713,10 +9713,10 @@ dependencies = [ "sc-utils", "sp-api", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-offchain", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-test-runtime-client", "threadpool", "tokio", @@ -9769,9 +9769,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-offchain", "sp-rpc", "sp-runtime", @@ -9793,7 +9793,7 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 7.0.0", + "sp-core", "sp-rpc", "sp-runtime", "sp-version", @@ -9838,7 +9838,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-maybe-compressed-blob", "sp-runtime", "sp-version", @@ -9853,11 +9853,11 @@ dependencies = [ name = "sc-runtime-test" version = "2.0.0" dependencies = [ - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-runtime-interface 7.0.0", - "sp-std 5.0.0", + "sp-runtime-interface", + "sp-std", "substrate-wasm-builder", ] @@ -9906,16 +9906,16 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-externalities", + "sp-keystore", "sp-runtime", "sp-session", - "sp-state-machine 0.13.0", - "sp-storage 7.0.0", + "sp-state-machine", + "sp-storage", "sp-transaction-pool", "sp-transaction-storage-proof", - "sp-trie 7.0.0", + "sp-trie", "sp-version", "static_init", "substrate-prometheus-endpoint", @@ -9952,13 +9952,13 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-storage 7.0.0", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", + "sp-state-machine", + "sp-storage", + "sp-tracing", + "sp-trie", "substrate-test-runtime", "substrate-test-runtime-client", "tempfile", @@ -9972,7 +9972,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.1", - "sp-core 7.0.0", + "sp-core", ] [[package]] @@ -9990,10 +9990,10 @@ dependencies = [ "sc-client-api", "sp-api", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "sp-statement-store", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-prometheus-endpoint", "tempfile", "tokio", @@ -10009,7 +10009,7 @@ dependencies = [ "log", "sc-client-db", "sc-utils", - "sp-core 7.0.0", + "sp-core", "thiserror", "tokio", ] @@ -10045,10 +10045,10 @@ dependencies = [ "sc-telemetry", "serde", "serde_json", - "sp-core 7.0.0", - "sp-io 7.0.0", + "sp-core", + "sp-io", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -10090,10 +10090,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-rpc", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "thiserror", "tracing", "tracing-log", @@ -10133,9 +10133,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "sp-transaction-pool", "substrate-prometheus-endpoint", "substrate-test-runtime", @@ -10645,13 +10645,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core 7.0.0", + "sp-core", "sp-metadata-ir", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", + "sp-state-machine", + "sp-std", "sp-test-primitives", - "sp-trie 7.0.0", + "sp-trie", "sp-version", "thiserror", ] @@ -10682,10 +10682,10 @@ dependencies = [ "sc-block-builder", "sp-api", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-tracing 6.0.0", + "sp-state-machine", + "sp-tracing", "sp-version", "substrate-test-runtime-client", "trybuild", @@ -10698,9 +10698,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-std 5.0.0", + "sp-core", + "sp-io", + "sp-std", ] [[package]] @@ -10709,8 +10709,8 @@ version = "2.0.0" dependencies = [ "sp-api", "sp-application-crypto", - "sp-core 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-keystore", "sp-runtime", "substrate-test-runtime-client", ] @@ -10727,8 +10727,8 @@ dependencies = [ "rand 0.8.5", "scale-info", "serde", - "sp-core 7.0.0", - "sp-std 5.0.0", + "sp-core", + "sp-std", "static_assertions", ] @@ -10748,7 +10748,7 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10757,13 +10757,12 @@ dependencies = [ "ark-std", "parity-scale-codec", "sp-ark-models", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", ] [[package]] name = "sp-ark-bls12-381" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10777,7 +10776,7 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10790,7 +10789,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10805,7 +10804,7 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", @@ -10821,7 +10820,7 @@ dependencies = [ [[package]] name = "sp-ark-models" version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#8a795e6fd99fc8ea81336526bd2b1c835c8c5021" +source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" dependencies = [ "ark-ec", "ark-ff", @@ -10856,8 +10855,8 @@ dependencies = [ "sp-ark-ed-on-bls12-377", "sp-ark-ed-on-bls12-381-bandersnatch", "sp-ark-models", - "sp-io 7.0.0", - "sp-std 5.0.0", + "sp-io", + "sp-std", ] [[package]] @@ -10869,7 +10868,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -10880,7 +10879,7 @@ dependencies = [ "sp-api", "sp-inherents", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -10896,7 +10895,7 @@ dependencies = [ "sp-consensus", "sp-database", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "thiserror", ] @@ -10907,10 +10906,10 @@ dependencies = [ "async-trait", "futures", "log", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-test-primitives", "thiserror", ] @@ -10928,7 +10927,7 @@ dependencies = [ "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-timestamp", ] @@ -10944,11 +10943,11 @@ dependencies = [ "sp-application-crypto", "sp-consensus", "sp-consensus-slots", - "sp-core 7.0.0", + "sp-core", "sp-inherents", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-timestamp", ] @@ -10963,12 +10962,12 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-io", + "sp-keystore", "sp-mmr-primitives", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "strum", ] @@ -10983,10 +10982,10 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-core 7.0.0", - "sp-keystore 0.13.0", + "sp-core", + "sp-keystore", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -10995,9 +10994,9 @@ version = "0.10.0-dev" dependencies = [ "parity-scale-codec", "sp-api", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -11007,7 +11006,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std 5.0.0", + "sp-std", "sp-timestamp", ] @@ -11043,58 +11042,14 @@ dependencies = [ "secrecy", "serde", "serde_json", - "sp-core-hashing 5.0.0", + "sp-core-hashing", "sp-core-hashing-proc-macro", - "sp-debug-derive 5.0.0", - "sp-externalities 0.13.0", - "sp-runtime-interface 7.0.0", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", "sp-serializer", - "sp-std 5.0.0", - "sp-storage 7.0.0", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "zeroize", -] - -[[package]] -name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "array-bytes 4.2.0", - "bitflags", - "blake2", - "bounded-collections", - "bs58", - "dyn-clonable", - "ed25519-zebra", - "futures", - "hash-db", - "hash256-std-hasher", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "paste", - "primitive-types", - "rand 0.8.5", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-debug-derive 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-runtime-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std", + "sp-storage", "ss58-registry", "substrate-bip39", "thiserror", @@ -11111,21 +11066,7 @@ dependencies = [ "digest 0.10.6", "sha2 0.10.6", "sha3", - "sp-std 5.0.0", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.6", - "sha2 0.10.6", - "sha3", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std", "twox-hash", ] @@ -11135,7 +11076,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "sp-core-hashing 5.0.0", + "sp-core-hashing", "syn 2.0.15", ] @@ -11156,35 +11097,14 @@ dependencies = [ "syn 2.0.15", ] -[[package]] -name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "sp-externalities" -version = "0.13.0" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 5.0.0", - "sp-storage 7.0.0", -] - [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" dependencies = [ "environmental", "parity-scale-codec", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std", + "sp-storage", ] [[package]] @@ -11196,9 +11116,9 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "thiserror", ] @@ -11216,41 +11136,14 @@ dependencies = [ "rustversion", "secp256k1", "sp-arkworks", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-keystore 0.13.0", - "sp-runtime-interface 7.0.0", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-tracing 6.0.0", - "sp-trie 7.0.0", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "bytes", - "ed25519", - "ed25519-dalek", - "futures", - "libsecp256k1", - "log", - "parity-scale-codec", - "rustversion", - "secp256k1", - "sp-arkworks", - "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-keystore 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-runtime-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-state-machine 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-tracing 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-trie 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", "tracing", "tracing-core", ] @@ -11260,7 +11153,7 @@ name = "sp-keyring" version = "7.0.0" dependencies = [ "lazy_static", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "strum", ] @@ -11275,21 +11168,8 @@ dependencies = [ "rand 0.7.3", "rand_chacha 0.2.2", "serde", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "thiserror", -] - -[[package]] -name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "futures", - "parity-scale-codec", - "parking_lot 0.12.1", - "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-core", + "sp-externalities", "thiserror", ] @@ -11308,7 +11188,7 @@ dependencies = [ "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -11322,10 +11202,10 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core 7.0.0", - "sp-debug-derive 5.0.0", + "sp-core", + "sp-debug-derive", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "thiserror", ] @@ -11338,9 +11218,9 @@ dependencies = [ "scale-info", "serde", "sp-arithmetic", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "substrate-test-utils", ] @@ -11362,7 +11242,7 @@ name = "sp-offchain" version = "4.0.0-dev" dependencies = [ "sp-api", - "sp-core 7.0.0", + "sp-core", "sp-runtime", ] @@ -11375,16 +11255,6 @@ dependencies = [ "regex", ] -[[package]] -name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - [[package]] name = "sp-rpc" version = "6.0.0" @@ -11392,7 +11262,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "sp-core 7.0.0", + "sp-core", ] [[package]] @@ -11412,11 +11282,11 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-arithmetic", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-core", + "sp-io", + "sp-state-machine", + "sp-std", + "sp-tracing", "sp-weights", "substrate-test-runtime-client", "zstd 0.12.3+zstd.1.5.2", @@ -11431,38 +11301,20 @@ dependencies = [ "parity-scale-codec", "primitive-types", "rustversion", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-io 7.0.0", - "sp-runtime-interface-proc-macro 6.0.0", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime-interface-proc-macro", "sp-runtime-interface-test-wasm", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-storage 7.0.0", - "sp-tracing 6.0.0", - "sp-wasm-interface 7.0.0", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", "static_assertions", "trybuild", ] -[[package]] -name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-runtime-interface-proc-macro 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-storage 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-tracing 6.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-wasm-interface 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "static_assertions", -] - [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" @@ -11474,30 +11326,18 @@ dependencies = [ "syn 2.0.15", ] -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.15", -] - [[package]] name = "sp-runtime-interface-test" version = "2.0.0" dependencies = [ "sc-executor", "sc-executor-common", - "sp-io 7.0.0", + "sp-io", "sp-runtime", - "sp-runtime-interface 7.0.0", + "sp-runtime-interface", "sp-runtime-interface-test-wasm", "sp-runtime-interface-test-wasm-deprecated", - "sp-state-machine 0.13.0", + "sp-state-machine", "tracing", "tracing-core", ] @@ -11507,10 +11347,10 @@ name = "sp-runtime-interface-test-wasm" version = "2.0.0" dependencies = [ "bytes", - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-runtime-interface 7.0.0", - "sp-std 5.0.0", + "sp-core", + "sp-io", + "sp-runtime-interface", + "sp-std", "substrate-wasm-builder", ] @@ -11518,10 +11358,10 @@ dependencies = [ name = "sp-runtime-interface-test-wasm-deprecated" version = "2.0.0" dependencies = [ - "sp-core 7.0.0", - "sp-io 7.0.0", - "sp-runtime-interface 7.0.0", - "sp-std 5.0.0", + "sp-core", + "sp-io", + "sp-runtime-interface", + "sp-std", "substrate-wasm-builder", ] @@ -11540,10 +11380,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "sp-staking", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -11553,9 +11393,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", + "sp-std", ] [[package]] @@ -11571,37 +11411,17 @@ dependencies = [ "pretty_assertions", "rand 0.8.5", "smallvec", - "sp-core 7.0.0", - "sp-externalities 0.13.0", - "sp-panic-handler 5.0.0", + "sp-core", + "sp-externalities", + "sp-panic-handler", "sp-runtime", - "sp-std 5.0.0", - "sp-trie 7.0.0", + "sp-std", + "sp-trie", "thiserror", "tracing", "trie-db", ] -[[package]] -name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-externalities 0.13.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-panic-handler 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-trie 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "thiserror", - "tracing", -] - [[package]] name = "sp-statement-store" version = "4.0.0-dev" @@ -11611,11 +11431,11 @@ dependencies = [ "scale-info", "sp-api", "sp-application-crypto", - "sp-core 7.0.0", - "sp-externalities 0.13.0", + "sp-core", + "sp-externalities", "sp-runtime", - "sp-runtime-interface 7.0.0", - "sp-std 5.0.0", + "sp-runtime-interface", + "sp-std", "thiserror", ] @@ -11623,11 +11443,6 @@ dependencies = [ name = "sp-std" version = "5.0.0" -[[package]] -name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" - [[package]] name = "sp-storage" version = "7.0.0" @@ -11636,21 +11451,8 @@ dependencies = [ "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 5.0.0", - "sp-std 5.0.0", -] - -[[package]] -name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-debug-derive", + "sp-std", ] [[package]] @@ -11661,7 +11463,7 @@ dependencies = [ "scale-info", "serde", "sp-application-crypto", - "sp-core 7.0.0", + "sp-core", "sp-runtime", ] @@ -11675,7 +11477,7 @@ dependencies = [ "parity-scale-codec", "sp-inherents", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "thiserror", ] @@ -11684,19 +11486,7 @@ name = "sp-tracing" version = "6.0.0" dependencies = [ "parity-scale-codec", - "sp-std 5.0.0", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "parity-scale-codec", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std", "tracing", "tracing-core", "tracing-subscriber 0.2.25", @@ -11718,11 +11508,11 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 7.0.0", + "sp-core", "sp-inherents", "sp-runtime", - "sp-std 5.0.0", - "sp-trie 7.0.0", + "sp-std", + "sp-trie", ] [[package]] @@ -11741,9 +11531,9 @@ dependencies = [ "parking_lot 0.12.1", "scale-info", "schnellru", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "thiserror", "tracing", "trie-bench", @@ -11752,29 +11542,6 @@ dependencies = [ "trie-standardmap", ] -[[package]] -name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "ahash 0.8.3", - "hash-db", - "hashbrown 0.13.2", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "schnellru", - "sp-core 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", - "thiserror", - "tracing", - "trie-db", - "trie-root", -] - [[package]] name = "sp-version" version = "5.0.0" @@ -11786,7 +11553,7 @@ dependencies = [ "serde", "sp-core-hashing-proc-macro", "sp-runtime", - "sp-std 5.0.0", + "sp-std", "sp-version-proc-macro", "thiserror", ] @@ -11810,21 +11577,7 @@ dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std 5.0.0", - "wasmi 0.13.2", - "wasmtime", -] - -[[package]] -name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration#73e4f64ff0d2fc6c51a1a83d5456b98292043d2d" -dependencies = [ - "anyhow", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate.git?branch=achimcc/arkworks-integration)", + "sp-std", "wasmi 0.13.2", "wasmtime", ] @@ -11838,9 +11591,9 @@ dependencies = [ "serde", "smallvec", "sp-arithmetic", - "sp-core 7.0.0", - "sp-debug-derive 5.0.0", - "sp-std 5.0.0", + "sp-core", + "sp-debug-derive", + "sp-std", ] [[package]] @@ -12038,7 +11791,7 @@ dependencies = [ "frame-support", "frame-system", "sc-cli", - "sp-core 7.0.0", + "sp-core", "sp-runtime", ] @@ -12053,9 +11806,9 @@ dependencies = [ "sc-rpc-api", "scale-info", "serde", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-storage 7.0.0", + "sp-storage", "tokio", ] @@ -12075,9 +11828,9 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-tracing 6.0.0", + "sp-tracing", "substrate-test-runtime-client", "tokio", ] @@ -12102,7 +11855,7 @@ dependencies = [ "log", "sc-rpc-api", "serde", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "tokio", ] @@ -12119,10 +11872,10 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 7.0.0", + "sp-core", "sp-runtime", - "sp-state-machine 0.13.0", - "sp-trie 7.0.0", + "sp-state-machine", + "sp-trie", "trie-db", ] @@ -12144,11 +11897,11 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-keyring", - "sp-keystore 0.13.0", + "sp-keystore", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", ] [[package]] @@ -12183,21 +11936,21 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-beefy", "sp-consensus-grandpa", - "sp-core 7.0.0", - "sp-debug-derive 5.0.0", - "sp-externalities 0.13.0", + "sp-core", + "sp-debug-derive", + "sp-externalities", "sp-inherents", - "sp-io 7.0.0", + "sp-io", "sp-keyring", "sp-offchain", "sp-runtime", - "sp-runtime-interface 7.0.0", + "sp-runtime-interface", "sp-session", - "sp-state-machine 0.13.0", - "sp-std 5.0.0", - "sp-tracing 6.0.0", + "sp-state-machine", + "sp-std", + "sp-tracing", "sp-transaction-pool", - "sp-trie 7.0.0", + "sp-trie", "sp-version", "substrate-test-runtime-client", "substrate-wasm-builder", @@ -12217,7 +11970,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 7.0.0", + "sp-core", "sp-runtime", "substrate-test-client", "substrate-test-runtime", @@ -12938,15 +12691,15 @@ dependencies = [ "sp-api", "sp-consensus-aura", "sp-consensus-babe", - "sp-core 7.0.0", - "sp-debug-derive 5.0.0", - "sp-externalities 0.13.0", + "sp-core", + "sp-debug-derive", + "sp-externalities", "sp-inherents", - "sp-io 7.0.0", - "sp-keystore 0.13.0", + "sp-io", + "sp-keystore", "sp-rpc", "sp-runtime", - "sp-state-machine 0.13.0", + "sp-state-machine", "sp-timestamp", "sp-transaction-storage-proof", "sp-version", From 945ba0056b05841caddd15d0ce71d742e515b52b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 15 May 2023 10:55:22 +0200 Subject: [PATCH 328/364] remove patched deps --- Cargo.lock | 298 +++++++++++++++++++++------------ Cargo.toml | 4 +- primitives/arkworks/Cargo.toml | 2 +- primitives/io/Cargo.toml | 2 +- 4 files changed, 191 insertions(+), 115 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ac77f7bab9e9..bd25c57de9045 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -288,6 +288,26 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +[[package]] +name = "ark-algebra-test-templates" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "400bd3a79c741b1832f1416d4373ae077ef82ca14a8b4cee1248a2f11c8b9172" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "serde", + "serde_derive", + "serde_json", + "sha2 0.10.6", +] + [[package]] name = "ark-bls12-377" version = "0.4.0" @@ -311,6 +331,18 @@ dependencies = [ "ark-std", ] +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -328,6 +360,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -384,6 +440,47 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-r1cs-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de1d1472e5cb020cb3405ce2567c91c8d43f21b674aef37b0202f5c3304761db" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-std", + "derivative", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-scale" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4daeb7e99c43cfc49e61335d184284b5837113f1d0ec8c32902b482f2be850c" +dependencies = [ + "ark-ec", + "ark-serialize", + "ark-std", + "parity-scale-codec", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -583,7 +680,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -605,7 +702,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -616,7 +713,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -757,13 +854,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.4", + "prettyplease 0.2.5", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -924,9 +1021,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.1" +version = "3.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" +checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" [[package]] name = "byte-slice-cast" @@ -1237,9 +1334,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.2.1" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a19591b2ab0e3c04b588a0e04ddde7b9eaa423646d1b4a8092879216bf47473" +checksum = "1594fe2312ec4abf402076e407628f5c313e54c32ade058521df4ee34ecac8a8" dependencies = [ "clap 4.2.7", ] @@ -1253,7 +1350,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -1626,16 +1723,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -1738,7 +1825,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -1755,7 +1842,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2023,7 +2110,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2097,15 +2184,16 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.6" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" +checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" dependencies = [ "der 0.7.5", "digest 0.10.6", "elliptic-curve 0.13.4", "rfc6979 0.4.0", "signature 2.1.0", + "spki 0.7.2", ] [[package]] @@ -2227,7 +2315,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2581,7 +2669,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 2.0.15", + "syn 2.0.16", "trybuild", ] @@ -2723,7 +2811,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2734,7 +2822,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2743,7 +2831,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2961,7 +3049,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3182,9 +3270,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes", "fnv", @@ -3207,9 +3295,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.6" +version = "4.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" +checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" dependencies = [ "log", "pest", @@ -3322,17 +3410,6 @@ dependencies = [ "digest 0.10.6", ] -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.7", - "hmac 0.8.1", -] - [[package]] name = "honggfuzz" version = "0.5.55" @@ -3458,12 +3535,11 @@ dependencies = [ [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -3857,7 +3933,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", - "ecdsa 0.16.6", + "ecdsa 0.16.7", "elliptic-curve 0.13.4", "once_cell", "sha2 0.10.6", @@ -5020,7 +5096,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "core2", + "digest 0.10.6", "multihash-derive", + "sha2 0.10.6", "unsigned-varint", ] @@ -6210,7 +6288,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -7134,7 +7212,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -7614,7 +7692,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -7640,22 +7718,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.16", ] [[package]] @@ -7799,14 +7877,14 @@ version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" dependencies = [ - "portable-atomic 1.3.1", + "portable-atomic 1.3.2", ] [[package]] name = "portable-atomic" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbda379e6e462c97ea6afe9f6233619b202bbc4968d7caa6917788d2070a044" +checksum = "dc59d1bcc64fc5d021d67521f818db868368028108d37f0e98d74e33f68297b5" [[package]] name = "ppv-lite86" @@ -7880,12 +7958,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058" +checksum = "617feabb81566b593beb4886fb8c1f38064169dae4dccad0e3220160c3b37203" dependencies = [ "proc-macro2", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -7943,7 +8021,7 @@ checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -8325,7 +8403,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -8788,7 +8866,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -10061,7 +10139,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -10292,9 +10370,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1" dependencies = [ "bitflags", "core-foundation", @@ -10305,9 +10383,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -10348,22 +10426,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.162" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.162" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -10621,7 +10699,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -10701,8 +10779,8 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-bls12-377", "ark-ff", @@ -10715,8 +10793,8 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-bls12-381", "ark-ff", @@ -10729,8 +10807,8 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-bw6-761", "ark-ff", @@ -10742,8 +10820,8 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", @@ -10757,8 +10835,8 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", @@ -10773,8 +10851,8 @@ dependencies = [ [[package]] name = "sp-ark-models" -version = "0.4.0-alpha" -source = "git+https://github.com/paritytech/ark-substrate#eb33905d2a6fab3062c3e134fc5b71a8ff7afffe" +version = "0.4.0-beta" +source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" dependencies = [ "ark-ec", "ark-ff", @@ -11032,7 +11110,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -11049,7 +11127,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -11278,7 +11356,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -11513,7 +11591,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -11956,7 +12034,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -12012,9 +12090,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" dependencies = [ "proc-macro2", "quote", @@ -12128,7 +12206,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -12259,9 +12337,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" dependencies = [ "autocfg", "bytes", @@ -12284,7 +12362,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -12443,14 +12521,14 @@ checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", "valuable", @@ -12835,9 +12913,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ "getrandom 0.2.9", ] @@ -12973,7 +13051,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", "wasm-bindgen-shared", ] @@ -13007,7 +13085,7 @@ checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -14029,7 +14107,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 511295d2bba1e..3dd5f23db273c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -335,6 +335,4 @@ lto = "fat" # https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units codegen-units = 1 -[patch.crates-io] -sp-arkworks = { path = "./primitives/arkworks" } -sp-io = { path = "./primitives/io" } + diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index adbdf5749286d..767e327dd5ea6 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -22,7 +22,7 @@ ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } -ark-scale = { git = "https://github.com/w3f/ark-scale", features = ["hazmat"], default-features = false } +ark-scale = { version = "0.0.2", features = ["hazmat"], default-features = false } [dev-dependencies] sp-io = { path = "../io", default-features = false } diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index 6ded42a259f98..322dfe968c6b5 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -27,7 +27,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-arkworks = { version = "0.4.0", default-features = false } +sp-arkworks = { version = "0.4.0", default-features = false, path = "../arkworks" } log = { version = "0.4.17", default-features = false, optional = true } futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } From ba068d307341ec4ff604e31bab3bde0d9e4287c5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 16 May 2023 17:54:51 +0200 Subject: [PATCH 329/364] bump ark-scale --- Cargo.lock | 24 ++++++++++++++++++------ primitives/arkworks/Cargo.toml | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd25c57de9045..3c5ba18e02f8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -481,6 +481,18 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "ark-scale" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d028cd1025d002fa88c10cd644d29028a7b40806579b608c6ba843b937bbb23" +dependencies = [ + "ark-ec", + "ark-serialize", + "ark-std", + "parity-scale-codec", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -10785,7 +10797,7 @@ dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale", + "ark-scale 0.0.2", "ark-std", "parity-scale-codec", "sp-ark-models", @@ -10798,7 +10810,7 @@ source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f dependencies = [ "ark-bls12-381", "ark-ff", - "ark-scale", + "ark-scale 0.0.2", "ark-serialize", "ark-std", "parity-scale-codec", @@ -10812,7 +10824,7 @@ source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f dependencies = [ "ark-bw6-761", "ark-ff", - "ark-scale", + "ark-scale 0.0.2", "ark-std", "parity-scale-codec", "sp-ark-models", @@ -10826,7 +10838,7 @@ dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale", + "ark-scale 0.0.2", "ark-serialize", "ark-std", "parity-scale-codec", @@ -10842,7 +10854,7 @@ dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ff", "ark-r1cs-std", - "ark-scale", + "ark-scale 0.0.2", "ark-std", "parity-scale-codec", "sp-ark-bls12-381", @@ -10877,7 +10889,7 @@ dependencies = [ "ark-ed-on-bls12-377", "ark-ed-on-bls12-381-bandersnatch", "ark-ff", - "ark-scale", + "ark-scale 0.0.3", "ark-serialize", "ark-std", "parity-scale-codec", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 767e327dd5ea6..1bbb3e620e637 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -22,7 +22,7 @@ ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } -ark-scale = { version = "0.0.2", features = ["hazmat"], default-features = false } +ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false } [dev-dependencies] sp-io = { path = "../io", default-features = false } From 57e4def512cc75f3f200d3385e200418daff861e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 16 May 2023 18:03:17 +0200 Subject: [PATCH 330/364] use crates-io deps --- Cargo.lock | 116 ++++++++++++++++----------------- primitives/arkworks/Cargo.toml | 12 ++-- 2 files changed, 61 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a214fe16593f6..234220576342b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,18 +469,6 @@ dependencies = [ "tracing-subscriber 0.2.25", ] -[[package]] -name = "ark-scale" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4daeb7e99c43cfc49e61335d184284b5837113f1d0ec8c32902b482f2be850c" -dependencies = [ - "ark-ec", - "ark-serialize", - "ark-std", - "parity-scale-codec", -] - [[package]] name = "ark-scale" version = "0.0.3" @@ -994,9 +982,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bounded-collections" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3888522b497857eb606bf51695988dba7096941822c1bcf676e3a929a9ae7a0" +checksum = "07fbd1d11282a1eb134d3c3b7cf8ce213b5161c6e5f73fb1b98618482c606b64" dependencies = [ "log", "parity-scale-codec", @@ -3788,9 +3776,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.62" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] @@ -4166,9 +4154,9 @@ checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] name = "libm" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "libp2p" @@ -5756,7 +5744,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm 0.2.6", + "libm 0.2.7", ] [[package]] @@ -8040,9 +8028,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" dependencies = [ "unicode-ident", ] @@ -10221,9 +10209,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfdef77228a4c05dc94211441595746732131ad7f6530c6c18f045da7b7ab937" +checksum = "b569c32c806ec3abdf3b5869fb8bf1e0d275a7c1c9b0b05603d9464632649edf" dependencies = [ "bitvec", "cfg-if", @@ -10794,12 +10782,13 @@ dependencies = [ [[package]] name = "sp-ark-bls12-377" version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e61a06f286f4e8565a67865ef52e83edabf447881898c94527ffc7b839177" dependencies = [ "ark-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale 0.0.2", + "ark-scale", "ark-std", "parity-scale-codec", "sp-ark-models", @@ -10808,11 +10797,12 @@ dependencies = [ [[package]] name = "sp-ark-bls12-381" version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3352feef6c9c34022fa766a0c9a86a88a83d280a3e5b34781a1a9af98377a130" dependencies = [ "ark-bls12-381", "ark-ff", - "ark-scale 0.0.2", + "ark-scale", "ark-serialize", "ark-std", "parity-scale-codec", @@ -10822,11 +10812,12 @@ dependencies = [ [[package]] name = "sp-ark-bw6-761" version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf069165e230aef3c4680edea2d8ab3caa89c039e0b61fad2b8e061fb393668" dependencies = [ "ark-bw6-761", "ark-ff", - "ark-scale 0.0.2", + "ark-scale", "ark-std", "parity-scale-codec", "sp-ark-models", @@ -10835,12 +10826,13 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-377" version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63f1fe8e7e87cb0258d61212b019d4d0fd230293ec42a564eb671c83d437497" dependencies = [ "ark-ed-on-bls12-377", "ark-ff", "ark-r1cs-std", - "ark-scale 0.0.2", + "ark-scale", "ark-serialize", "ark-std", "parity-scale-codec", @@ -10850,13 +10842,14 @@ dependencies = [ [[package]] name = "sp-ark-ed-on-bls12-381-bandersnatch" version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "838ddc5508aff3e89f930e7e7f3565d0786ac27868cfd61587afe681011e1140" dependencies = [ "ark-ec", "ark-ed-on-bls12-381-bandersnatch", "ark-ff", "ark-r1cs-std", - "ark-scale 0.0.2", + "ark-scale", "ark-std", "parity-scale-codec", "sp-ark-bls12-381", @@ -10865,8 +10858,9 @@ dependencies = [ [[package]] name = "sp-ark-models" -version = "0.4.0-beta" -source = "git+https://github.com/paritytech/ark-substrate#d1451fb5926a587f6f267f38142217c8447eccf6" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28fa906b809d7a346b2aa32a4bd0c884a75f9f588f9a4a07272f63eaf8a10765" dependencies = [ "ark-ec", "ark-ff", @@ -10891,7 +10885,7 @@ dependencies = [ "ark-ed-on-bls12-377", "ark-ed-on-bls12-381-bandersnatch", "ark-ff", - "ark-scale 0.0.3", + "ark-scale", "ark-serialize", "ark-std", "parity-scale-codec", @@ -12127,9 +12121,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags", "core-foundation", @@ -12809,7 +12803,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.6", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] @@ -13046,9 +13040,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -13056,9 +13050,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", @@ -13071,9 +13065,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.35" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163" +checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" dependencies = [ "cfg-if", "js-sys", @@ -13083,9 +13077,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -13093,9 +13087,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", @@ -13106,15 +13100,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "wasm-encoder" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05d0b6fcd0aeb98adf16e7975331b3c17222aa815148f5b976370ce589d80ef" +checksum = "e77053dc709db790691d3732cfc458adc5acc881dec524965c608effdcd9c581" dependencies = [ "leb128", ] @@ -13237,7 +13231,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", - "libm 0.2.6", + "libm 0.2.7", "memory_units", "num-rational", "num-traits", @@ -13251,7 +13245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" dependencies = [ "downcast-rs", - "libm 0.2.6", + "libm 0.2.7", "num-traits", "paste", ] @@ -13456,9 +13450,9 @@ dependencies = [ [[package]] name = "wast" -version = "57.0.0" +version = "58.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eb0f5ed17ac4421193c7477da05892c2edafd67f9639e3c11a82086416662dc" +checksum = "372eecae2d10a5091c2005b32377d7ecd6feecdf2c05838056d02d8b4f07c429" dependencies = [ "leb128", "memchr", @@ -13468,18 +13462,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9ab0d87337c3be2bb6fc5cd331c4ba9fd6bcb4ee85048a0dd59ed9ecf92e53" +checksum = "6d47446190e112ab1579ab40b3ad7e319d859d74e5134683f04e9f0747bf4173" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.62" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 1bbb3e620e637..1d4e3aeec4934 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -27,12 +27,12 @@ ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false [dev-dependencies] sp-io = { path = "../io", default-features = false } ark-algebra-test-templates = { version = "0.4.2", default-features = false } -sp-ark-models = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bls12-381 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-bw6-761 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-377 = { git = "https://github.com/paritytech/ark-substrate", default-features = false } -sp-ark-ed-on-bls12-381-bandersnatch = { git = "https://github.com/paritytech/ark-substrate", default-features = false } +sp-ark-models = { version = "0.4.0-beta", default-features = false } +sp-ark-bls12-377 = { version = "0.4.0-beta", default-features = false } +sp-ark-bls12-381 = { version = "0.4.0-beta", default-features = false } +sp-ark-bw6-761 = { version = "0.4.0-beta", default-features = false } +sp-ark-ed-on-bls12-377 = { version = "0.4.0-beta", default-features = false } +sp-ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0-beta", default-features = false } [features] default = [ "std" ] From 047b2973a3e64e6c477764a875cbad77fb8eeb0e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 06:29:38 +0200 Subject: [PATCH 331/364] fix doc comments --- primitives/arkworks/src/bls12_377.rs | 2 +- primitives/arkworks/src/bls12_381.rs | 2 +- primitives/arkworks/src/bw6_761.rs | 2 +- primitives/arkworks/src/ed_on_bls12_377.rs | 2 +- primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index bb14134a952d2..c113d20c41752 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Hashing Functions. +//! ... docs #![warn(missing_docs)] diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 70dcbc35e4c64..000d4b43efe9d 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Hashing Functions. +//! ... docs #![warn(missing_docs)] diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index eae8f0f0907f6..4fc45103a8a74 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Hashing Functions. +//! ... docs #![warn(missing_docs)] diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index b7aeb38190b2a..57376d825371f 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Hashing Functions. +//! ... docs #![warn(missing_docs)] diff --git a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs index 9468e225387cc..725605886fc26 100644 --- a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Hashing Functions. +//! ... docs #![warn(missing_docs)] From 03f5d13349bb10c9eb805fcae91a4ff209fd9fc0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 06:30:26 +0200 Subject: [PATCH 332/364] Cargo.toml, linebreaks at end --- Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3dd5f23db273c..ce647d64a4f27 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -334,5 +334,3 @@ inherits = "release" lto = "fat" # https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units codegen-units = 1 - - From 69e1d940970f4319efcc6ab54d43cd6c5a35cda9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 07:07:03 +0200 Subject: [PATCH 333/364] reorgainze tests --- Cargo.lock | 204 +++++++++--------- primitives/arkworks/src/bls12_377.rs | 43 ++++ primitives/arkworks/src/bls12_381.rs | 157 ++++++++++++++ primitives/arkworks/src/bw6_761.rs | 43 ++++ primitives/arkworks/src/ed_on_bls12_377.rs | 21 ++ .../src/ed_on_bls12_381_bandersnatch.rs | 44 ++++ primitives/arkworks/src/lib.rs | 3 - primitives/arkworks/src/tests/bls12_377.rs | 38 ---- .../arkworks/src/tests/bls12_381/mod.rs | 152 ------------- primitives/arkworks/src/tests/bw6_761.rs | 38 ---- .../arkworks/src/tests/ed_on_bls12_377.rs | 16 -- .../src/tests/ed_on_bls12_381_bandersnatch.rs | 39 ---- .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin primitives/arkworks/src/tests/mod.rs | 5 - 17 files changed, 410 insertions(+), 393 deletions(-) delete mode 100644 primitives/arkworks/src/tests/bls12_377.rs delete mode 100755 primitives/arkworks/src/tests/bls12_381/mod.rs delete mode 100644 primitives/arkworks/src/tests/bw6_761.rs delete mode 100644 primitives/arkworks/src/tests/ed_on_bls12_377.rs delete mode 100644 primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs rename primitives/arkworks/src/tests/{bls12_381 => }/g1_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks/src/tests/{bls12_381 => }/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/arkworks/src/tests/{bls12_381 => }/g2_compressed_valid_test_vectors.dat (100%) rename primitives/arkworks/src/tests/{bls12_381 => }/g2_uncompressed_valid_test_vectors.dat (100%) delete mode 100644 primitives/arkworks/src/tests/mod.rs diff --git a/Cargo.lock b/Cargo.lock index c26b6f4de9806..c85ce686895f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "aes-gcm" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" dependencies = [ "aead 0.5.2", "aes 0.8.2", @@ -395,7 +395,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "digest 0.10.6", + "digest 0.10.7", "itertools", "num-bigint", "num-traits", @@ -489,7 +489,7 @@ checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", - "digest 0.10.6", + "digest 0.10.7", "num-bigint", ] @@ -793,9 +793,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "3f1e31e207a6b8fb791a38ea3105e6cb541f55e4d029902d3039a4ad07cc4105" [[package]] name = "base64ct" @@ -887,7 +887,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -1000,9 +1000,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" dependencies = [ "memchr", "once_cell", @@ -1184,7 +1184,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.7", + "clap 4.3.0", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1310,9 +1310,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.7" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" +checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc" dependencies = [ "clap_builder", "clap_derive", @@ -1321,31 +1321,31 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.7" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990" dependencies = [ "anstream", "anstyle", "bitflags", - "clap_lex 0.4.1", + "clap_lex 0.5.0", "strsim", ] [[package]] name = "clap_complete" -version = "4.2.3" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1594fe2312ec4abf402076e407628f5c313e54c32ade058521df4ee34ecac8a8" +checksum = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b" dependencies = [ "heck", "proc-macro2", @@ -1364,9 +1364,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "codespan-reporting" @@ -1406,15 +1406,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.5" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -1882,15 +1882,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "data-encoding-macro" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1898,9 +1898,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" dependencies = [ "data-encoding", "syn 1.0.109", @@ -1919,9 +1919,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e58dffcdcc8ee7b22f0c1f71a69243d7c2d9ad87b5a14361f2424a1565c219" +checksum = "56acb310e15652100da43d130af8d97b509e95af61aab1c5a7939ef24337ee17" dependencies = [ "const-oid", "zeroize", @@ -2051,9 +2051,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", @@ -2188,9 +2188,9 @@ version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" dependencies = [ - "der 0.7.5", - "digest 0.10.6", - "elliptic-curve 0.13.4", + "der 0.7.6", + "digest 0.10.7", + "elliptic-curve 0.13.5", "rfc6979 0.4.0", "signature 2.1.0", "spki 0.7.2", @@ -2248,7 +2248,7 @@ dependencies = [ "base16ct 0.1.1", "crypto-bigint 0.4.9", "der 0.6.1", - "digest 0.10.6", + "digest 0.10.7", "ff 0.12.1", "generic-array 0.14.7", "group 0.12.1", @@ -2263,13 +2263,13 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ "base16ct 0.2.0", "crypto-bigint 0.5.2", - "digest 0.10.6", + "digest 0.10.7", "ff 0.13.0", "generic-array 0.14.7", "group 0.13.0", @@ -2604,7 +2604,7 @@ dependencies = [ "Inflector", "array-bytes 4.2.0", "chrono", - "clap 4.2.7", + "clap 4.3.0", "comfy-table", "frame-benchmarking", "frame-support", @@ -2695,7 +2695,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -3409,7 +3409,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -3936,7 +3936,7 @@ checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", "ecdsa 0.16.7", - "elliptic-curve 0.13.4", + "elliptic-curve 0.13.5", "once_cell", "sha2 0.10.6", ] @@ -4712,9 +4712,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lite-json" @@ -4861,7 +4861,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -5084,7 +5084,7 @@ dependencies = [ "blake2s_simd", "blake3", "core2", - "digest 0.10.6", + "digest 0.10.7", "multihash-derive", "sha2 0.10.6", "sha3", @@ -5098,7 +5098,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "core2", - "digest 0.10.6", + "digest 0.10.7", "multihash-derive", "sha2 0.10.6", "unsigned-varint", @@ -5271,7 +5271,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes 4.2.0", - "clap 4.2.7", + "clap 4.3.0", "derive_more", "fs_extra", "futures", @@ -5308,7 +5308,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes 4.2.0", "assert_cmd", - "clap 4.2.7", + "clap 4.3.0", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5433,7 +5433,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5492,7 +5492,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "generate-bags", "kitchensink-runtime", ] @@ -5501,7 +5501,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5547,7 +5547,7 @@ dependencies = [ name = "node-template-release" version = "3.0.0" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "flate2", "fs_extra", "git2", @@ -7632,7 +7632,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -7773,7 +7773,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.5", + "der 0.7.6", "spki 0.7.2", ] @@ -7871,7 +7871,7 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash 0.5.0", + "universal-hash 0.5.1", ] [[package]] @@ -8029,9 +8029,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" +checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" dependencies = [ "unicode-ident", ] @@ -8629,9 +8629,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.13" +version = "0.36.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658" +checksum = "14e4d67015953998ad0eb82887a0eb0129e18a7e2f3b7b0f6c422fddcd503d62" dependencies = [ "bitflags", "errno", @@ -8651,7 +8651,7 @@ dependencies = [ "errno", "io-lifetimes", "libc", - "linux-raw-sys 0.3.7", + "linux-raw-sys 0.3.8", "windows-sys 0.48.0", ] @@ -8698,7 +8698,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.0", + "base64 0.21.1", ] [[package]] @@ -8878,7 +8878,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes 4.2.0", "chrono", - "clap 4.2.7", + "clap 4.3.0", "fdlimit", "futures", "futures-timer", @@ -9417,7 +9417,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.13", + "rustix 0.36.14", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -10038,7 +10038,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "fs4", "futures", "log", @@ -10337,7 +10337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" dependencies = [ "base16ct 0.2.0", - "der 0.7.5", + "der 0.7.6", "generic-array 0.14.7", "pkcs8 0.10.2", "subtle", @@ -10373,9 +10373,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -10460,9 +10460,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d" dependencies = [ "serde", ] @@ -10488,7 +10488,7 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -10524,7 +10524,7 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -10533,7 +10533,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "keccak", ] @@ -10567,7 +10567,7 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -10577,7 +10577,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -11105,7 +11105,7 @@ version = "5.0.0" dependencies = [ "blake2b_simd", "byteorder", - "digest 0.10.6", + "digest 0.10.7", "sha2 0.10.6", "sha3", "sp-std", @@ -11270,7 +11270,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11671,7 +11671,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", - "der 0.7.5", + "der 0.7.6", ] [[package]] @@ -11780,7 +11780,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "sc-cli", ] @@ -11822,7 +11822,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "frame-support", "frame-system", "sc-cli", @@ -12067,7 +12067,7 @@ dependencies = [ "sp-maybe-compressed-blob", "strum", "tempfile", - "toml 0.7.3", + "toml 0.7.4", "walkdir", "wasm-opt", ] @@ -12448,9 +12448,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" dependencies = [ "serde", "serde_spanned", @@ -12460,18 +12460,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.19.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "92d964908cec0d030b812013af25a0e57fddfadb1e066ecc6681d86253129d4f" dependencies = [ "indexmap", "serde", @@ -12733,7 +12733,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.2.7", + "clap 4.3.0", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12815,7 +12815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.6", + "digest 0.10.7", "rand 0.8.5", "static_assertions", ] @@ -12889,9 +12889,9 @@ dependencies = [ [[package]] name = "universal-hash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", "subtle", @@ -12979,7 +12979,7 @@ dependencies = [ "ark-serialize-derive", "arrayref", "constcat", - "digest 0.10.6", + "digest 0.10.7", "rand 0.8.5", "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -13331,7 +13331,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.13", + "rustix 0.36.14", "serde", "sha2 0.10.6", "toml 0.5.11", @@ -13411,7 +13411,7 @@ checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.13", + "rustix 0.36.14", ] [[package]] @@ -13442,7 +13442,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.13", + "rustix 0.36.14", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -13584,7 +13584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" dependencies = [ "aes 0.6.0", - "aes-gcm 0.10.1", + "aes-gcm 0.10.2", "async-trait", "bincode", "block-modes", @@ -13743,9 +13743,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +checksum = "5cd0496a71f3cc6bc4bf0ed91346426a5099e93d89807e663162dc5a1069ff65" dependencies = [ "bytemuck", "safe_arch", diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/arkworks/src/bls12_377.rs index c113d20c41752..2d75351e34090 100644 --- a/primitives/arkworks/src/bls12_377.rs +++ b/primitives/arkworks/src/bls12_377.rs @@ -54,3 +54,46 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } + +#[cfg(test)] +mod tests { + use super::*; + use ark_algebra_test_templates::*; + use sp_ark_bls12_377::{ + Bls12_377 as Bls12_377Host, G1Projective as G1ProjectiveHost, + G2Projective as G2ProjectiveHost, HostFunctions, + }; + + #[derive(PartialEq, Eq)] + struct Host; + + impl HostFunctions for Host { + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) + } + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) + } + fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) + } + fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) + } + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) + } + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) + } + } + + type Bls12_377 = Bls12_377Host; + type G1Projective = G1ProjectiveHost; + type G2Projective = G2ProjectiveHost; + + test_group!(g1; G1Projective; sw); + test_group!(g2; G2Projective; sw); + test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); + test_pairing!(pairing; super::Bls12_377); +} diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/arkworks/src/bls12_381.rs index 000d4b43efe9d..ab74084c8656c 100644 --- a/primitives/arkworks/src/bls12_381.rs +++ b/primitives/arkworks/src/bls12_381.rs @@ -54,3 +54,160 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } + +#[cfg(test)] +mod tests { + use super::*; + use ark_algebra_test_templates::*; + use ark_ec::{AffineRepr, CurveGroup, Group}; + use ark_ff::{fields::Field, One, Zero}; + use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; + use ark_std::{rand::Rng, test_rng, vec, UniformRand}; + use sp_ark_bls12_381::{ + fq::Fq, fq2::Fq2, fr::Fr, Bls12_381 as Bls12_381Host, G1Affine as G1AffineHost, + G1Projective as G1ProjectiveHost, G2Affine as G2AffineHost, + G2Projective as G2ProjectiveHost, HostFunctions, + }; + use sp_ark_models::pairing::PairingOutput; + + #[derive(PartialEq, Eq)] + struct Host; + + impl HostFunctions for Host { + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) + } + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) + } + fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) + } + fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) + } + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) + } + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) + } + } + + type Bls12_381 = Bls12_381Host; + type G1Projective = G1ProjectiveHost; + type G2Projective = G2ProjectiveHost; + type G1Affine = G1AffineHost; + type G2Affine = G2AffineHost; + + test_group!(g1; G1Projective; sw); + test_group!(g2; G2Projective; sw); + test_group!(pairing_output; PairingOutput; msm); + test_pairing!(ark_pairing; super::Bls12_381); + + #[test] + fn test_g1_endomorphism_beta() { + assert!(sp_ark_bls12_381::g1::BETA.pow([3u64]).is_one()); + } + + #[test] + fn test_g1_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G1Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); + } + + #[test] + fn test_g1_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } + } + } + } + + #[test] + fn test_g2_subgroup_membership_via_endomorphism() { + let mut rng = test_rng(); + let generator = G2Projective::rand(&mut rng).into_affine(); + assert!(generator.is_in_correct_subgroup_assuming_on_curve()); + } + + #[test] + fn test_g2_subgroup_non_membership_via_endomorphism() { + let mut rng = test_rng(); + loop { + let x = Fq2::rand(&mut rng); + let greatest = rng.gen(); + + if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { + if !::is_zero(&p.mul_bigint(Fr::characteristic())) { + assert!(!p.is_in_correct_subgroup_assuming_on_curve()); + return + } + } + } + } + + // Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs + macro_rules! test_vectors { + ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { + let mut e = $projective::zero(); + + let mut v = vec![]; + { + let mut expected = $expected; + for _ in 0..1000 { + let e_affine = $affine::from(e); + let mut serialized = vec![0u8; e.serialized_size($compress)]; + e_affine.serialize_with_mode(serialized.as_mut_slice(), $compress).unwrap(); + v.extend_from_slice(&serialized[..]); + + let mut decoded = serialized; + let len_of_encoding = decoded.len(); + (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); + expected = &expected[len_of_encoding..]; + let decoded = + $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes) + .unwrap(); + assert_eq!(e_affine, decoded); + + e += &$projective::generator(); + } + } + + assert_eq!(&v[..], $expected); + }; + } + + #[test] + fn g1_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("tests/g1_compressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); + } + + #[test] + fn g1_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("tests/g1_uncompressed_valid_test_vectors.dat"); + test_vectors!(G1Projective, G1Affine, Compress::No, bytes); + } + + #[test] + fn g2_compressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("tests/g2_compressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); + } + + #[test] + fn g2_uncompressed_valid_test_vectors() { + let bytes: &'static [u8] = include_bytes!("tests/g2_uncompressed_valid_test_vectors.dat"); + test_vectors!(G2Projective, G2Affine, Compress::No, bytes); + } +} diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/arkworks/src/bw6_761.rs index 4fc45103a8a74..2397179454145 100644 --- a/primitives/arkworks/src/bw6_761.rs +++ b/primitives/arkworks/src/bw6_761.rs @@ -54,3 +54,46 @@ pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } + +#[cfg(test)] +mod tests { + use super::*; + use ark_algebra_test_templates::*; + use sp_ark_bw6_761::{ + G1Projective as G1ProjectiveHost, G2Projective as G2ProjectiveHost, HostFunctions, + BW6_761 as BW6_761Host, + }; + + #[derive(PartialEq, Eq)] + struct Host; + + impl HostFunctions for Host { + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) + } + fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) + } + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) + } + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) + } + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) + } + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) + } + } + + type BW6_761 = BW6_761Host; + type G1Projective = G1ProjectiveHost; + type G2Projective = G2ProjectiveHost; + + test_group!(g1; G1Projective; sw); + test_group!(g2; G2Projective; sw); + test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); + test_pairing!(pairing; super::BW6_761); +} diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/arkworks/src/ed_on_bls12_377.rs index 57376d825371f..5d87111ad7dca 100644 --- a/primitives/arkworks/src/ed_on_bls12_377.rs +++ b/primitives/arkworks/src/ed_on_bls12_377.rs @@ -32,3 +32,24 @@ pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { pub fn msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } + +#[cfg(test)] +mod tests { + use super::*; + use ark_algebra_test_templates::*; + use sp_ark_ed_on_bls12_377::{EdwardsProjective as EdwardsProjectiveHost, HostFunctions}; + + struct Host {} + + impl HostFunctions for Host { + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) + } + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) + } + } + + type EdwardsProjective = EdwardsProjectiveHost; + test_group!(te; EdwardsProjective; te); +} diff --git a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs index 725605886fc26..d24eba8ef7c29 100644 --- a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs @@ -44,3 +44,47 @@ pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } + +#[cfg(test)] +mod tests { + use super::*; + use ark_algebra_test_templates::*; + use sp_ark_ed_on_bls12_381_bandersnatch::{ + EdwardsProjective as EdwardsProjectiveHost, HostFunctions, SWProjective as SWProjectiveHost, + }; + + pub struct Host {} + + impl HostFunctions for Host { + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_sw_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + } + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + } + fn ed_on_bls12_381_bandersnatch_sw_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + } + } + + type EdwardsProjective = EdwardsProjectiveHost; + type SWProjective = SWProjectiveHost; + + test_group!(sw; SWProjective; sw); + test_group!(te; EdwardsProjective; te); +} diff --git a/primitives/arkworks/src/lib.rs b/primitives/arkworks/src/lib.rs index 9b1c2eca895f5..85ebc2586db67 100644 --- a/primitives/arkworks/src/lib.rs +++ b/primitives/arkworks/src/lib.rs @@ -6,6 +6,3 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381_bandersnatch; mod utils; - -#[cfg(test)] -mod tests; diff --git a/primitives/arkworks/src/tests/bls12_377.rs b/primitives/arkworks/src/tests/bls12_377.rs deleted file mode 100644 index cb5ce4f32be0e..0000000000000 --- a/primitives/arkworks/src/tests/bls12_377.rs +++ /dev/null @@ -1,38 +0,0 @@ -use ark_algebra_test_templates::*; -use sp_ark_bls12_377::{ - Bls12_377 as Bls12_377Host, G1Projective as G1ProjectiveHost, G2Projective as G2ProjectiveHost, - HostFunctions, -}; - -#[derive(PartialEq, Eq)] -struct Host; - -impl HostFunctions for Host { - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) - } - fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) - } - fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) - } - fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) - } - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) - } - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) - } -} - -type Bls12_377 = Bls12_377Host; -type G1Projective = G1ProjectiveHost; -type G2Projective = G2ProjectiveHost; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; super::Bls12_377); diff --git a/primitives/arkworks/src/tests/bls12_381/mod.rs b/primitives/arkworks/src/tests/bls12_381/mod.rs deleted file mode 100755 index ac29ca34607bb..0000000000000 --- a/primitives/arkworks/src/tests/bls12_381/mod.rs +++ /dev/null @@ -1,152 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -use ark_algebra_test_templates::*; -use ark_ec::{AffineRepr, CurveGroup, Group}; -use ark_ff::{fields::Field, One, Zero}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{rand::Rng, test_rng, vec, UniformRand}; -use sp_ark_bls12_381::{ - fq::Fq, fq2::Fq2, fr::Fr, Bls12_381 as Bls12_381Host, G1Affine as G1AffineHost, - G1Projective as G1ProjectiveHost, G2Affine as G2AffineHost, G2Projective as G2ProjectiveHost, - HostFunctions, -}; -use sp_ark_models::pairing::PairingOutput; - -#[derive(PartialEq, Eq)] -struct Host; - -impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) - } - fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) - } - fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) - } - fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) - } - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) - } - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) - } -} - -type Bls12_381 = Bls12_381Host; -type G1Projective = G1ProjectiveHost; -type G2Projective = G2ProjectiveHost; -type G1Affine = G1AffineHost; -type G2Affine = G2AffineHost; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; PairingOutput; msm); -test_pairing!(ark_pairing; super::Bls12_381); - -#[test] -fn test_g1_endomorphism_beta() { - assert!(sp_ark_bls12_381::g1::BETA.pow([3u64]).is_one()); -} - -#[test] -fn test_g1_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G1Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g1_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G1Affine::get_point_from_x_unchecked(x, greatest) { - if !::is_zero(&p.mul_bigint(Fr::characteristic())) { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return - } - } - } -} - -#[test] -fn test_g2_subgroup_membership_via_endomorphism() { - let mut rng = test_rng(); - let generator = G2Projective::rand(&mut rng).into_affine(); - assert!(generator.is_in_correct_subgroup_assuming_on_curve()); -} - -#[test] -fn test_g2_subgroup_non_membership_via_endomorphism() { - let mut rng = test_rng(); - loop { - let x = Fq2::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = G2Affine::get_point_from_x_unchecked(x, greatest) { - if !::is_zero(&p.mul_bigint(Fr::characteristic())) { - assert!(!p.is_in_correct_subgroup_assuming_on_curve()); - return - } - } - } -} - -// Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs -macro_rules! test_vectors { - ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { - let mut e = $projective::zero(); - - let mut v = vec![]; - { - let mut expected = $expected; - for _ in 0..1000 { - let e_affine = $affine::from(e); - let mut serialized = vec![0u8; e.serialized_size($compress)]; - e_affine.serialize_with_mode(serialized.as_mut_slice(), $compress).unwrap(); - v.extend_from_slice(&serialized[..]); - - let mut decoded = serialized; - let len_of_encoding = decoded.len(); - (&mut decoded[..]).copy_from_slice(&expected[0..len_of_encoding]); - expected = &expected[len_of_encoding..]; - let decoded = - $affine::deserialize_with_mode(&decoded[..], $compress, Validate::Yes).unwrap(); - assert_eq!(e_affine, decoded); - - e += &$projective::generator(); - } - } - - assert_eq!(&v[..], $expected); - }; -} - -#[test] -fn g1_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_compressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); -} - -#[test] -fn g1_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g1_uncompressed_valid_test_vectors.dat"); - test_vectors!(G1Projective, G1Affine, Compress::No, bytes); -} - -#[test] -fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_compressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); -} - -#[test] -fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("g2_uncompressed_valid_test_vectors.dat"); - test_vectors!(G2Projective, G2Affine, Compress::No, bytes); -} diff --git a/primitives/arkworks/src/tests/bw6_761.rs b/primitives/arkworks/src/tests/bw6_761.rs deleted file mode 100644 index cd63321a94d65..0000000000000 --- a/primitives/arkworks/src/tests/bw6_761.rs +++ /dev/null @@ -1,38 +0,0 @@ -use ark_algebra_test_templates::*; -use sp_ark_bw6_761::{ - G1Projective as G1ProjectiveHost, G2Projective as G2ProjectiveHost, HostFunctions, - BW6_761 as BW6_761Host, -}; - -#[derive(PartialEq, Eq)] -struct Host; - -impl HostFunctions for Host { - fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) - } - fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) - } - fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) - } - fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) - } - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) - } - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) - } -} - -type BW6_761 = BW6_761Host; -type G1Projective = G1ProjectiveHost; -type G2Projective = G2ProjectiveHost; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; super::BW6_761); diff --git a/primitives/arkworks/src/tests/ed_on_bls12_377.rs b/primitives/arkworks/src/tests/ed_on_bls12_377.rs deleted file mode 100644 index 26a2d3bcb08f3..0000000000000 --- a/primitives/arkworks/src/tests/ed_on_bls12_377.rs +++ /dev/null @@ -1,16 +0,0 @@ -use ark_algebra_test_templates::*; -use sp_ark_ed_on_bls12_377::{EdwardsProjective as EdwardsProjectiveHost, HostFunctions}; - -struct Host {} - -impl HostFunctions for Host { - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) - } - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) - } -} - -type EdwardsProjective = EdwardsProjectiveHost; -test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs b/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs deleted file mode 100644 index cd727a6d4f73e..0000000000000 --- a/primitives/arkworks/src/tests/ed_on_bls12_381_bandersnatch.rs +++ /dev/null @@ -1,39 +0,0 @@ -use ark_algebra_test_templates::*; -use sp_ark_ed_on_bls12_381_bandersnatch::{ - EdwardsProjective as EdwardsProjectiveHost, HostFunctions, SWProjective as SWProjectiveHost, -}; - -pub struct Host {} - -impl HostFunctions for Host { - fn ed_on_bls12_381_bandersnatch_te_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) - } - fn ed_on_bls12_381_bandersnatch_sw_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) - } - fn ed_on_bls12_381_bandersnatch_te_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) - } - fn ed_on_bls12_381_bandersnatch_sw_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) - } -} - -type EdwardsProjective = EdwardsProjectiveHost; -type SWProjective = SWProjectiveHost; - -test_group!(sw; SWProjective; sw); -test_group!(te; EdwardsProjective; te); diff --git a/primitives/arkworks/src/tests/bls12_381/g1_compressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/bls12_381/g1_compressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/g1_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/bls12_381/g2_compressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/bls12_381/g2_compressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/g2_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat b/primitives/arkworks/src/tests/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat rename to primitives/arkworks/src/tests/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/mod.rs b/primitives/arkworks/src/tests/mod.rs deleted file mode 100644 index 0c48b8c0eec28..0000000000000 --- a/primitives/arkworks/src/tests/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod bls12_377; -mod bls12_381; -mod bw6_761; -mod ed_on_bls12_377; -mod ed_on_bls12_381_bandersnatch; From fdd5cded7663cbf6057a3c1fe684c12051d09458 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 07:12:17 +0200 Subject: [PATCH 334/364] sp-arkworks -> sp-crypto-ec-utils --- Cargo.lock | 54 +++++++++--------- Cargo.toml | 2 +- .../{arkworks => crypto-ec-utils}/Cargo.toml | 2 +- .../src/bls12_377.rs | 0 .../src/bls12_381.rs | 0 .../src/bw6_761.rs | 0 .../src/ed_on_bls12_377.rs | 0 .../src/ed_on_bls12_381_bandersnatch.rs | 0 .../{arkworks => crypto-ec-utils}/src/lib.rs | 0 .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin .../src/utils.rs | 0 primitives/io/Cargo.toml | 4 +- primitives/io/src/lib.rs | 50 ++++++++-------- 16 files changed, 56 insertions(+), 56 deletions(-) rename primitives/{arkworks => crypto-ec-utils}/Cargo.toml (98%) rename primitives/{arkworks => crypto-ec-utils}/src/bls12_377.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/bls12_381.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/bw6_761.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/ed_on_bls12_377.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/ed_on_bls12_381_bandersnatch.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/lib.rs (100%) rename primitives/{arkworks => crypto-ec-utils}/src/tests/g1_compressed_valid_test_vectors.dat (100%) rename primitives/{arkworks => crypto-ec-utils}/src/tests/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/{arkworks => crypto-ec-utils}/src/tests/g2_compressed_valid_test_vectors.dat (100%) rename primitives/{arkworks => crypto-ec-utils}/src/tests/g2_uncompressed_valid_test_vectors.dat (100%) rename primitives/{arkworks => crypto-ec-utils}/src/utils.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index c85ce686895f0..4d38ba9cccdff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10874,32 +10874,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "sp-arkworks" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-bls12-377", - "ark-bls12-381", - "ark-bw6-761", - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381-bandersnatch", - "ark-ff", - "ark-scale", - "ark-serialize", - "ark-std", - "parity-scale-codec", - "sp-ark-bls12-377", - "sp-ark-bls12-381", - "sp-ark-bw6-761", - "sp-ark-ed-on-bls12-377", - "sp-ark-ed-on-bls12-381-bandersnatch", - "sp-ark-models", - "sp-io", - "sp-std", -] - [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" @@ -11122,6 +11096,32 @@ dependencies = [ "syn 2.0.16", ] +[[package]] +name = "sp-crypto-ec-utils" +version = "0.4.0" +dependencies = [ + "ark-algebra-test-templates", + "ark-bls12-377", + "ark-bls12-381", + "ark-bw6-761", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-scale", + "ark-serialize", + "ark-std", + "parity-scale-codec", + "sp-ark-bls12-377", + "sp-ark-bls12-381", + "sp-ark-bw6-761", + "sp-ark-ed-on-bls12-377", + "sp-ark-ed-on-bls12-381-bandersnatch", + "sp-ark-models", + "sp-io", + "sp-std", +] + [[package]] name = "sp-database" version = "4.0.0-dev" @@ -11177,8 +11177,8 @@ dependencies = [ "parity-scale-codec", "rustversion", "secp256k1", - "sp-arkworks", "sp-core", + "sp-crypto-ec-utils", "sp-externalities", "sp-keystore", "sp-runtime-interface", diff --git a/Cargo.toml b/Cargo.toml index ce647d64a4f27..286e5c0f86d4a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -185,7 +185,6 @@ members = [ "primitives/application-crypto/test", "primitives/arithmetic", "primitives/arithmetic/fuzzer", - "primitives/arkworks", "primitives/authority-discovery", "primitives/block-builder", "primitives/blockchain", @@ -199,6 +198,7 @@ members = [ "primitives/core", "primitives/core/hashing", "primitives/core/hashing/proc-macro", + "primitives/crypto-ec-utils", "primitives/database", "primitives/debug-derive", "primitives/externalities", diff --git a/primitives/arkworks/Cargo.toml b/primitives/crypto-ec-utils/Cargo.toml similarity index 98% rename from primitives/arkworks/Cargo.toml rename to primitives/crypto-ec-utils/Cargo.toml index 1d4e3aeec4934..96efc6b26e27f 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/crypto-ec-utils/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "sp-arkworks" +name = "sp-crypto-ec-utils" version = "0.4.0" authors = ["Parity Technologies "] edition = "2021" diff --git a/primitives/arkworks/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs similarity index 100% rename from primitives/arkworks/src/bls12_377.rs rename to primitives/crypto-ec-utils/src/bls12_377.rs diff --git a/primitives/arkworks/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs similarity index 100% rename from primitives/arkworks/src/bls12_381.rs rename to primitives/crypto-ec-utils/src/bls12_381.rs diff --git a/primitives/arkworks/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs similarity index 100% rename from primitives/arkworks/src/bw6_761.rs rename to primitives/crypto-ec-utils/src/bw6_761.rs diff --git a/primitives/arkworks/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs similarity index 100% rename from primitives/arkworks/src/ed_on_bls12_377.rs rename to primitives/crypto-ec-utils/src/ed_on_bls12_377.rs diff --git a/primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs similarity index 100% rename from primitives/arkworks/src/ed_on_bls12_381_bandersnatch.rs rename to primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs diff --git a/primitives/arkworks/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs similarity index 100% rename from primitives/arkworks/src/lib.rs rename to primitives/crypto-ec-utils/src/lib.rs diff --git a/primitives/arkworks/src/tests/g1_compressed_valid_test_vectors.dat b/primitives/crypto-ec-utils/src/tests/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/g1_compressed_valid_test_vectors.dat rename to primitives/crypto-ec-utils/src/tests/g1_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/crypto-ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/g1_uncompressed_valid_test_vectors.dat rename to primitives/crypto-ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/g2_compressed_valid_test_vectors.dat b/primitives/crypto-ec-utils/src/tests/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/g2_compressed_valid_test_vectors.dat rename to primitives/crypto-ec-utils/src/tests/g2_compressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/crypto-ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/arkworks/src/tests/g2_uncompressed_valid_test_vectors.dat rename to primitives/crypto-ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/arkworks/src/utils.rs b/primitives/crypto-ec-utils/src/utils.rs similarity index 100% rename from primitives/arkworks/src/utils.rs rename to primitives/crypto-ec-utils/src/utils.rs diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index 322dfe968c6b5..f0ecf84756a2a 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -27,7 +27,7 @@ sp-runtime-interface = { version = "7.0.0", default-features = false, path = ".. sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-arkworks = { version = "0.4.0", default-features = false, path = "../arkworks" } +sp-crypto-ec-utils = { version = "0.4.0", default-features = false, path = "../crypto-ec-utils" } log = { version = "0.4.17", default-features = false, optional = true } futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } @@ -57,7 +57,7 @@ std = [ "secp256k1", "sp-runtime-interface/std", "sp-tracing/std", - "sp-arkworks/std", + "sp-crypto-ec-utils/std", "tracing/std", "tracing-core/std", "log", diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 4d7ba1b0bb7bc..e307d6a985be5 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1147,92 +1147,92 @@ pub trait Crypto { pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_arkworks::bls12_381::multi_miller_loop(a, b) + sp_crypto_ec_utils::bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - sp_arkworks::bls12_381::final_exponentiation(f12) + sp_crypto_ec_utils::bls12_381::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_381 fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_381::mul_projective_g1(base, scalar) + sp_crypto_ec_utils::bls12_381::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_381 fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_381::mul_projective_g2(base, scalar) + sp_crypto_ec_utils::bls12_381::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_381 fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::bls12_381::msm_g1(bases, scalars) + sp_crypto_ec_utils::bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::bls12_381::msm_g2(bases, scalars) + sp_crypto_ec_utils::bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop for bls12_377 fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_arkworks::bls12_377::multi_miller_loop(a, b) + sp_crypto_ec_utils::bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - sp_arkworks::bls12_377::final_exponentiation(f12) + sp_crypto_ec_utils::bls12_377::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_377 fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_377::mul_projective_g1(base, scalar) + sp_crypto_ec_utils::bls12_377::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_377 fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bls12_377::mul_projective_g2(base, scalar) + sp_crypto_ec_utils::bls12_377::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_377 fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::bls12_377::msm_g1(bases, scalars) + sp_crypto_ec_utils::bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::bls12_377::msm_g2(bases, scalars) + sp_crypto_ec_utils::bls12_377::msm_g2(bases, scalars) } /// Compute a multi Miller loop on bw6_761 fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_arkworks::bw6_761::multi_miller_loop(a, b) + sp_crypto_ec_utils::bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - sp_arkworks::bw6_761::final_exponentiation(f12) + sp_crypto_ec_utils::bw6_761::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bw6_761 fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bw6_761::mul_projective_g1(base, scalar) + sp_crypto_ec_utils::bw6_761::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bw6_761 fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::bw6_761::mul_projective_g2(base, scalar) + sp_crypto_ec_utils::bw6_761::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bw6_761 fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_arkworks::bw6_761::msm_g1(bases, bigints) + sp_crypto_ec_utils::bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_arkworks::bw6_761::msm_g2(bases, bigints) + sp_crypto_ec_utils::bw6_761::msm_g2(bases, bigints) } /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch @@ -1240,7 +1240,7 @@ pub trait EllipticCurves { base: Vec, scalar: Vec, ) -> Result, ()> { - sp_arkworks::ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) + sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) } /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch @@ -1248,7 +1248,7 @@ pub trait EllipticCurves { base: Vec, scalar: Vec, ) -> Result, ()> { - sp_arkworks::ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) + sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) } /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch @@ -1256,7 +1256,7 @@ pub trait EllipticCurves { bases: Vec, scalars: Vec, ) -> Result, ()> { - sp_arkworks::ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) + sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) } /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch @@ -1264,22 +1264,22 @@ pub trait EllipticCurves { bases: Vec, scalars: Vec, ) -> Result, ()> { - sp_arkworks::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) + sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) } /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) + sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) } /// Compute projective multiplication on ed_on_bls12_377 fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_377::mul_projective(base, scalar) + sp_crypto_ec_utils::ed_on_bls12_377::mul_projective(base, scalar) } /// Compute msm on ed_on_bls12_377 fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_arkworks::ed_on_bls12_377::msm(bases, scalars) + sp_crypto_ec_utils::ed_on_bls12_377::msm(bases, scalars) } } From 39dc3bab18955595a75fdc7451d239da7797a161 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 10:15:07 +0200 Subject: [PATCH 335/364] move host functions to crypto-ec-utils --- Cargo.lock | 1 + primitives/crypto-ec-utils/Cargo.toml | 3 + primitives/crypto-ec-utils/src/bls12_377.rs | 12 +- primitives/crypto-ec-utils/src/bls12_381.rs | 12 +- primitives/crypto-ec-utils/src/bw6_761.rs | 12 +- .../crypto-ec-utils/src/ed_on_bls12_377.rs | 4 +- .../src/ed_on_bls12_381_bandersnatch.rs | 8 +- primitives/crypto-ec-utils/src/lib.rs | 145 ++++++++++++++++++ primitives/io/Cargo.toml | 2 +- primitives/io/src/lib.rs | 142 ----------------- 10 files changed, 174 insertions(+), 167 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d38ba9cccdff..9966b01716e48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11119,6 +11119,7 @@ dependencies = [ "sp-ark-ed-on-bls12-381-bandersnatch", "sp-ark-models", "sp-io", + "sp-runtime-interface", "sp-std", ] diff --git a/primitives/crypto-ec-utils/Cargo.toml b/primitives/crypto-ec-utils/Cargo.toml index 96efc6b26e27f..2ff60ca8df854 100644 --- a/primitives/crypto-ec-utils/Cargo.toml +++ b/primitives/crypto-ec-utils/Cargo.toml @@ -23,6 +23,7 @@ ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } sp-std = { version = "5.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false } +sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../runtime-interface" } [dev-dependencies] sp-io = { path = "../io", default-features = false } @@ -49,6 +50,7 @@ std = [ "sp-std/std", "codec/std", "ark-scale/std", + "sp-runtime-interface/std", "sp-io/std", "ark-algebra-test-templates/std", "sp-ark-bls12-377/std", @@ -57,3 +59,4 @@ std = [ "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381-bandersnatch/std", ] +ec-utils-experimental = [] diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index 2d75351e34090..8097793bfe803 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_multi_miller_loop(a, b) + crate::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_final_exponentiation(f12) + crate::elliptic_curves::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g1(bases, bigints) + crate::elliptic_curves::bls12_377_msm_g1(bases, bigints) } fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_msm_g2(bases, bigints) + crate::elliptic_curves::bls12_377_msm_g2(bases, bigints) } fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) + crate::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) } fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) + crate::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index ab74084c8656c..2c2f4153c4720 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -75,22 +75,22 @@ mod tests { impl HostFunctions for Host { fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_multi_miller_loop(a, b) + crate::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_final_exponentiation(f12) + crate::elliptic_curves::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g1(bases, bigints) + crate::elliptic_curves::bls12_381_msm_g1(bases, bigints) } fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_msm_g2(bases, bigints) + crate::elliptic_curves::bls12_381_msm_g2(bases, bigints) } fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) + crate::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) + crate::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 2397179454145..90cd58b1e9b6c 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_multi_miller_loop(a, b) + crate::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_final_exponentiation(f12) + crate::elliptic_curves::bw6_761_final_exponentiation(f12) } fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g1(bases, bigints) + crate::elliptic_curves::bw6_761_msm_g1(bases, bigints) } fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_msm_g2(bases, bigints) + crate::elliptic_curves::bw6_761_msm_g2(bases, bigints) } fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) + crate::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) } fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) + crate::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 5d87111ad7dca..107b4d95cebcb 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -43,10 +43,10 @@ mod tests { impl HostFunctions for Host { fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index d24eba8ef7c29..aa122f16defbc 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -60,25 +60,25 @@ mod tests { bases: Vec, scalars: Vec, ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_te_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) } fn ed_on_bls12_381_bandersnatch_sw_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - sp_io::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs index 85ebc2586db67..86113601be1e3 100644 --- a/primitives/crypto-ec-utils/src/lib.rs +++ b/primitives/crypto-ec-utils/src/lib.rs @@ -6,3 +6,148 @@ pub mod bw6_761; pub mod ed_on_bls12_377; pub mod ed_on_bls12_381_bandersnatch; mod utils; + +#[cfg(feature = "ec-utils-experimental")] +use sp_runtime_interface::runtime_interface; + +/// Interfaces for working with elliptic curves related types from within the runtime. +#[cfg(feature = "ec-utils-experimental")] +#[runtime_interface] +pub trait EllipticCurves { + /// Compute a multi Miller loop on bls12_381 + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + bls12_381::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation on bls12_381 + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { + bls12_381::final_exponentiation(f12) + } + + /// Compute a projective multiplication on G1 for bls12_381 + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + bls12_381::mul_projective_g1(base, scalar) + } + + /// Compute a projective multiplication on G2 for bls12_381 + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + bls12_381::mul_projective_g2(base, scalar) + } + + /// Compute a msm on G1 for bls12_381 + fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_381::msm_g1(bases, scalars) + } + + /// Compute a msm on G2 for bls12_381 + fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_381::msm_g2(bases, scalars) + } + + /// Compute a multi Miller loop for bls12_377 + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + bls12_377::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation for bls12_377 + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { + bls12_377::final_exponentiation(f12) + } + + /// Compute a projective multiplication on G1 for bls12_377 + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + bls12_377::mul_projective_g1(base, scalar) + } + + /// Compute a projective multiplication on G2 for bls12_377 + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + bls12_377::mul_projective_g2(base, scalar) + } + + /// Compute a msm on G1 for bls12_377 + fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_377::msm_g1(bases, scalars) + } + + /// Compute a msm on G2 for bls12_377 + fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_377::msm_g2(bases, scalars) + } + + /// Compute a multi Miller loop on bw6_761 + fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + bw6_761::multi_miller_loop(a, b) + } + + /// Compute a final exponentiation on bw6_761 + fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { + bw6_761::final_exponentiation(f12) + } + + /// Compute a projective multiplication on G1 for bw6_761 + fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + bw6_761::mul_projective_g1(base, scalar) + } + + /// Compute a projective multiplication on G2 for bw6_761 + fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + bw6_761::mul_projective_g2(base, scalar) + } + + /// Compute a msm on G1 for bw6_761 + fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { + bw6_761::msm_g1(bases, bigints) + } + + /// Compute a msm on G2 for bw6_761 + fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { + bw6_761::msm_g2(bases, bigints) + } + + /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) + } + + /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_sw_mul_projective( + base: Vec, + scalar: Vec, + ) -> Result, ()> { + ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) + } + + /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) + } + + /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_bandersnatch_sw_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) + } + + /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch + fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { + ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) + } + + /// Compute projective multiplication on ed_on_bls12_377 + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + ed_on_bls12_377::mul_projective(base, scalar) + } + + /// Compute msm on ed_on_bls12_377 + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { + ed_on_bls12_377::msm(bases, scalars) + } +} diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index f0ecf84756a2a..f61187b015bf1 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -95,4 +95,4 @@ disable_allocator = [] # WARNING: Enabling this feature flag requires the `PanicHandler::abort_on_panic` # host function to be supported by the host. Do *not* enable it for your # runtime without first upgrading your host client! -improved_panic_error_reporting = [] +improved_panic_error_reporting = [] \ No newline at end of file diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index e307d6a985be5..750b5d5924637 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1142,147 +1142,6 @@ pub trait Crypto { } } -/// Interfaces for working with elliptic curves related types from within the runtime. -#[runtime_interface] -pub trait EllipticCurves { - /// Compute a multi Miller loop on bls12_381 - fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::multi_miller_loop(a, b) - } - - /// Compute a final exponentiation on bls12_381 - fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::final_exponentiation(f12) - } - - /// Compute a projective multiplication on G1 for bls12_381 - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::mul_projective_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bls12_381 - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::mul_projective_g2(base, scalar) - } - - /// Compute a msm on G1 for bls12_381 - fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::msm_g1(bases, scalars) - } - - /// Compute a msm on G2 for bls12_381 - fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_381::msm_g2(bases, scalars) - } - - /// Compute a multi Miller loop for bls12_377 - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::multi_miller_loop(a, b) - } - - /// Compute a final exponentiation for bls12_377 - fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::final_exponentiation(f12) - } - - /// Compute a projective multiplication on G1 for bls12_377 - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::mul_projective_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bls12_377 - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::mul_projective_g2(base, scalar) - } - - /// Compute a msm on G1 for bls12_377 - fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::msm_g1(bases, scalars) - } - - /// Compute a msm on G2 for bls12_377 - fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::bls12_377::msm_g2(bases, scalars) - } - - /// Compute a multi Miller loop on bw6_761 - fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::multi_miller_loop(a, b) - } - - /// Compute a final exponentiation on bw6_761 - fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::final_exponentiation(f12) - } - - /// Compute a projective multiplication on G1 for bw6_761 - fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::mul_projective_g1(base, scalar) - } - - /// Compute a projective multiplication on G2 for bw6_761 - fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::mul_projective_g2(base, scalar) - } - - /// Compute a msm on G1 for bw6_761 - fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::msm_g1(bases, bigints) - } - - /// Compute a msm on G2 for bw6_761 - fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - sp_crypto_ec_utils::bw6_761::msm_g2(bases, bigints) - } - - /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_te_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) - } - - /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_sw_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) - } - - /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_te_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) - } - - /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_sw_msm( - bases: Vec, - scalars: Vec, - ) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) - } - - /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) - } - - /// Compute projective multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_377::mul_projective(base, scalar) - } - - /// Compute msm on ed_on_bls12_377 - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - sp_crypto_ec_utils::ed_on_bls12_377::msm(bases, scalars) - } -} - /// Interface that provides functions for hashing with different algorithms. #[runtime_interface] pub trait Hashing { @@ -1845,7 +1704,6 @@ pub type SubstrateHostFunctions = ( wasm_tracing::HostFunctions, offchain::HostFunctions, crypto::HostFunctions, - elliptic_curves::HostFunctions, hashing::HostFunctions, allocator::HostFunctions, panic_handler::HostFunctions, From ce271ba0f7c31094920d3d2be7b7d1fca4cbbfa3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 10:21:56 +0200 Subject: [PATCH 336/364] fmt --- primitives/crypto-ec-utils/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs index 86113601be1e3..f63d666300ef7 100644 --- a/primitives/crypto-ec-utils/src/lib.rs +++ b/primitives/crypto-ec-utils/src/lib.rs @@ -7,11 +7,11 @@ pub mod ed_on_bls12_377; pub mod ed_on_bls12_381_bandersnatch; mod utils; -#[cfg(feature = "ec-utils-experimental")] +#[cfg(feature = "ec-utils-experimental")] use sp_runtime_interface::runtime_interface; /// Interfaces for working with elliptic curves related types from within the runtime. -#[cfg(feature = "ec-utils-experimental")] +#[cfg(feature = "ec-utils-experimental")] #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 From cacc216bd63f9c8be22fc3cc75e987e458579144 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 11:17:03 +0200 Subject: [PATCH 337/364] remove sp-ec-crypto-utils from io --- Cargo.lock | 38 +++++++++++++++++++++++++++++++++++--- primitives/io/Cargo.toml | 14 ++++++-------- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9966b01716e48..dd3ef2d64a8d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1723,6 +1723,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + [[package]] name = "crypto-mac" version = "0.11.1" @@ -3393,13 +3403,23 @@ dependencies = [ "hmac 0.12.1", ] +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + [[package]] name = "hmac" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "crypto-mac", + "crypto-mac 0.11.1", "digest 0.9.0", ] @@ -3412,6 +3432,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", +] + [[package]] name = "honggfuzz" version = "0.5.55" @@ -4608,12 +4639,14 @@ dependencies = [ "arrayref", "base64 0.13.1", "digest 0.9.0", + "hmac-drbg", "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", "rand 0.8.5", "serde", "sha2 0.9.9", + "typenum", ] [[package]] @@ -7623,7 +7656,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "crypto-mac", + "crypto-mac 0.11.1", ] [[package]] @@ -11179,7 +11212,6 @@ dependencies = [ "rustversion", "secp256k1", "sp-core", - "sp-crypto-ec-utils", "sp-externalities", "sp-keystore", "sp-runtime-interface", diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index f61187b015bf1..c6e716396aea4 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -21,23 +21,22 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = sp-core = { version = "7.0.0", default-features = false, path = "../core" } sp-keystore = { version = "0.13.0", default-features = false, optional = true, path = "../keystore" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } -libsecp256k1 = { version = "0.7", default-features = false, optional = true } +libsecp256k1 = { version = "0.7", optional = true } sp-state-machine = { version = "0.13.0", default-features = false, optional = true, path = "../state-machine" } sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../runtime-interface" } sp-trie = { version = "7.0.0", default-features = false, optional = true, path = "../trie" } sp-externalities = { version = "0.13.0", default-features = false, path = "../externalities" } sp-tracing = { version = "6.0.0", default-features = false, path = "../tracing" } -sp-crypto-ec-utils = { version = "0.4.0", default-features = false, path = "../crypto-ec-utils" } -log = { version = "0.4.17", default-features = false, optional = true } -futures = { version = "0.3.21", features = ["thread-pool"], default-features = false, optional = true } -secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], default-features = false, optional = true } +log = { version = "0.4.17", optional = true } +futures = { version = "0.3.21", features = ["thread-pool"], optional = true } +secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], optional = true } tracing = { version = "0.1.29", default-features = false } tracing-core = { version = "0.1.28", default-features = false} # Required for backwards compatibility reason, but only used for verifying when `UseDalekExt` is set. ed25519-dalek = { version = "1.0.1", default-features = false, optional = true } # Force the usage of ed25519, this is being used in `ed25519-dalek`. -ed25519 = { version = "1.5.2", optional = true, default-features = false } +ed25519 = { version = "1.5.2", optional = true } [build-dependencies] rustversion = "1.0.6" @@ -57,7 +56,6 @@ std = [ "secp256k1", "sp-runtime-interface/std", "sp-tracing/std", - "sp-crypto-ec-utils/std", "tracing/std", "tracing-core/std", "log", @@ -95,4 +93,4 @@ disable_allocator = [] # WARNING: Enabling this feature flag requires the `PanicHandler::abort_on_panic` # host function to be supported by the host. Do *not* enable it for your # runtime without first upgrading your host client! -improved_panic_error_reporting = [] \ No newline at end of file +improved_panic_error_reporting = [] From 7199d1fd513ad81d3c4a16a7cef8c5b1591c498b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 17:31:52 +0200 Subject: [PATCH 338/364] remove unwrap from te msm --- primitives/crypto-ec-utils/src/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/crypto-ec-utils/src/utils.rs b/primitives/crypto-ec-utils/src/utils.rs index 7099947e89dd0..fba8d240e0f94 100644 --- a/primitives/crypto-ec-utils/src/utils.rs +++ b/primitives/crypto-ec-utils/src/utils.rs @@ -71,8 +71,8 @@ pub(crate) fn msm_te_generic( ) .map_err(|_| ())?; - let result = - as VariableBaseMSM>::msm(&bases.0, &scalars.0).unwrap(); + let result = as VariableBaseMSM>::msm(&bases.0, &scalars.0) + .map_err(|_| ())?; let result: ArkScaleProjective> = result.into(); Ok(result.encode()) From 058614d77d24839e9be41812dcf7d7eea16b6fad Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 19:12:50 +0200 Subject: [PATCH 339/364] remove elliptic_curves references in test --- primitives/crypto-ec-utils/src/bls12_377.rs | 12 ++++++------ primitives/crypto-ec-utils/src/bls12_381.rs | 12 ++++++------ primitives/crypto-ec-utils/src/bw6_761.rs | 12 ++++++------ primitives/crypto-ec-utils/src/ed_on_bls12_377.rs | 4 ++-- .../src/ed_on_bls12_381_bandersnatch.rs | 8 ++++---- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index 8097793bfe803..a29d0daa2a113 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_multi_miller_loop(a, b) + crate::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_final_exponentiation(f12) + crate::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_msm_g1(bases, bigints) + crate::bls12_377_msm_g1(bases, bigints) } fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_msm_g2(bases, bigints) + crate::bls12_377_msm_g2(bases, bigints) } fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) + crate::bls12_377_mul_projective_g1(base, scalar) } fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) + crate::bls12_377_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index 2c2f4153c4720..e8c6ec0aac405 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -75,22 +75,22 @@ mod tests { impl HostFunctions for Host { fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_multi_miller_loop(a, b) + crate::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_final_exponentiation(f12) + crate::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_msm_g1(bases, bigints) + crate::bls12_381_msm_g1(bases, bigints) } fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_msm_g2(bases, bigints) + crate::bls12_381_msm_g2(bases, bigints) } fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) + crate::bls12_381_mul_projective_g1(base, scalar) } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) + crate::bls12_381_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 90cd58b1e9b6c..8e1b28b8417f0 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_multi_miller_loop(a, b) + crate::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_final_exponentiation(f12) + crate::bw6_761_final_exponentiation(f12) } fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_msm_g1(bases, bigints) + crate::bw6_761_msm_g1(bases, bigints) } fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_msm_g2(bases, bigints) + crate::bw6_761_msm_g2(bases, bigints) } fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) + crate::bw6_761_mul_projective_g1(base, scalar) } fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) + crate::bw6_761_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 107b4d95cebcb..15ede7390c2e4 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -43,10 +43,10 @@ mod tests { impl HostFunctions for Host { fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) + crate::ed_on_bls12_377_msm(bases, scalars) } fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) + crate::ed_on_bls12_377_mul_projective(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index aa122f16defbc..c113dd5cf2a97 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -60,25 +60,25 @@ mod tests { bases: Vec, scalars: Vec, ) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + crate::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, ) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + crate::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_te_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + crate::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) } fn ed_on_bls12_381_bandersnatch_sw_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + crate::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) } } From f07d8d40afe7e6291e7979102a85d74c274ee791 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 22 May 2023 19:15:13 +0200 Subject: [PATCH 340/364] elliptic_curves references in test --- primitives/crypto-ec-utils/src/bls12_377.rs | 12 ++++++------ primitives/crypto-ec-utils/src/bls12_381.rs | 14 ++++++-------- primitives/crypto-ec-utils/src/bw6_761.rs | 12 ++++++------ primitives/crypto-ec-utils/src/ed_on_bls12_377.rs | 4 ++-- .../src/ed_on_bls12_381_bandersnatch.rs | 8 ++++---- 5 files changed, 24 insertions(+), 26 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index a29d0daa2a113..8097793bfe803 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::bls12_377_multi_miller_loop(a, b) + crate::elliptic_curves::bls12_377_multi_miller_loop(a, b) } fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - crate::bls12_377_final_exponentiation(f12) + crate::elliptic_curves::bls12_377_final_exponentiation(f12) } fn bls12_377_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bls12_377_msm_g1(bases, bigints) + crate::elliptic_curves::bls12_377_msm_g1(bases, bigints) } fn bls12_377_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bls12_377_msm_g2(bases, bigints) + crate::elliptic_curves::bls12_377_msm_g2(bases, bigints) } fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::bls12_377_mul_projective_g1(base, scalar) + crate::elliptic_curves::bls12_377_mul_projective_g1(base, scalar) } fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::bls12_377_mul_projective_g2(base, scalar) + crate::elliptic_curves::bls12_377_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index e8c6ec0aac405..c066c9b9ecd19 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -17,8 +17,6 @@ //! ... docs -#![warn(missing_docs)] - use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; @@ -75,22 +73,22 @@ mod tests { impl HostFunctions for Host { fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::bls12_381_multi_miller_loop(a, b) + crate::elliptic_curves::bls12_381_multi_miller_loop(a, b) } fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - crate::bls12_381_final_exponentiation(f12) + crate::elliptic_curves::bls12_381_final_exponentiation(f12) } fn bls12_381_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bls12_381_msm_g1(bases, bigints) + crate::elliptic_curves::bls12_381_msm_g1(bases, bigints) } fn bls12_381_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bls12_381_msm_g2(bases, bigints) + crate::elliptic_curves::bls12_381_msm_g2(bases, bigints) } fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::bls12_381_mul_projective_g1(base, scalar) + crate::elliptic_curves::bls12_381_mul_projective_g1(base, scalar) } fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::bls12_381_mul_projective_g2(base, scalar) + crate::elliptic_curves::bls12_381_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 8e1b28b8417f0..90cd58b1e9b6c 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -69,22 +69,22 @@ mod tests { impl HostFunctions for Host { fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - crate::bw6_761_multi_miller_loop(a, b) + crate::elliptic_curves::bw6_761_multi_miller_loop(a, b) } fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { - crate::bw6_761_final_exponentiation(f12) + crate::elliptic_curves::bw6_761_final_exponentiation(f12) } fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bw6_761_msm_g1(bases, bigints) + crate::elliptic_curves::bw6_761_msm_g1(bases, bigints) } fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { - crate::bw6_761_msm_g2(bases, bigints) + crate::elliptic_curves::bw6_761_msm_g2(bases, bigints) } fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - crate::bw6_761_mul_projective_g1(base, scalar) + crate::elliptic_curves::bw6_761_mul_projective_g1(base, scalar) } fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - crate::bw6_761_mul_projective_g2(base, scalar) + crate::elliptic_curves::bw6_761_mul_projective_g2(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 15ede7390c2e4..107b4d95cebcb 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -43,10 +43,10 @@ mod tests { impl HostFunctions for Host { fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - crate::ed_on_bls12_377_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_377_msm(bases, scalars) } fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - crate::ed_on_bls12_377_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_377_mul_projective(base, scalar) } } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index c113dd5cf2a97..aa122f16defbc 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -60,25 +60,25 @@ mod tests { bases: Vec, scalars: Vec, ) -> Result, ()> { - crate::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, ) -> Result, ()> { - crate::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars) } fn ed_on_bls12_381_bandersnatch_te_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - crate::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) } fn ed_on_bls12_381_bandersnatch_sw_mul_projective( base: Vec, scalar: Vec, ) -> Result, ()> { - crate::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) + crate::elliptic_curves::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) } } From 162b1908574b8c7d9750abc7845f422cb1226985 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 23 May 2023 10:26:31 +0200 Subject: [PATCH 341/364] update doc comments --- primitives/crypto-ec-utils/src/bls12_377.rs | 3 ++- primitives/crypto-ec-utils/src/bls12_381.rs | 3 ++- primitives/crypto-ec-utils/src/bw6_761.rs | 3 ++- primitives/crypto-ec-utils/src/ed_on_bls12_377.rs | 3 ++- .../crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs | 3 ++- primitives/crypto-ec-utils/src/lib.rs | 6 ++++++ 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index 8097793bfe803..e60b085df3c34 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -15,7 +15,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! ... docs +//! Support functions for bls12_377 to improve the performance of multi_miller_loop, +//! final_exponentiation, msm's and projective multiplications by host function calls #![warn(missing_docs)] diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index c066c9b9ecd19..8d885e9ece5da 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -15,7 +15,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! ... docs +//! Support functions for bls12_381 to improve the performance of multi_miller_loop, +//! final_exponentiation, msm's and projective multiplications by host function calls use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 90cd58b1e9b6c..82a76df557c59 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -15,7 +15,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! ... docs +//! Support functions for bw6_761 to improve the performance of multi_miller_loop, +//! final_exponentiation, msm's and projective multiplications by host function calls #![warn(missing_docs)] diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 107b4d95cebcb..fc957a93ef02d 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -15,7 +15,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! ... docs +//! Support functions for ed_on_bls12_377 to improve the performance of +//! msm and projective multiplication by host function calls #![warn(missing_docs)] diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index aa122f16defbc..c189d1921b0c7 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -15,7 +15,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! ... docs +//! Support functions for ed_on_bls12_381_bandersnatch to improve the performance of +//! msm' and projective multiplications by host function calls #![warn(missing_docs)] diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs index f63d666300ef7..c16d7b8c579e6 100644 --- a/primitives/crypto-ec-utils/src/lib.rs +++ b/primitives/crypto-ec-utils/src/lib.rs @@ -1,10 +1,16 @@ #![cfg_attr(not(feature = "std"), no_std)] +#[cfg(feature = "ec-utils-experimental")] pub mod bls12_377; +#[cfg(feature = "ec-utils-experimental")] pub mod bls12_381; +#[cfg(feature = "ec-utils-experimental")] pub mod bw6_761; +#[cfg(feature = "ec-utils-experimental")] pub mod ed_on_bls12_377; +#[cfg(feature = "ec-utils-experimental")] pub mod ed_on_bls12_381_bandersnatch; +#[cfg(feature = "ec-utils-experimental")] mod utils; #[cfg(feature = "ec-utils-experimental")] From 965e520bb2f64486e50cb7fa8de4d08b012afca8 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 23 May 2023 10:28:57 +0200 Subject: [PATCH 342/364] remove warn missing docs --- primitives/crypto-ec-utils/src/bls12_377.rs | 2 -- primitives/crypto-ec-utils/src/bw6_761.rs | 1 - primitives/crypto-ec-utils/src/ed_on_bls12_377.rs | 1 - primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs | 1 - 4 files changed, 5 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index e60b085df3c34..b6cb270e7fa4a 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -18,8 +18,6 @@ //! Support functions for bls12_377 to improve the performance of multi_miller_loop, //! final_exponentiation, msm's and projective multiplications by host function calls -#![warn(missing_docs)] - use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 82a76df557c59..9651602486d3a 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -18,7 +18,6 @@ //! Support functions for bw6_761 to improve the performance of multi_miller_loop, //! final_exponentiation, msm's and projective multiplications by host function calls -#![warn(missing_docs)] use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index fc957a93ef02d..341126919b98a 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -18,7 +18,6 @@ //! Support functions for ed_on_bls12_377 to improve the performance of //! msm and projective multiplication by host function calls -#![warn(missing_docs)] use crate::utils::{msm_te_generic, mul_projective_te_generic}; use ark_ed_on_bls12_377::EdwardsConfig; diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index c189d1921b0c7..c48831c816193 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -18,7 +18,6 @@ //! Support functions for ed_on_bls12_381_bandersnatch to improve the performance of //! msm' and projective multiplications by host function calls -#![warn(missing_docs)] use crate::utils::{ msm_sw_generic, msm_te_generic, mul_projective_generic, mul_projective_te_generic, From 88dd4a3ae6fb1812e16c4fc75ae6e6955aea147e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 23 May 2023 13:13:32 +0200 Subject: [PATCH 343/364] fmt --- primitives/crypto-ec-utils/src/bls12_377.rs | 2 +- primitives/crypto-ec-utils/src/bls12_381.rs | 2 +- primitives/crypto-ec-utils/src/bw6_761.rs | 3 +-- primitives/crypto-ec-utils/src/ed_on_bls12_377.rs | 3 +-- primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs | 3 +-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index b6cb270e7fa4a..3dec6117d34e8 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bls12_377 to improve the performance of multi_miller_loop, +//! Support functions for bls12_377 to improve the performance of multi_miller_loop, //! final_exponentiation, msm's and projective multiplications by host function calls use crate::utils::{ diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index 8d885e9ece5da..2254f6f1c3f3f 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bls12_381 to improve the performance of multi_miller_loop, +//! Support functions for bls12_381 to improve the performance of multi_miller_loop, //! final_exponentiation, msm's and projective multiplications by host function calls use crate::utils::{ diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 9651602486d3a..4ea7030b52dbf 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -15,10 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bw6_761 to improve the performance of multi_miller_loop, +//! Support functions for bw6_761 to improve the performance of multi_miller_loop, //! final_exponentiation, msm's and projective multiplications by host function calls - use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, }; diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 341126919b98a..5ecdb866ffd00 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -15,10 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for ed_on_bls12_377 to improve the performance of +//! Support functions for ed_on_bls12_377 to improve the performance of //! msm and projective multiplication by host function calls - use crate::utils::{msm_te_generic, mul_projective_te_generic}; use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index c48831c816193..545b4b610151d 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -15,10 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for ed_on_bls12_381_bandersnatch to improve the performance of +//! Support functions for ed_on_bls12_381_bandersnatch to improve the performance of //! msm' and projective multiplications by host function calls - use crate::utils::{ msm_sw_generic, msm_te_generic, mul_projective_generic, mul_projective_te_generic, }; From 3dcacc9722e098404494330d74934ba533c4562c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 23 May 2023 13:55:22 +0200 Subject: [PATCH 344/364] cargo update --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 157e455237acd..a06ce9f27e802 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1021,9 +1021,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.2" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "byte-slice-cast" @@ -8482,13 +8482,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +checksum = "d1a59b5d8e97dee33696bf13c5ba8ab85341c002922fba050069326b9c498974" dependencies = [ "aho-corasick 1.0.1", "memchr", - "regex-syntax 0.7.1", + "regex-syntax 0.7.2", ] [[package]] @@ -8508,9 +8508,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "region" From 25f863f126423ec4ce26f99daec90c0d6c08038a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 23 May 2023 14:39:42 +0200 Subject: [PATCH 345/364] update doc comments --- primitives/crypto-ec-utils/src/bls12_377.rs | 17 +++++++++------ primitives/crypto-ec-utils/src/bls12_381.rs | 17 +++++++++------ primitives/crypto-ec-utils/src/bw6_761.rs | 17 +++++++++------ .../crypto-ec-utils/src/ed_on_bls12_377.rs | 6 ++++-- .../src/ed_on_bls12_381_bandersnatch.rs | 17 +++++++++------ primitives/crypto-ec-utils/src/lib.rs | 21 +++++++++++++++++++ primitives/crypto-ec-utils/src/utils.rs | 19 +++++++++++++++++ 7 files changed, 88 insertions(+), 26 deletions(-) diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto-ec-utils/src/bls12_377.rs index 3dec6117d34e8..9230479b3bec5 100644 --- a/primitives/crypto-ec-utils/src/bls12_377.rs +++ b/primitives/crypto-ec-utils/src/bls12_377.rs @@ -15,8 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bls12_377 to improve the performance of multi_miller_loop, -//! final_exponentiation, msm's and projective multiplications by host function calls +//! Support functions for bls12_377 to improve the performance of +//! multi_miller_loop, final_exponentiation, msm's and projective +//! multiplications by host function calls use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, @@ -34,22 +35,26 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G1. pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G2. pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a projective scalar multiplication for short_weierstrass +/// through arkworks on G1. pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a projective scalar multiplication for short_weierstrass +/// through arkworks on G2. pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto-ec-utils/src/bls12_381.rs index 2254f6f1c3f3f..04f247f377605 100644 --- a/primitives/crypto-ec-utils/src/bls12_381.rs +++ b/primitives/crypto-ec-utils/src/bls12_381.rs @@ -15,8 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bls12_381 to improve the performance of multi_miller_loop, -//! final_exponentiation, msm's and projective multiplications by host function calls +//! Support functions for bls12_381 to improve the performance of +//! multi_miller_loop, final_exponentiation, msm's and projective +//! multiplications by host function calls use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, @@ -34,22 +35,26 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G1. pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G2. pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a projective scalar multiplication for short_weierstrass +/// through arkworks on G1. pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a projective scalar multiplication for short_weierstrass +/// through arkworks on G2. pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto-ec-utils/src/bw6_761.rs index 4ea7030b52dbf..2f3b4c3c9c9aa 100644 --- a/primitives/crypto-ec-utils/src/bw6_761.rs +++ b/primitives/crypto-ec-utils/src/bw6_761.rs @@ -15,8 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for bw6_761 to improve the performance of multi_miller_loop, -//! final_exponentiation, msm's and projective multiplications by host function calls +//! Support functions for bw6_761 to improve the performance of +//! multi_miller_loop, final_exponentiation, msm's and projective +//! multiplications by host function calls. use crate::utils::{ final_exponentiation_generic, msm_sw_generic, mul_projective_generic, multi_miller_loop_generic, @@ -34,22 +35,26 @@ pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G1. pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks on G2. pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G1 +/// Compute a projective scalar multiplication for short_weierstrass through +/// arkworks on G1. pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -/// Compute a projective scalar multiplication for short_weierstrass through arkworks on G2 +/// Compute a projective scalar multiplication for short_weierstrass through +/// arkworks on G2. pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs index 5ecdb866ffd00..fa2819b41e3c5 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs @@ -22,12 +22,14 @@ use crate::utils::{msm_te_generic, mul_projective_te_generic}; use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; -/// Compute a projective scalar multiplication for twisted_edwards through arkworks +/// Compute a projective scalar multiplication for twisted_edwards +/// through arkworks. pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -/// Compute a multi scalar mulitplication for twisted_edwards through arkworks +/// Compute a multi scalar mulitplication for twisted_edwards through +/// arkworks. pub fn msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs index 545b4b610151d..890b579ad02de 100644 --- a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -15,8 +15,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Support functions for ed_on_bls12_381_bandersnatch to improve the performance of -//! msm' and projective multiplications by host function calls +//! Support functions for ed_on_bls12_381_bandersnatch to improve the +//! performance of msm' and projective multiplications by host function +//! calls. use crate::utils::{ msm_sw_generic, msm_te_generic, mul_projective_generic, mul_projective_te_generic, @@ -24,22 +25,26 @@ use crate::utils::{ use ark_ed_on_bls12_381_bandersnatch::BandersnatchConfig; use sp_std::vec::Vec; -/// Compute a projective scalar multiplication for short_weierstrass through arkworks +/// Compute a projective scalar multiplication for short_weierstrass +/// through arkworks. pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } -/// Compute a projective scalar multiplication for twisted_edwards through arkworks +/// Compute a projective scalar multiplication for twisted_edwards +/// through arkworks. pub fn te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_te_generic::(base, scalar) } -/// Compute a multi scalar mulitplication for twisted_edwards through arkworks +/// Compute a multi scalar mulitplication for twisted_edwards through +/// arkworks. pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } -/// Compute a multi scalar multiplication for short_weierstrass through arkworks +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks. pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs index c16d7b8c579e6..02354c2b959e5 100644 --- a/primitives/crypto-ec-utils/src/lib.rs +++ b/primitives/crypto-ec-utils/src/lib.rs @@ -1,3 +1,24 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! The main elliptic curves trait, allowing Substrate to call into host functions +//! for operations on elliptic curves. + +#![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] #[cfg(feature = "ec-utils-experimental")] diff --git a/primitives/crypto-ec-utils/src/utils.rs b/primitives/crypto-ec-utils/src/utils.rs index fba8d240e0f94..5560d59211605 100644 --- a/primitives/crypto-ec-utils/src/utils.rs +++ b/primitives/crypto-ec-utils/src/utils.rs @@ -1,3 +1,22 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! The generic executions of the operations on arkworks elliptic curves +//! which get instantiatied by the corresponding curves. use ark_ec::{ pairing::{MillerLoopOutput, Pairing, PairingOutput}, short_weierstrass, From 6f23caea3cc2689a7b9766e2a74fe39d33bdf2f4 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Wed, 24 May 2023 16:07:48 +0200 Subject: [PATCH 346/364] cargo update --- Cargo.lock | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 5c71fe5c5d71b..334074939cb7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11112,6 +11112,33 @@ dependencies = [ "syn 2.0.16", ] +[[package]] +name = "sp-crypto-ec-utils" +version = "0.4.0" +dependencies = [ + "ark-algebra-test-templates", + "ark-bls12-377", + "ark-bls12-381", + "ark-bw6-761", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-scale", + "ark-serialize", + "ark-std", + "parity-scale-codec", + "sp-ark-bls12-377", + "sp-ark-bls12-381", + "sp-ark-bw6-761", + "sp-ark-ed-on-bls12-377", + "sp-ark-ed-on-bls12-381-bandersnatch", + "sp-ark-models", + "sp-io", + "sp-runtime-interface", + "sp-std", +] + [[package]] name = "sp-database" version = "4.0.0-dev" @@ -13314,7 +13341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.21.0", + "base64 0.21.1", "bincode", "directories-next", "file-per-thread-logger", From eba8b32f842c9f22e3249eb722e448104aeb625a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 30 May 2023 16:53:55 +0200 Subject: [PATCH 347/364] cargo update, bump arkworks, codec versions --- Cargo.lock | 228 +++++++++++++------------- primitives/crypto-ec-utils/Cargo.toml | 12 +- 2 files changed, 117 insertions(+), 123 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 303f27a1307f1..21dec6d54ea08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,7 +28,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "aead" sp-ec-crypto-utils from iosp-ec-crypto-utils from io +name = "aead" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" @@ -179,6 +179,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -671,7 +677,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -693,7 +699,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -704,7 +710,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -784,9 +790,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1e31e207a6b8fb791a38ea3105e6cb541f55e4d029902d3039a4ad07cc4105" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" @@ -845,13 +851,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.5", + "prettyplease 0.2.6", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -1186,13 +1192,13 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "fdbc37d37da9e5bce8173f3a41b71d9bf3c674deebbaceacd0ebdabde76efb03" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "time 0.1.45", "wasm-bindgen", @@ -1341,7 +1347,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -1377,9 +1383,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "6.1.4" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" dependencies = [ "strum", "strum_macros", @@ -1809,9 +1815,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "109308c20e8445959c2792e81871054c6a17e6976489a93d2769641a2ba5839c" dependencies = [ "cc", "cxxbridge-flags", @@ -1821,9 +1827,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +checksum = "daf4c6755cdf10798b97510e0e2b3edb9573032bd9379de8fffa59d68165494f" dependencies = [ "cc", "codespan-reporting", @@ -1831,24 +1837,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] name = "cxxbridge-flags" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" +checksum = "882074421238e84fe3b4c65d0081de34e5b323bf64555d3e61991f76eb64a7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "4a076022ece33e7686fb76513518e219cca4fce5750a8ae6d1ce6c0f48fd1af9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2116,7 +2122,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2149,11 +2155,11 @@ dependencies = [ "common-path", "derive-syn-parse", "lazy_static", - "prettyplease 0.2.4", + "prettyplease 0.2.6", "proc-macro2", "quote", "regex", - "syn 2.0.16", + "syn 2.0.18", "termcolor", "walkdir", ] @@ -2348,7 +2354,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2702,7 +2708,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn 2.0.16", + "syn 2.0.18", "trybuild", ] @@ -2848,7 +2854,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2859,7 +2865,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -2868,7 +2874,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3088,7 +3094,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -3711,13 +3717,14 @@ checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] name = "indicatif" -version = "0.17.3" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" +checksum = "db45317f37ef454e6519b6c3ed7d377e5f23346f0823f86e65ca36912d1d0ef8" dependencies = [ "console", + "instant", "number_prefix", - "portable-atomic 0.3.20", + "portable-atomic", "unicode-width", ] @@ -3769,9 +3776,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -4814,12 +4821,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "lru" @@ -4870,49 +4874,49 @@ dependencies = [ [[package]] name = "macro_magic" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f3703e9d296140171bbd6a6fa560e6059a35299ee3ce8c5bd646afa0c3992" +checksum = "c8e7c1b5ffe892e88b288611ccf55f9c4f4e43214aea6f7f80f0c2c53c85e68e" dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] name = "macro_magic_core" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e060da9399c1535b3f190084d7c6121bb3355b70c610110cff3f4978526f54e2" +checksum = "4e812c59de90e5d50405131c676dad7d239de39ccc975620c72d467c70138851" dependencies = [ "derive-syn-parse", "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] name = "macro_magic_core_macros" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb9865e03b9641e57448b9743915eadd0f642e41a41c4d9eaa8b5b861d887b0" +checksum = "21b1906fa06ee8c02b24595e121be94e0036cb64f9dce5e587edd1e823c87c94" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] name = "macro_magic_macros" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cf083ba5ba151ce3230a7c687cb5c890498adae59c85f3be7e8e741a6c9f65" +checksum = "49e8939ee52e99672a887d8ee13776d0f54262c058ce7e911185fed8e43e3a59" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -5068,14 +5072,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "eebffdb73fe72e917997fad08bdbf31ac50b0fa91cec93e69a0662e4264d454c" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -5602,7 +5605,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "enum-as-inner", "frame-benchmarking", "frame-benchmarking-cli", @@ -5899,9 +5902,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" [[package]] name = "oorandom" @@ -5929,9 +5932,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.87" +version = "0.9.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" dependencies = [ "cc", "libc", @@ -6405,7 +6408,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -7363,7 +7366,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -7849,7 +7852,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -7890,7 +7893,7 @@ checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -8022,15 +8025,6 @@ dependencies = [ "universal-hash 0.5.1", ] -[[package]] -name = "portable-atomic" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" -dependencies = [ - "portable-atomic 1.3.2", -] - [[package]] name = "portable-atomic" version = "1.3.2" @@ -8109,12 +8103,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617feabb81566b593beb4886fb8c1f38064169dae4dccad0e3220160c3b37203" +checksum = "3b69d39aab54d069e7f2fe8cb970493e7834601ca2d8c65fd7bbd183578080d1" dependencies = [ "proc-macro2", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -8173,14 +8167,14 @@ checksum = "70550716265d1ec349c41f70dd4f964b4fd88394efe4405f0c1da679c4799a07" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] name = "proc-macro2" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] @@ -8555,7 +8549,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -8572,9 +8566,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1a59b5d8e97dee33696bf13c5ba8ab85341c002922fba050069326b9c498974" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ "aho-corasick 1.0.1", "memchr", @@ -8835,7 +8829,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.1", + "base64 0.21.2", ] [[package]] @@ -9006,7 +9000,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -10248,7 +10242,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -10550,7 +10544,7 @@ checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -10808,7 +10802,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -11200,7 +11194,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -11244,7 +11238,7 @@ version = "6.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -11472,7 +11466,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -11708,7 +11702,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -12150,7 +12144,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -12207,9 +12201,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -12323,7 +12317,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -12454,9 +12448,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.1" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -12479,7 +12473,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -12576,9 +12570,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.9" +version = "0.19.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d964908cec0d030b812013af25a0e57fddfadb1e066ecc6681d86253129d4f" +checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" dependencies = [ "indexmap", "serde", @@ -12649,7 +12643,7 @@ checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] @@ -12959,9 +12953,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -13179,7 +13173,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", "wasm-bindgen-shared", ] @@ -13213,7 +13207,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13226,9 +13220,9 @@ checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "wasm-encoder" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77053dc709db790691d3732cfc458adc5acc881dec524965c608effdcd9c581" +checksum = "18c41dbd92eaebf3612a39be316540b8377c871cb9bde6b064af962984912881" dependencies = [ "leb128", ] @@ -13399,7 +13393,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.21.1", + "base64 0.21.2", "bincode", "directories-next", "file-per-thread-logger", @@ -13552,9 +13546,9 @@ dependencies = [ [[package]] name = "wast" -version = "58.0.0" +version = "60.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372eecae2d10a5091c2005b32377d7ecd6feecdf2c05838056d02d8b4f07c429" +checksum = "bd06cc744b536e30387e72a48fdd492105b9c938bb4f415c39c616a7a0a697ad" dependencies = [ "leb128", "memchr", @@ -13564,9 +13558,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d47446190e112ab1579ab40b3ad7e319d859d74e5134683f04e9f0747bf4173" +checksum = "5abe520f0ab205366e9ac7d3e6b2fc71de44e32a2b58f2ec871b6b575bdcea3b" dependencies = [ "wast", ] @@ -14217,7 +14211,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.16", + "syn 2.0.18", ] [[package]] diff --git a/primitives/crypto-ec-utils/Cargo.toml b/primitives/crypto-ec-utils/Cargo.toml index 2ff60ca8df854..3ea68f5711891 100644 --- a/primitives/crypto-ec-utils/Cargo.toml +++ b/primitives/crypto-ec-utils/Cargo.toml @@ -11,19 +11,19 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -ark-serialize = { version = "0.4.0", default-features = false } -ark-ff = { version = "0.4.0", default-features = false } -ark-ec = { version = "0.4.0", default-features = false } +ark-serialize = { version = "0.4.2", default-features = false } +ark-ff = { version = "0.4.2", default-features = false } +ark-ec = { version = "0.4.2", default-features = false } ark-std = { version = "0.4.0", default-features = false } ark-bls12-377 = { version = "0.4.0", features = ["curve"], default-features = false } ark-bls12-381 = { version = "0.4.0", features = ["curve"], default-features = false } ark-bw6-761 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } -sp-std = { version = "5.0.0", path = "../std", default-features = false } -codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false } +sp-std = { version = "6.0.0", path = "../std", default-features = false } +codec = { package = "parity-scale-codec", version = "3.5.0", default-features = false } ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false } -sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../runtime-interface" } +sp-runtime-interface = { version = "8.0.0", default-features = false, path = "../runtime-interface" } [dev-dependencies] sp-io = { path = "../io", default-features = false } From 9988dcc71f4560b8e1a205de44dea82117f7f747 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 1 Jun 2023 14:13:10 +0200 Subject: [PATCH 348/364] bump runtime version in sp-crypto-ec-utils --- Cargo.lock | 2 +- primitives/crypto-ec-utils/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5049ee88a8c1f..b8e7f5679f433 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5605,7 +5605,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.7", + "clap 4.3.0", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", diff --git a/primitives/crypto-ec-utils/Cargo.toml b/primitives/crypto-ec-utils/Cargo.toml index 3ea68f5711891..d1aed18b814da 100644 --- a/primitives/crypto-ec-utils/Cargo.toml +++ b/primitives/crypto-ec-utils/Cargo.toml @@ -20,10 +20,10 @@ ark-bls12-381 = { version = "0.4.0", features = ["curve"], default-features = fa ark-bw6-761 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } -sp-std = { version = "6.0.0", path = "../std", default-features = false } +sp-std = { version = "8.0.0", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.5.0", default-features = false } ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false } -sp-runtime-interface = { version = "8.0.0", default-features = false, path = "../runtime-interface" } +sp-runtime-interface = { version = "17.0.0", default-features = false, path = "../runtime-interface" } [dev-dependencies] sp-io = { path = "../io", default-features = false } From f906c5edda5e1dccab2cb1c810f9dec9102c3fc0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 1 Jun 2023 14:15:34 +0200 Subject: [PATCH 349/364] remove feature flag ec-utils-experimental --- Cargo.lock | 16 ++++++++-------- primitives/crypto-ec-utils/Cargo.toml | 1 - primitives/crypto-ec-utils/src/lib.rs | 8 -------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8e7f5679f433..84fb98db98196 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1192,9 +1192,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.25" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdbc37d37da9e5bce8173f3a41b71d9bf3c674deebbaceacd0ebdabde76efb03" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ "android-tzdata", "iana-time-zone", @@ -3002,9 +3002,9 @@ dependencies = [ [[package]] name = "fs4" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f5b6908aecca5812a4569056285e58c666588c9573ee59765bf1d3692699e2" +checksum = "7672706608ecb74ab2e055c68327ffc25ae4cac1e12349204fd5fb0f3487cce2" dependencies = [ "rustix 0.37.19", "windows-sys 0.48.0", @@ -5072,9 +5072,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebffdb73fe72e917997fad08bdbf31ac50b0fa91cec93e69a0662e4264d454c" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -8026,9 +8026,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc59d1bcc64fc5d021d67521f818db868368028108d37f0e98d74e33f68297b5" +checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794" [[package]] name = "ppv-lite86" diff --git a/primitives/crypto-ec-utils/Cargo.toml b/primitives/crypto-ec-utils/Cargo.toml index d1aed18b814da..f531f8262f78a 100644 --- a/primitives/crypto-ec-utils/Cargo.toml +++ b/primitives/crypto-ec-utils/Cargo.toml @@ -59,4 +59,3 @@ std = [ "sp-ark-ed-on-bls12-377/std", "sp-ark-ed-on-bls12-381-bandersnatch/std", ] -ec-utils-experimental = [] diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto-ec-utils/src/lib.rs index 02354c2b959e5..5bc945f6d8e91 100644 --- a/primitives/crypto-ec-utils/src/lib.rs +++ b/primitives/crypto-ec-utils/src/lib.rs @@ -21,24 +21,16 @@ #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "ec-utils-experimental")] pub mod bls12_377; -#[cfg(feature = "ec-utils-experimental")] pub mod bls12_381; -#[cfg(feature = "ec-utils-experimental")] pub mod bw6_761; -#[cfg(feature = "ec-utils-experimental")] pub mod ed_on_bls12_377; -#[cfg(feature = "ec-utils-experimental")] pub mod ed_on_bls12_381_bandersnatch; -#[cfg(feature = "ec-utils-experimental")] mod utils; -#[cfg(feature = "ec-utils-experimental")] use sp_runtime_interface::runtime_interface; /// Interfaces for working with elliptic curves related types from within the runtime. -#[cfg(feature = "ec-utils-experimental")] #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 From b7caa18d5d13290a8223620a62e94a87bba8ee9a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 1 Jun 2023 15:38:42 +0200 Subject: [PATCH 350/364] crypto-ec-utils -> crypto/ec-utils --- Cargo.toml | 2 +- .../{crypto-ec-utils => crypto/ec-utils}/Cargo.toml | 6 +++--- .../ec-utils}/src/bls12_377.rs | 0 .../ec-utils}/src/bls12_381.rs | 0 .../ec-utils}/src/bw6_761.rs | 0 .../ec-utils}/src/ed_on_bls12_377.rs | 0 .../ec-utils}/src/ed_on_bls12_381_bandersnatch.rs | 0 .../{crypto-ec-utils => crypto/ec-utils}/src/lib.rs | 0 .../src/tests/g1_compressed_valid_test_vectors.dat | Bin .../tests/g1_uncompressed_valid_test_vectors.dat | Bin .../src/tests/g2_compressed_valid_test_vectors.dat | Bin .../tests/g2_uncompressed_valid_test_vectors.dat | Bin .../ec-utils}/src/utils.rs | 0 13 files changed, 4 insertions(+), 4 deletions(-) rename primitives/{crypto-ec-utils => crypto/ec-utils}/Cargo.toml (92%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/bls12_377.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/bls12_381.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/bw6_761.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/ed_on_bls12_377.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/ed_on_bls12_381_bandersnatch.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/lib.rs (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/tests/g1_compressed_valid_test_vectors.dat (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/tests/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/tests/g2_compressed_valid_test_vectors.dat (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/tests/g2_uncompressed_valid_test_vectors.dat (100%) rename primitives/{crypto-ec-utils => crypto/ec-utils}/src/utils.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 0d932f72d2574..26f2a842111e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -199,7 +199,7 @@ members = [ "primitives/core", "primitives/core/hashing", "primitives/core/hashing/proc-macro", - "primitives/crypto-ec-utils", + "primitives/crypto/ec-utils", "primitives/database", "primitives/debug-derive", "primitives/externalities", diff --git a/primitives/crypto-ec-utils/Cargo.toml b/primitives/crypto/ec-utils/Cargo.toml similarity index 92% rename from primitives/crypto-ec-utils/Cargo.toml rename to primitives/crypto/ec-utils/Cargo.toml index f531f8262f78a..e8546254031ea 100644 --- a/primitives/crypto-ec-utils/Cargo.toml +++ b/primitives/crypto/ec-utils/Cargo.toml @@ -20,13 +20,13 @@ ark-bls12-381 = { version = "0.4.0", features = ["curve"], default-features = fa ark-bw6-761 = { version = "0.4.0", default-features = false } ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false } ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } -sp-std = { version = "8.0.0", path = "../std", default-features = false } +sp-std = { version = "8.0.0", path = "../../std", default-features = false } codec = { package = "parity-scale-codec", version = "3.5.0", default-features = false } ark-scale = { version = "0.0.3", features = ["hazmat"], default-features = false } -sp-runtime-interface = { version = "17.0.0", default-features = false, path = "../runtime-interface" } +sp-runtime-interface = { version = "17.0.0", default-features = false, path = "../../runtime-interface" } [dev-dependencies] -sp-io = { path = "../io", default-features = false } +sp-io = { path = "../../io", default-features = false } ark-algebra-test-templates = { version = "0.4.2", default-features = false } sp-ark-models = { version = "0.4.0-beta", default-features = false } sp-ark-bls12-377 = { version = "0.4.0-beta", default-features = false } diff --git a/primitives/crypto-ec-utils/src/bls12_377.rs b/primitives/crypto/ec-utils/src/bls12_377.rs similarity index 100% rename from primitives/crypto-ec-utils/src/bls12_377.rs rename to primitives/crypto/ec-utils/src/bls12_377.rs diff --git a/primitives/crypto-ec-utils/src/bls12_381.rs b/primitives/crypto/ec-utils/src/bls12_381.rs similarity index 100% rename from primitives/crypto-ec-utils/src/bls12_381.rs rename to primitives/crypto/ec-utils/src/bls12_381.rs diff --git a/primitives/crypto-ec-utils/src/bw6_761.rs b/primitives/crypto/ec-utils/src/bw6_761.rs similarity index 100% rename from primitives/crypto-ec-utils/src/bw6_761.rs rename to primitives/crypto/ec-utils/src/bw6_761.rs diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs similarity index 100% rename from primitives/crypto-ec-utils/src/ed_on_bls12_377.rs rename to primitives/crypto/ec-utils/src/ed_on_bls12_377.rs diff --git a/primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs similarity index 100% rename from primitives/crypto-ec-utils/src/ed_on_bls12_381_bandersnatch.rs rename to primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs diff --git a/primitives/crypto-ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs similarity index 100% rename from primitives/crypto-ec-utils/src/lib.rs rename to primitives/crypto/ec-utils/src/lib.rs diff --git a/primitives/crypto-ec-utils/src/tests/g1_compressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/tests/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto-ec-utils/src/tests/g1_compressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/tests/g1_compressed_valid_test_vectors.dat diff --git a/primitives/crypto-ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto-ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/crypto-ec-utils/src/tests/g2_compressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/tests/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto-ec-utils/src/tests/g2_compressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/tests/g2_compressed_valid_test_vectors.dat diff --git a/primitives/crypto-ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto-ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat diff --git a/primitives/crypto-ec-utils/src/utils.rs b/primitives/crypto/ec-utils/src/utils.rs similarity index 100% rename from primitives/crypto-ec-utils/src/utils.rs rename to primitives/crypto/ec-utils/src/utils.rs From 99dd1d24c73bc9ee2f2e2a7527c60f638e0ee68e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 1 Jun 2023 15:41:01 +0200 Subject: [PATCH 351/364] tests/ -> test-data/ --- primitives/crypto/ec-utils/src/bls12_381.rs | 12 +++++++----- .../g1_compressed_valid_test_vectors.dat | Bin .../g1_uncompressed_valid_test_vectors.dat | Bin .../g2_compressed_valid_test_vectors.dat | Bin .../g2_uncompressed_valid_test_vectors.dat | Bin 5 files changed, 7 insertions(+), 5 deletions(-) rename primitives/crypto/ec-utils/src/{tests => test-data}/g1_compressed_valid_test_vectors.dat (100%) rename primitives/crypto/ec-utils/src/{tests => test-data}/g1_uncompressed_valid_test_vectors.dat (100%) rename primitives/crypto/ec-utils/src/{tests => test-data}/g2_compressed_valid_test_vectors.dat (100%) rename primitives/crypto/ec-utils/src/{tests => test-data}/g2_uncompressed_valid_test_vectors.dat (100%) diff --git a/primitives/crypto/ec-utils/src/bls12_381.rs b/primitives/crypto/ec-utils/src/bls12_381.rs index 04f247f377605..6c707aa581458 100644 --- a/primitives/crypto/ec-utils/src/bls12_381.rs +++ b/primitives/crypto/ec-utils/src/bls12_381.rs @@ -160,7 +160,7 @@ mod tests { } } - // Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/tests/mod.rs + // Test vectors and macro adapted from https://github.com/zkcrypto/bls12_381/blob/e224ad4ea1babfc582ccd751c2bf128611d10936/src/test-data/mod.rs macro_rules! test_vectors { ($projective:ident, $affine:ident, $compress:expr, $expected:ident) => { let mut e = $projective::zero(); @@ -193,25 +193,27 @@ mod tests { #[test] fn g1_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("tests/g1_compressed_valid_test_vectors.dat"); + let bytes: &'static [u8] = include_bytes!("test-data/g1_compressed_valid_test_vectors.dat"); test_vectors!(G1Projective, G1Affine, Compress::Yes, bytes); } #[test] fn g1_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("tests/g1_uncompressed_valid_test_vectors.dat"); + let bytes: &'static [u8] = + include_bytes!("test-data/g1_uncompressed_valid_test_vectors.dat"); test_vectors!(G1Projective, G1Affine, Compress::No, bytes); } #[test] fn g2_compressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("tests/g2_compressed_valid_test_vectors.dat"); + let bytes: &'static [u8] = include_bytes!("test-data/g2_compressed_valid_test_vectors.dat"); test_vectors!(G2Projective, G2Affine, Compress::Yes, bytes); } #[test] fn g2_uncompressed_valid_test_vectors() { - let bytes: &'static [u8] = include_bytes!("tests/g2_uncompressed_valid_test_vectors.dat"); + let bytes: &'static [u8] = + include_bytes!("test-data/g2_uncompressed_valid_test_vectors.dat"); test_vectors!(G2Projective, G2Affine, Compress::No, bytes); } } diff --git a/primitives/crypto/ec-utils/src/tests/g1_compressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/test-data/g1_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto/ec-utils/src/tests/g1_compressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/test-data/g1_compressed_valid_test_vectors.dat diff --git a/primitives/crypto/ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/test-data/g1_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto/ec-utils/src/tests/g1_uncompressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/test-data/g1_uncompressed_valid_test_vectors.dat diff --git a/primitives/crypto/ec-utils/src/tests/g2_compressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/test-data/g2_compressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto/ec-utils/src/tests/g2_compressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/test-data/g2_compressed_valid_test_vectors.dat diff --git a/primitives/crypto/ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat b/primitives/crypto/ec-utils/src/test-data/g2_uncompressed_valid_test_vectors.dat similarity index 100% rename from primitives/crypto/ec-utils/src/tests/g2_uncompressed_valid_test_vectors.dat rename to primitives/crypto/ec-utils/src/test-data/g2_uncompressed_valid_test_vectors.dat From 352124218ca859235fc0b8f5799304edb7eb4bf9 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 07:27:14 +0200 Subject: [PATCH 352/364] update doc comments for signatures --- Cargo.lock | 8 +- primitives/crypto/ec-utils/src/bls12_377.rs | 22 +++ .../crypto/ec-utils/src/ed_on_bls12_377.rs | 12 +- .../src/ed_on_bls12_381_bandersnatch.rs | 24 +-- primitives/crypto/ec-utils/src/lib.rs | 183 +++++++++++++++--- 5 files changed, 203 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 84fb98db98196..91317194585f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2139,18 +2139,18 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "docify" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18b972b74c30cbe838fc6a07665132ff94f257350e26fd01d80bc59ee7fcf129" +checksum = "15aa210b350ff62db3149ac5d0b2a0287c01ee91354e16290de344082b2b3ff6" dependencies = [ "docify_macros", ] [[package]] name = "docify_macros" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c93004d1011191c56df9e853dca42f2012e7488638bcd5078935f5ce43e06cf3" +checksum = "9bf3504ed030133996c59a9954669a7a4f869f93a7e74389e16149843db16f57" dependencies = [ "common-path", "derive-syn-parse", diff --git a/primitives/crypto/ec-utils/src/bls12_377.rs b/primitives/crypto/ec-utils/src/bls12_377.rs index 9230479b3bec5..cf755f49a2dbc 100644 --- a/primitives/crypto/ec-utils/src/bls12_377.rs +++ b/primitives/crypto/ec-utils/src/bls12_377.rs @@ -26,35 +26,57 @@ use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; /// Compute a multi miller loop through arkworks +/// Receives encoded: +/// a: ArkScale as Pairing>::G1Prepared>> +/// b: ArkScale as Pairing>::G2Prepared>> +/// Returns encoded: MillerLoopOutput> pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { multi_miller_loop_generic::(a, b) } /// Compute a final exponentiation through arkworks +/// Receives encoded: MillerLoopOutput> +/// Returns encoded:ArkScale>> pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } /// Compute a multi scalar multiplication for short_weierstrass through /// arkworks on G1. +/// Receives encoded: +/// bases: ArkScale<&[G1Affine]> +/// scalars: ArkScale<&[::ScalarField]> +/// Returns encoded: ArkScaleProjective pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } /// Compute a multi scalar multiplication for short_weierstrass through /// arkworks on G2. +/// Receives encoded: +/// bases: ArkScale<&[G2Affine]> +/// scalars: ArkScale<&[::ScalarField]> +/// Returns encoded: ArkScaleProjective pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } /// Compute a projective scalar multiplication for short_weierstrass /// through arkworks on G1. +/// Receives encoded: +/// base: ArkScaleProjective +/// scalar: ArkScale<&[u64]> +/// Returns encoded: ArkScaleProjective pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } /// Compute a projective scalar multiplication for short_weierstrass /// through arkworks on G2. +/// Receives encoded: +/// base: ArkScaleProjective +/// scalar: ArkScale<&[u64]> +/// Returns encoded: ArkScaleProjective pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } diff --git a/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs b/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs index fa2819b41e3c5..84a86286180f7 100644 --- a/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs +++ b/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs @@ -22,18 +22,18 @@ use crate::utils::{msm_te_generic, mul_projective_te_generic}; use ark_ed_on_bls12_377::EdwardsConfig; use sp_std::vec::Vec; -/// Compute a projective scalar multiplication for twisted_edwards -/// through arkworks. -pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - mul_projective_te_generic::(base, scalar) -} - /// Compute a multi scalar mulitplication for twisted_edwards through /// arkworks. pub fn msm(bases: Vec, scalars: Vec) -> Result, ()> { msm_te_generic::(bases, scalars) } +/// Compute a projective scalar multiplication for twisted_edwards +/// through arkworks. +pub fn mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + mul_projective_te_generic::(base, scalar) +} + #[cfg(test)] mod tests { use super::*; diff --git a/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs index 890b579ad02de..72b68c3b47182 100644 --- a/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -25,6 +25,18 @@ use crate::utils::{ use ark_ed_on_bls12_381_bandersnatch::BandersnatchConfig; use sp_std::vec::Vec; +/// Compute a multi scalar multiplication for short_weierstrass through +/// arkworks. +pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { + msm_sw_generic::(bases, scalars) +} + +/// Compute a multi scalar mulitplication for twisted_edwards through +/// arkworks. +pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { + msm_te_generic::(bases, scalars) +} + /// Compute a projective scalar multiplication for short_weierstrass /// through arkworks. pub fn sw_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { @@ -37,18 +49,6 @@ pub fn te_mul_projective(base: Vec, scalar: Vec) -> Result, ()> mul_projective_te_generic::(base, scalar) } -/// Compute a multi scalar mulitplication for twisted_edwards through -/// arkworks. -pub fn te_msm(bases: Vec, scalars: Vec) -> Result, ()> { - msm_te_generic::(bases, scalars) -} - -/// Compute a multi scalar multiplication for short_weierstrass through -/// arkworks. -pub fn sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - msm_sw_generic::(bases, scalars) -} - #[cfg(test)] mod tests { use super::*; diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 5bc945f6d8e91..a16b53eaef47b 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -31,107 +31,231 @@ mod utils; use sp_runtime_interface::runtime_interface; /// Interfaces for working with elliptic curves related types from within the runtime. +/// All type are (de-)serialized through the wrapper types from the ark-scale trait. #[runtime_interface] pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 + /// Given: + /// ark_bls12_381::Bls12Config; + /// Receives encoded: + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: MillerLoopOutput> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 + /// Given: + /// ark_bls12_381::Bls12Config; + /// Receives encoded: MillerLoopOutput> + /// Returns encoded:ArkScale>> fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { bls12_381::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_381 + /// Given: + /// ark_bls12_381::G1Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bls12_381::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_381 + /// Given: + /// ark_bls12_381::G2Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bls12_381::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_381 + /// Receives encoded: + /// Given: + /// ark_bls12_381::{G1Affine, G1Projective, SWCurveConfig}; + /// bases: ArkScale<&[G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 + /// Receives encoded: + /// Given: + /// ark_bls12_381::{G2Affine, G2Projective, SWCurveConfig}; + /// bases: ArkScale<&[G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop for bls12_377 + /// Receives encoded: + /// Given: + /// ark_bls12_377::Bls12Config; + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: MillerLoopOutput> fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 + /// Given: + /// ark_bls12_377::Bls12Config; + /// Receives encoded: MillerLoopOutput> + /// Returns encoded:ArkScale>> fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { bls12_377::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_377 + /// Given: + /// ark_bls12_377::G1Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bls12_377::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_377 + /// through arkworks on G2. + /// Given: + /// ark_bls12_377::G2Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bls12_377::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_377 + /// Given: + /// ark_bls12_377::{G1Affine, G1Projective, SWCurveConfig}; + /// Receives encoded: + /// bases: ArkScale<&[G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 + /// Given: + /// ark_bls12_377::{G2Affine, G2Projective, SWCurveConfig}; + /// Receives encoded: + /// bases: ArkScale<&[G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g2(bases, scalars) } /// Compute a multi Miller loop on bw6_761 + /// Given: + /// ark_bw6_761::{G1Prepared, G2Prepared, Bls12Config}; + /// Receives encoded: + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: MillerLoopOutput> fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 + /// Given: + /// ark_bw6_761::BW6Config; + /// Receives encoded: MillerLoopOutput> + /// Returns encoded:ArkScale>> fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { bw6_761::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bw6_761 + /// Given: + /// ark_bw6_761::G1Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bw6_761::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bw6_761 + /// Given: + /// ark_bw6_761::G2Projective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bw6_761::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bw6_761 + /// Given: + /// ark_bw6_761::{G1Affine, G1Projective, SWCurveConfig}; + /// Receives encoded: + /// bases: ArkScale<&[G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 + /// Given: + /// ark_bw6_761::{G2Affine, G2Projective, SWCurveConfig}; + /// Receives encoded: + /// bases: ArkScale<&[G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g2(bases, bigints) } - /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_te_mul_projective( - base: Vec, - scalar: Vec, - ) -> Result, ()> { - ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) + /// Compute projective multiplication on ed_on_bls12_377 + /// Given: + /// ark_ed_on_bls12_377::TEProjective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective + fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { + ed_on_bls12_377::mul_projective(base, scalar) + } + + /// Compute msm on ed_on_bls12_377 + /// Given: + /// ark_ed_on_bls12_377::{TEAffine, TEProjective}; + /// Receives encoded: + /// bases: ArkScale<&[TEAffine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective + fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { + ed_on_bls12_377::msm(bases, scalars) } /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch + /// Given: + /// ark_ed_on_bls12_381_bandersnatch::SWProjective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_mul_projective( base: Vec, scalar: Vec, @@ -139,15 +263,27 @@ pub trait EllipticCurves { ed_on_bls12_381_bandersnatch::sw_mul_projective(base, scalar) } - /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_bandersnatch_te_msm( - bases: Vec, - scalars: Vec, + /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch + /// Given: + /// ark_ed_on_bls12_381_bandersnatch::TEProjective; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective + fn ed_on_bls12_381_bandersnatch_te_mul_projective( + base: Vec, + scalar: Vec, ) -> Result, ()> { - ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) + ed_on_bls12_381_bandersnatch::te_mul_projective(base, scalar) } /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch + /// Given: + /// ed_on_bls12_381_bandersnatch::{SWAffine, TEProjective}; + /// Receives encoded: + /// bases: ArkScale<&[SWAffine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, @@ -155,18 +291,17 @@ pub trait EllipticCurves { ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) } - /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch - fn ed_on_bls12_381_sw_msm(bases: Vec, scalars: Vec) -> Result, ()> { - ed_on_bls12_381_bandersnatch::sw_msm(bases, scalars) - } - - /// Compute projective multiplication on ed_on_bls12_377 - fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { - ed_on_bls12_377::mul_projective(base, scalar) - } - - /// Compute msm on ed_on_bls12_377 - fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - ed_on_bls12_377::msm(bases, scalars) + /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch + /// Given: + /// ed_on_bls12_381_bandersnatch::{TEProjective}; + /// Receives encoded: + /// base: ArkScaleProjective + /// scalar: ArkScale<&[u64]> + /// Returns encoded: ArkScaleProjective + fn ed_on_bls12_381_bandersnatch_te_msm( + bases: Vec, + scalars: Vec, + ) -> Result, ()> { + ed_on_bls12_381_bandersnatch::te_msm(bases, scalars) } } From 2d8334ff8fa2519bae21631fc0d478e97ebfadf5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 07:29:58 +0200 Subject: [PATCH 353/364] update comments --- primitives/crypto/ec-utils/src/bls12_377.rs | 22 ---- primitives/crypto/ec-utils/src/lib.rs | 112 ++++++++++---------- 2 files changed, 56 insertions(+), 78 deletions(-) diff --git a/primitives/crypto/ec-utils/src/bls12_377.rs b/primitives/crypto/ec-utils/src/bls12_377.rs index cf755f49a2dbc..9230479b3bec5 100644 --- a/primitives/crypto/ec-utils/src/bls12_377.rs +++ b/primitives/crypto/ec-utils/src/bls12_377.rs @@ -26,57 +26,35 @@ use ark_bls12_377::{g1, g2, Bls12_377}; use sp_std::vec::Vec; /// Compute a multi miller loop through arkworks -/// Receives encoded: -/// a: ArkScale as Pairing>::G1Prepared>> -/// b: ArkScale as Pairing>::G2Prepared>> -/// Returns encoded: MillerLoopOutput> pub fn multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { multi_miller_loop_generic::(a, b) } /// Compute a final exponentiation through arkworks -/// Receives encoded: MillerLoopOutput> -/// Returns encoded:ArkScale>> pub fn final_exponentiation(target: Vec) -> Result, ()> { final_exponentiation_generic::(target) } /// Compute a multi scalar multiplication for short_weierstrass through /// arkworks on G1. -/// Receives encoded: -/// bases: ArkScale<&[G1Affine]> -/// scalars: ArkScale<&[::ScalarField]> -/// Returns encoded: ArkScaleProjective pub fn msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } /// Compute a multi scalar multiplication for short_weierstrass through /// arkworks on G2. -/// Receives encoded: -/// bases: ArkScale<&[G2Affine]> -/// scalars: ArkScale<&[::ScalarField]> -/// Returns encoded: ArkScaleProjective pub fn msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { msm_sw_generic::(bases, scalars) } /// Compute a projective scalar multiplication for short_weierstrass /// through arkworks on G1. -/// Receives encoded: -/// base: ArkScaleProjective -/// scalar: ArkScale<&[u64]> -/// Returns encoded: ArkScaleProjective pub fn mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } /// Compute a projective scalar multiplication for short_weierstrass /// through arkworks on G2. -/// Receives encoded: -/// base: ArkScaleProjective -/// scalar: ArkScale<&[u64]> -/// Returns encoded: ArkScaleProjective pub fn mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { mul_projective_generic::(base, scalar) } diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index a16b53eaef47b..c8786dff3bf68 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -34,133 +34,133 @@ use sp_runtime_interface::runtime_interface; /// All type are (de-)serialized through the wrapper types from the ark-scale trait. #[runtime_interface] pub trait EllipticCurves { - /// Compute a multi Miller loop on bls12_381 - /// Given: - /// ark_bls12_381::Bls12Config; + /// Compute a multi Miller loop for bls12_377 /// Receives encoded: + /// Given: + /// ark_bls12_377::Bls12Config; /// a: ArkScale as Pairing>::G1Prepared>> /// b: ArkScale as Pairing>::G2Prepared>> /// Returns encoded: MillerLoopOutput> - fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - bls12_381::multi_miller_loop(a, b) + fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + bls12_377::multi_miller_loop(a, b) } - /// Compute a final exponentiation on bls12_381 + /// Compute a final exponentiation for bls12_377 /// Given: - /// ark_bls12_381::Bls12Config; + /// ark_bls12_377::Bls12Config; /// Receives encoded: MillerLoopOutput> /// Returns encoded:ArkScale>> - fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { - bls12_381::final_exponentiation(f12) + fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { + bls12_377::final_exponentiation(f12) } - /// Compute a projective multiplication on G1 for bls12_381 + /// Compute a projective multiplication on G1 for bls12_377 /// Given: - /// ark_bls12_381::G1Projective; + /// ark_bls12_377::G1Projective; /// Receives encoded: /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> /// Returns encoded: ArkScaleProjective - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - bls12_381::mul_projective_g1(base, scalar) + fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + bls12_377::mul_projective_g1(base, scalar) } - /// Compute a projective multiplication on G2 for bls12_381 + /// Compute a projective multiplication on G2 for bls12_377 + /// through arkworks on G2. /// Given: - /// ark_bls12_381::G2Projective; + /// ark_bls12_377::G2Projective; /// Receives encoded: /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> /// Returns encoded: ArkScaleProjective - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - bls12_381::mul_projective_g2(base, scalar) + fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + bls12_377::mul_projective_g2(base, scalar) } - /// Compute a msm on G1 for bls12_381 - /// Receives encoded: + /// Compute a msm on G1 for bls12_377 /// Given: - /// ark_bls12_381::{G1Affine, G1Projective, SWCurveConfig}; + /// ark_bls12_377::{G1Affine, G1Projective, SWCurveConfig}; + /// Receives encoded: /// bases: ArkScale<&[G1Affine]> /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective - fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - bls12_381::msm_g1(bases, scalars) + fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_377::msm_g1(bases, scalars) } - /// Compute a msm on G2 for bls12_381 - /// Receives encoded: + /// Compute a msm on G2 for bls12_377 /// Given: - /// ark_bls12_381::{G2Affine, G2Projective, SWCurveConfig}; + /// ark_bls12_377::{G2Affine, G2Projective, SWCurveConfig}; + /// Receives encoded: /// bases: ArkScale<&[G2Affine]> /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective - fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - bls12_381::msm_g2(bases, scalars) + fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_377::msm_g2(bases, scalars) } - - /// Compute a multi Miller loop for bls12_377 - /// Receives encoded: + + /// Compute a multi Miller loop on bls12_381 /// Given: - /// ark_bls12_377::Bls12Config; + /// ark_bls12_381::Bls12Config; + /// Receives encoded: /// a: ArkScale as Pairing>::G1Prepared>> /// b: ArkScale as Pairing>::G2Prepared>> /// Returns encoded: MillerLoopOutput> - fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { - bls12_377::multi_miller_loop(a, b) + fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { + bls12_381::multi_miller_loop(a, b) } - /// Compute a final exponentiation for bls12_377 + /// Compute a final exponentiation on bls12_381 /// Given: - /// ark_bls12_377::Bls12Config; + /// ark_bls12_381::Bls12Config; /// Receives encoded: MillerLoopOutput> /// Returns encoded:ArkScale>> - fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { - bls12_377::final_exponentiation(f12) + fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { + bls12_381::final_exponentiation(f12) } - /// Compute a projective multiplication on G1 for bls12_377 + /// Compute a projective multiplication on G1 for bls12_381 /// Given: - /// ark_bls12_377::G1Projective; + /// ark_bls12_381::G1Projective; /// Receives encoded: /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> /// Returns encoded: ArkScaleProjective - fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { - bls12_377::mul_projective_g1(base, scalar) + fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { + bls12_381::mul_projective_g1(base, scalar) } - /// Compute a projective multiplication on G2 for bls12_377 - /// through arkworks on G2. + /// Compute a projective multiplication on G2 for bls12_381 /// Given: - /// ark_bls12_377::G2Projective; + /// ark_bls12_381::G2Projective; /// Receives encoded: /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> /// Returns encoded: ArkScaleProjective - fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { - bls12_377::mul_projective_g2(base, scalar) + fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { + bls12_381::mul_projective_g2(base, scalar) } - /// Compute a msm on G1 for bls12_377 - /// Given: - /// ark_bls12_377::{G1Affine, G1Projective, SWCurveConfig}; + /// Compute a msm on G1 for bls12_381 /// Receives encoded: + /// Given: + /// ark_bls12_381::{G1Affine, G1Projective, SWCurveConfig}; /// bases: ArkScale<&[G1Affine]> /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective - fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { - bls12_377::msm_g1(bases, scalars) + fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_381::msm_g1(bases, scalars) } - /// Compute a msm on G2 for bls12_377 - /// Given: - /// ark_bls12_377::{G2Affine, G2Projective, SWCurveConfig}; + /// Compute a msm on G2 for bls12_381 /// Receives encoded: + /// Given: + /// ark_bls12_381::{G2Affine, G2Projective, SWCurveConfig}; /// bases: ArkScale<&[G2Affine]> /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective - fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { - bls12_377::msm_g2(bases, scalars) + fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { + bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop on bw6_761 From a0b375c60373a44fb28fab22e05ae49757943164 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 11:32:22 +0200 Subject: [PATCH 354/364] update doc comments for signatures --- primitives/crypto/ec-utils/src/lib.rs | 176 ++++++++++---------------- 1 file changed, 65 insertions(+), 111 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index c8786dff3bf68..830e4c9ac6e43 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -31,231 +31,190 @@ mod utils; use sp_runtime_interface::runtime_interface; /// Interfaces for working with elliptic curves related types from within the runtime. -/// All type are (de-)serialized through the wrapper types from the ark-scale trait. +/// All type are (de-)serialized through the wrapper types from the ark-scale trait, +/// with ark_scale::{ArkScale, ArkScaleProjective}; #[runtime_interface] pub trait EllipticCurves { - /// Compute a multi Miller loop for bls12_377 + /// Compute a multi Miller loop for bls12_37 /// Receives encoded: - /// Given: - /// ark_bls12_377::Bls12Config; - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: MillerLoopOutput> + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: ArkScale>> fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_377::multi_miller_loop(a, b) } /// Compute a final exponentiation for bls12_377 - /// Given: - /// ark_bls12_377::Bls12Config; - /// Receives encoded: MillerLoopOutput> - /// Returns encoded:ArkScale>> + /// Receives encoded: ArkScale> + /// Returns encoded: ArkScale>> fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { bls12_377::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_377 - /// Given: - /// ark_bls12_377::G1Projective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bls12_377_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bls12_377::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_377 - /// through arkworks on G2. - /// Given: - /// ark_bls12_377::G2Projective; + /// through arkworks on G2 /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bls12_377_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bls12_377::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_377 - /// Given: - /// ark_bls12_377::{G1Affine, G1Projective, SWCurveConfig}; /// Receives encoded: - /// bases: ArkScale<&[G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bls12_377::G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_377 - /// Given: - /// ark_bls12_377::{G2Affine, G2Projective, SWCurveConfig}; /// Receives encoded: - /// bases: ArkScale<&[G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bls12_377::G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g2(bases, scalars) } - + /// Compute a multi Miller loop on bls12_381 - /// Given: - /// ark_bls12_381::Bls12Config; /// Receives encoded: - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: MillerLoopOutput> + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: MillerLoopOutput> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - /// Given: - /// ark_bls12_381::Bls12Config; - /// Receives encoded: MillerLoopOutput> - /// Returns encoded:ArkScale>> + /// Receives encoded: MillerLoopOutput> + /// Returns encoded:ArkScale>> fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { bls12_381::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bls12_381 - /// Given: - /// ark_bls12_381::G1Projective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bls12_381::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bls12_381 - /// Given: - /// ark_bls12_381::G2Projective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bls12_381::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bls12_381 /// Receives encoded: - /// Given: - /// ark_bls12_381::{G1Affine, G1Projective, SWCurveConfig}; - /// bases: ArkScale<&[G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bls12_381::G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) } /// Compute a msm on G2 for bls12_381 /// Receives encoded: - /// Given: - /// ark_bls12_381::{G2Affine, G2Projective, SWCurveConfig}; - /// bases: ArkScale<&[G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bls12_381::G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) } /// Compute a multi Miller loop on bw6_761 - /// Given: - /// ark_bw6_761::{G1Prepared, G2Prepared, Bls12Config}; /// Receives encoded: - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: MillerLoopOutput> + /// a: ArkScale as Pairing>::G1Prepared>> + /// b: ArkScale as Pairing>::G2Prepared>> + /// Returns encoded: MillerLoopOutput> fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - /// Given: - /// ark_bw6_761::BW6Config; - /// Receives encoded: MillerLoopOutput> - /// Returns encoded:ArkScale>> + /// Receives encoded: MillerLoopOutput> + /// Returns encoded:ArkScale>> fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { bw6_761::final_exponentiation(f12) } /// Compute a projective multiplication on G1 for bw6_761 - /// Given: - /// ark_bw6_761::G1Projective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bw6_761_mul_projective_g1(base: Vec, scalar: Vec) -> Result, ()> { bw6_761::mul_projective_g1(base, scalar) } /// Compute a projective multiplication on G2 for bw6_761 - /// Given: - /// ark_bw6_761::G2Projective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn bw6_761_mul_projective_g2(base: Vec, scalar: Vec) -> Result, ()> { bw6_761::mul_projective_g2(base, scalar) } /// Compute a msm on G1 for bw6_761 - /// Given: - /// ark_bw6_761::{G1Affine, G1Projective, SWCurveConfig}; /// Receives encoded: - /// bases: ArkScale<&[G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bw6_761::G1Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g1(bases, bigints) } /// Compute a msm on G2 for bw6_761 - /// Given: - /// ark_bw6_761::{G2Affine, G2Projective, SWCurveConfig}; /// Receives encoded: - /// bases: ArkScale<&[G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_bw6_761::G2Affine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g2(bases, bigints) } /// Compute projective multiplication on ed_on_bls12_377 - /// Given: - /// ark_ed_on_bls12_377::TEProjective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_377_mul_projective(base: Vec, scalar: Vec) -> Result, ()> { ed_on_bls12_377::mul_projective(base, scalar) } /// Compute msm on ed_on_bls12_377 - /// Given: - /// ark_ed_on_bls12_377::{TEAffine, TEProjective}; /// Receives encoded: - /// bases: ArkScale<&[TEAffine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ark_ed_on_bls12_377::EdwardsAffine]> + /// scalars: ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { ed_on_bls12_377::msm(bases, scalars) } /// Compute short weierstrass projective multiplication on ed_on_bls12_381_bandersnatch - /// Given: - /// ark_ed_on_bls12_381_bandersnatch::SWProjective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_mul_projective( base: Vec, scalar: Vec, @@ -264,12 +223,10 @@ pub trait EllipticCurves { } /// Compute twisted edwards projective multiplication on ed_on_bls12_381_bandersnatch - /// Given: - /// ark_ed_on_bls12_381_bandersnatch::TEProjective; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_mul_projective( base: Vec, scalar: Vec, @@ -278,12 +235,11 @@ pub trait EllipticCurves { } /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch - /// Given: - /// ed_on_bls12_381_bandersnatch::{SWAffine, TEProjective}; /// Receives encoded: - /// bases: ArkScale<&[SWAffine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// bases: ArkScale<&[ed_on_bls12_381_bandersnatch::SWAffine]> + /// scalars: ArkScale<&[::ScalarField]> Returns encoded: + /// ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, @@ -292,12 +248,10 @@ pub trait EllipticCurves { } /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch - /// Given: - /// ed_on_bls12_381_bandersnatch::{TEProjective}; /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_msm( bases: Vec, scalars: Vec, From 3e9930016b500c171d9ced8928c25bf25c4efdf3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 12:07:55 +0200 Subject: [PATCH 355/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 830e4c9ac6e43..1c5118b142886 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -92,13 +92,13 @@ pub trait EllipticCurves { /// Receives encoded: /// a: ArkScale as Pairing>::G1Prepared>> /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: MillerLoopOutput> + /// Returns encoded: ArkScale> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) } /// Compute a final exponentiation on bls12_381 - /// Receives encoded: MillerLoopOutput> + /// Receives encoded: ArkScale>> /// Returns encoded:ArkScale>> fn bls12_381_final_exponentiation(f12: Vec) -> Result, ()> { bls12_381::final_exponentiation(f12) @@ -144,14 +144,14 @@ pub trait EllipticCurves { /// Receives encoded: /// a: ArkScale as Pairing>::G1Prepared>> /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: MillerLoopOutput> + /// Returns encoded: ArkScale>> fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bw6_761::multi_miller_loop(a, b) } /// Compute a final exponentiation on bw6_761 - /// Receives encoded: MillerLoopOutput> - /// Returns encoded:ArkScale>> + /// Receives encoded: ArkScale>> + /// Returns encoded: ArkScale>> fn bw6_761_final_exponentiation(f12: Vec) -> Result, ()> { bw6_761::final_exponentiation(f12) } @@ -237,9 +237,9 @@ pub trait EllipticCurves { /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch /// Receives encoded: /// bases: ArkScale<&[ed_on_bls12_381_bandersnatch::SWAffine]> - /// scalars: ArkScale<&[::ScalarField]> Returns encoded: - /// ArkScaleProjective + /// scalars: + /// ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, From 4d37a43f6cb04f608462e4e1c1de26ab592e0bdd Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 13:26:54 +0200 Subject: [PATCH 356/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 1c5118b142886..43ff72be26825 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -125,7 +125,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) @@ -134,7 +134,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) @@ -236,10 +236,10 @@ pub trait EllipticCurves { /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch /// Receives encoded: - /// bases: ArkScale<&[ed_on_bls12_381_bandersnatch::SWAffine]> + /// bases: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::SWAffine]> /// scalars: - /// ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// ArkScale<&[::ScalarField]> + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, @@ -249,9 +249,9 @@ pub trait EllipticCurves { /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch /// Receives encoded: - /// base: ArkScaleProjective + /// base: ArkScaleProjective /// scalar: ArkScale<&[u64]> - /// Returns encoded: ArkScaleProjective + /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_msm( bases: Vec, scalars: Vec, From ae6ce88a051e7153b70f39534b335c41e934f43e Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 13:47:43 +0200 Subject: [PATCH 357/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 43ff72be26825..1bc72203c1302 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -73,7 +73,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g1(bases, scalars) @@ -82,7 +82,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g2(bases, scalars) @@ -92,7 +92,7 @@ pub trait EllipticCurves { /// Receives encoded: /// a: ArkScale as Pairing>::G1Prepared>> /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: ArkScale> + /// Returns encoded: ArkScale>> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) } @@ -125,7 +125,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) @@ -134,7 +134,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) @@ -177,7 +177,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g1(bases, bigints) @@ -186,7 +186,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g2(bases, bigints) @@ -204,7 +204,7 @@ pub trait EllipticCurves { /// Compute msm on ed_on_bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_377::EdwardsAffine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { ed_on_bls12_377::msm(bases, scalars) @@ -238,7 +238,7 @@ pub trait EllipticCurves { /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::SWAffine]> /// scalars: - /// ArkScale<&[::ScalarField]> + /// ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, @@ -250,7 +250,8 @@ pub trait EllipticCurves { /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch /// Receives encoded: /// base: ArkScaleProjective - /// scalar: ArkScale<&[u64]> + /// scalars: + /// ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_msm( bases: Vec, From d648ecfbfb9d475c79f153d792b6b59a6ffb5b96 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 14:13:21 +0200 Subject: [PATCH 358/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 44 +++++++++++++++------------ 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 1bc72203c1302..aec47ee41a13a 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -37,8 +37,8 @@ use sp_runtime_interface::runtime_interface; pub trait EllipticCurves { /// Compute a multi Miller loop for bls12_37 /// Receives encoded: - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> + /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> + /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> /// Returns encoded: ArkScale>> fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_377::multi_miller_loop(a, b) @@ -73,7 +73,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g1(bases, scalars) @@ -82,7 +82,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g2(bases, scalars) @@ -90,9 +90,9 @@ pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 /// Receives encoded: - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> - /// Returns encoded: ArkScale>> + /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> + /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> + /// Returns encoded: ArkScale>> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) } @@ -125,7 +125,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) @@ -134,7 +134,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) @@ -142,8 +142,8 @@ pub trait EllipticCurves { /// Compute a multi Miller loop on bw6_761 /// Receives encoded: - /// a: ArkScale as Pairing>::G1Prepared>> - /// b: ArkScale as Pairing>::G2Prepared>> + /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> + /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> /// Returns encoded: ArkScale>> fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bw6_761::multi_miller_loop(a, b) @@ -177,7 +177,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g1(bases, bigints) @@ -186,7 +186,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[::ScalarField]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g2(bases, bigints) @@ -204,8 +204,10 @@ pub trait EllipticCurves { /// Compute msm on ed_on_bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_377::EdwardsAffine]> - /// scalars: ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// scalars: + /// ArkScale<&[::ScalarField]> + /// Returns encoded: + /// ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { ed_on_bls12_377::msm(bases, scalars) } @@ -238,8 +240,10 @@ pub trait EllipticCurves { /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::SWAffine]> /// scalars: - /// ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// `ArkScale<&[::ScalarField]>` + /// Returns encoded: + /// ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( bases: Vec, scalars: Vec, @@ -251,8 +255,10 @@ pub trait EllipticCurves { /// Receives encoded: /// base: ArkScaleProjective /// scalars: - /// ArkScale<&[::ScalarField]> - /// Returns encoded: ArkScaleProjective + /// `ArkScale<&[::ScalarField]>` + /// Returns encoded: + /// ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_msm( bases: Vec, scalars: Vec, From b189c005c8ddd1d5f1970c451914fbc3d255538a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 15:26:08 +0200 Subject: [PATCH 359/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 36 +++++++++++++-------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index aec47ee41a13a..9dee21dbdb012 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -37,8 +37,8 @@ use sp_runtime_interface::runtime_interface; pub trait EllipticCurves { /// Compute a multi Miller loop for bls12_37 /// Receives encoded: - /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> - /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> + /// a: ArkScale>> + /// b: ArkScale>> /// Returns encoded: ArkScale>> fn bls12_377_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_377::multi_miller_loop(a, b) @@ -73,7 +73,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ark_bls12_377::Fr]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g1(bases, scalars) @@ -82,7 +82,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_377 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_377::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ark_bls12_377::Fr]> /// Returns encoded: ArkScaleProjective fn bls12_377_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_377::msm_g2(bases, scalars) @@ -90,8 +90,8 @@ pub trait EllipticCurves { /// Compute a multi Miller loop on bls12_381 /// Receives encoded: - /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> - /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> + /// a: ArkScale>> + /// b: ArkScale>> /// Returns encoded: ArkScale>> fn bls12_381_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bls12_381::multi_miller_loop(a, b) @@ -125,7 +125,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) @@ -134,7 +134,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) @@ -142,8 +142,8 @@ pub trait EllipticCurves { /// Compute a multi Miller loop on bw6_761 /// Receives encoded: - /// a: ArkScale as ark_ec::pairing::Pairing>::G1Prepared>> - /// b: ArkScale as ark_ec::pairing::Pairing>::G2Prepared>> + /// a: ArkScale>> + /// b: ArkScale>> /// Returns encoded: ArkScale>> fn bw6_761_multi_miller_loop(a: Vec, b: Vec) -> Result, ()> { bw6_761::multi_miller_loop(a, b) @@ -177,7 +177,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G1Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ark_bw6_761::Fr]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g1(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g1(bases, bigints) @@ -186,7 +186,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bw6_761 /// Receives encoded: /// bases: ArkScale<&[ark_bw6_761::G2Affine]> - /// scalars: ArkScale<&[::ScalarField]> + /// scalars: ArkScale<&[ark_bw6_761::Fr]> /// Returns encoded: ArkScaleProjective fn bw6_761_msm_g2(bases: Vec, bigints: Vec) -> Result, ()> { bw6_761::msm_g2(bases, bigints) @@ -205,10 +205,12 @@ pub trait EllipticCurves { /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_377::EdwardsAffine]> /// scalars: - /// ArkScale<&[::ScalarField]> + /// ArkScale<&[ /// Returns encoded: /// ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { + let test = + ::ScalarField::default(); ed_on_bls12_377::msm(bases, scalars) } @@ -239,9 +241,7 @@ pub trait EllipticCurves { /// Compute short weierstrass msm on ed_on_bls12_381_bandersnatch /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::SWAffine]> - /// scalars: - /// `ArkScale<&[::ScalarField]>` + /// scalars: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::Fr]> /// Returns encoded: /// ArkScaleProjective fn ed_on_bls12_381_bandersnatch_sw_msm( @@ -254,9 +254,7 @@ pub trait EllipticCurves { /// Compute twisted edwards msm on ed_on_bls12_381_bandersnatch /// Receives encoded: /// base: ArkScaleProjective - /// scalars: - /// `ArkScale<&[::ScalarField]>` + /// scalars: ArkScale<&[ark_ed_on_bls12_381_bandersnatch::Fr]> /// Returns encoded: /// ArkScaleProjective fn ed_on_bls12_381_bandersnatch_te_msm( From 6fc40b9eb628e59b2334b95875614e4b33fc0cce Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 15:53:57 +0200 Subject: [PATCH 360/364] cleanup --- primitives/crypto/ec-utils/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 9dee21dbdb012..9afc50184c7de 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -209,8 +209,6 @@ pub trait EllipticCurves { /// Returns encoded: /// ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { - let test = - ::ScalarField::default(); ed_on_bls12_377::msm(bases, scalars) } From 6161e645686558cbd04d644e5eb645294f365917 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 16:10:19 +0200 Subject: [PATCH 361/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 9afc50184c7de..06bcec4a8f554 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -125,7 +125,7 @@ pub trait EllipticCurves { /// Compute a msm on G1 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G1Affine]> - /// scalars: ArkScale<&[ + /// scalars: ArkScale<&[ark_bls12_381::Fr]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g1(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g1(bases, scalars) @@ -134,7 +134,7 @@ pub trait EllipticCurves { /// Compute a msm on G2 for bls12_381 /// Receives encoded: /// bases: ArkScale<&[ark_bls12_381::G2Affine]> - /// scalars: ArkScale<&[ + /// scalars: ArkScale<&[ark_bls12_381::Fr]> /// Returns encoded: ArkScaleProjective fn bls12_381_msm_g2(bases: Vec, scalars: Vec) -> Result, ()> { bls12_381::msm_g2(bases, scalars) @@ -205,7 +205,7 @@ pub trait EllipticCurves { /// Receives encoded: /// bases: ArkScale<&[ark_ed_on_bls12_377::EdwardsAffine]> /// scalars: - /// ArkScale<&[ + /// ArkScale<&[ark_ed_on_bls12_377::Fr]> /// Returns encoded: /// ArkScaleProjective fn ed_on_bls12_377_msm(bases: Vec, scalars: Vec) -> Result, ()> { From 34402a4e4d74e2b36e53f9e00068bc893cfbc236 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 2 Jun 2023 16:36:03 +0200 Subject: [PATCH 362/364] cargo update --- Cargo.lock | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91317194585f2..e0205593ed744 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1132,9 +1132,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" +checksum = "e70d3ad08698a0568b0562f22710fe6bfc1f4a61a367c77d0398c562eadd453a" dependencies = [ "smallvec", ] @@ -1181,7 +1181,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.3.0", + "clap 4.3.1", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1307,9 +1307,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc" +checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28" dependencies = [ "clap_builder", "clap_derive", @@ -1318,9 +1318,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990" +checksum = "72394f3339a76daf211e57d4bcb374410f3965dcc606dd0e03738c7888766980" dependencies = [ "anstream", "anstyle", @@ -1331,18 +1331,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12" +checksum = "7f6b5c519bab3ea61843a7923d074b04245624bb84a64a8c150f5deb014e388b" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", ] [[package]] name = "clap_derive" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b" +checksum = "59e9ef9a08ee1c0e1f2e162121665ac45ac3783b0f897db7244ae75ad9a8f65b" dependencies = [ "heck", "proc-macro2", @@ -2643,7 +2643,7 @@ dependencies = [ "Inflector", "array-bytes 4.2.0", "chrono", - "clap 4.3.0", + "clap 4.3.1", "comfy-table", "frame-benchmarking", "frame-support", @@ -2734,7 +2734,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -5374,7 +5374,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes 4.2.0", - "clap 4.3.0", + "clap 4.3.1", "derive_more", "fs_extra", "futures", @@ -5411,7 +5411,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes 4.2.0", "assert_cmd", - "clap 4.3.0", + "clap 4.3.1", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5537,7 +5537,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5596,7 +5596,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "generate-bags", "kitchensink-runtime", ] @@ -5605,7 +5605,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5651,7 +5651,7 @@ dependencies = [ name = "node-template-release" version = "3.0.0" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "flate2", "fs_extra", "git2", @@ -9008,7 +9008,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes 4.2.0", "chrono", - "clap 4.3.0", + "clap 4.3.1", "fdlimit", "futures", "futures-timer", @@ -10137,7 +10137,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "fs4", "futures", "log", @@ -11372,7 +11372,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11881,7 +11881,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "sc-cli", ] @@ -11923,7 +11923,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.3.0", + "clap 4.3.1", "frame-support", "frame-system", "sc-cli", @@ -12835,7 +12835,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.3.0", + "clap 4.3.1", "frame-remote-externalities", "frame-try-runtime", "hex", From 200df29c61e4700772e145a71a76f4586012f4a3 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 5 Jun 2023 13:32:43 +0200 Subject: [PATCH 363/364] fix doc comments --- primitives/crypto/ec-utils/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/crypto/ec-utils/src/lib.rs b/primitives/crypto/ec-utils/src/lib.rs index 06bcec4a8f554..c1877dd5b5d72 100644 --- a/primitives/crypto/ec-utils/src/lib.rs +++ b/primitives/crypto/ec-utils/src/lib.rs @@ -45,7 +45,7 @@ pub trait EllipticCurves { } /// Compute a final exponentiation for bls12_377 - /// Receives encoded: ArkScale> + /// Receives encoded: ArkScale>> /// Returns encoded: ArkScale>> fn bls12_377_final_exponentiation(f12: Vec) -> Result, ()> { bls12_377::final_exponentiation(f12) From ba031411f2bd41aca827b7fa3f998be95d061437 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Tue, 6 Jun 2023 10:22:34 +0200 Subject: [PATCH 364/364] cargo update --- Cargo.lock | 98 +++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f75d843a6dc43..59f6f8e55a36e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,9 +172,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -1181,7 +1181,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.3.1", + "clap 4.3.2", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -1307,9 +1307,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28" +checksum = "401a4694d2bf92537b6867d94de48c4842089645fdcdf6c71865b175d836e9c2" dependencies = [ "clap_builder", "clap_derive", @@ -1335,14 +1335,14 @@ version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6b5c519bab3ea61843a7923d074b04245624bb84a64a8c150f5deb014e388b" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", ] [[package]] name = "clap_derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e9ef9a08ee1c0e1f2e162121665ac45ac3783b0f897db7244ae75ad9a8f65b" +checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" dependencies = [ "heck", "proc-macro2", @@ -2586,9 +2586,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -2643,7 +2643,7 @@ dependencies = [ "Inflector", "array-bytes 4.2.0", "chrono", - "clap 4.3.1", + "clap 4.3.2", "comfy-table", "frame-benchmarking", "frame-support", @@ -2734,7 +2734,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -3621,9 +3621,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -3717,9 +3717,9 @@ checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] name = "indicatif" -version = "0.17.4" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db45317f37ef454e6519b6c3ed7d377e5f23346f0823f86e65ca36912d1d0ef8" +checksum = "8ff8cc23a7393a397ed1d7f56e6365cba772aba9f9912ab968b03043c395d057" dependencies = [ "console", "instant", @@ -4192,9 +4192,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.144" +version = "0.2.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "fc86cde3ff845662b8f4ef6cb50ea0e20c524eb3d29ae048287e06a1b3fa6a81" [[package]] name = "libgit2-sys" @@ -4811,9 +4811,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -5374,7 +5374,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes 4.2.0", - "clap 4.3.1", + "clap 4.3.2", "derive_more", "fs_extra", "futures", @@ -5411,7 +5411,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes 4.2.0", "assert_cmd", - "clap 4.3.1", + "clap 4.3.2", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5537,7 +5537,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5596,7 +5596,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "generate-bags", "kitchensink-runtime", ] @@ -5605,7 +5605,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5651,7 +5651,7 @@ dependencies = [ name = "node-template-release" version = "3.0.0" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "flate2", "fs_extra", "git2", @@ -5871,9 +5871,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ "crc32fast", "hashbrown 0.13.2", @@ -5901,9 +5901,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.2" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "oorandom" @@ -7731,7 +7731,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.8", ] [[package]] @@ -7750,15 +7750,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.0", ] [[package]] @@ -7817,9 +7817,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" @@ -8565,11 +8565,11 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.3" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ - "aho-corasick 1.0.1", + "aho-corasick 1.0.2", "memchr", "regex-syntax 0.7.2", ] @@ -9008,7 +9008,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes 4.2.0", "chrono", - "clap 4.3.1", + "clap 4.3.2", "fdlimit", "futures", "futures-timer", @@ -10137,7 +10137,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "fs4", "futures", "log", @@ -11371,7 +11371,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11880,7 +11880,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "sc-cli", ] @@ -11922,7 +11922,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.3.1", + "clap 4.3.2", "frame-support", "frame-system", "sc-cli", @@ -12834,7 +12834,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.3.1", + "clap 4.3.2", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -13018,12 +13018,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.4.0", "percent-encoding", ]

; - type TargetField = Fp6; - - fn final_exponentiation(f: MillerLoopOutput) -> Option> { - P::final_exponentiation(f) - } - - fn multi_miller_loop( - a: impl IntoIterator>, - b: impl IntoIterator>, - ) -> MillerLoopOutput { - P::multi_miller_loop(a, b) - } -} diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs deleted file mode 100644 index cd83ca4b950d6..0000000000000 --- a/primitives/arkworks-models/src/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -pub mod bls12; -pub mod bw6; -pub use ark_ec::{ - models, models::short_weierstrass, pairing, scalar_mul, twisted_edwards, AffineRepr, - CurveConfig, CurveGroup, Group, -}; diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks/test/Cargo.toml similarity index 77% rename from primitives/arkworks-curves/bls12_377/Cargo.toml rename to primitives/arkworks/test/Cargo.toml index 8355439ec722b..48f7092f38174 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "sp-ark-bls12-377" +name = "sp-arkworks-test" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] repository = "https://github.com/paritytech/substrate/" @@ -15,20 +15,21 @@ ark-ff = { version="0.4.0-alpha", default-features = false } ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } +ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } +ark-models = { package = "ark-models", version = "0.4.0-alpha.5", path = "../../models", default-features = false } +sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } +sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "achimcc/arkworks-integration" } [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std", "sp-io/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks/test/lib.rs b/primitives/arkworks/test/lib.rs new file mode 100644 index 0000000000000..bf9d749459eea --- /dev/null +++ b/primitives/arkworks/test/lib.rs @@ -0,0 +1,2 @@ +#[cfg(test)] +mod tests; \ No newline at end of file diff --git a/primitives/arkworks/test/tests/bls12_377.rs b/primitives/arkworks/test/tests/bls12_377.rs new file mode 100644 index 0000000000000..e69de29bb2d1d From a1abab740dcbf43056675df1673900476c84588d Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 9 Jan 2023 15:12:13 +0100 Subject: [PATCH 087/364] add tests bls12_377 --- Cargo.lock | 234 ++++---------------------- Cargo.toml | 6 - primitives/arkworks/test/tests/mod.rs | 1 + 3 files changed, 38 insertions(+), 203 deletions(-) create mode 100644 primitives/arkworks/test/tests/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 62352f05756d6..e42e63adac261 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -202,25 +202,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" -[[package]] -name = "ark-algebra-test-templates" -version = "0.4.0-alpha.7" -source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "hex", - "num-bigint", - "num-integer", - "num-traits", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.6", -] - [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" @@ -253,18 +234,6 @@ dependencies = [ "ark-std", ] -[[package]] -name = "ark-curve-constraint-tests" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-serialize", - "ark-std", -] - [[package]] name = "ark-ec" version = "0.4.0-alpha.7" @@ -343,23 +312,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ark-models" -version = "0.4.0-alpha.5" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.1", - "itertools", - "num-traits", - "rayon", - "zeroize", -] - [[package]] name = "ark-poly" version = "0.4.0-alpha.7" @@ -372,44 +324,6 @@ dependencies = [ "hashbrown 0.13.1", ] -[[package]] -name = "ark-r1cs-std" -version = "0.4.0-alpha.3" -source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations 0.4.0-alpha.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ark-std", - "derivative", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.4.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fcbb7957519f1fd4de397d22360b236840c3e426f39999e34c63be9dfe7d1b" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "ark-relations" -version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/snark#7106dc87b35620173c67d5cbab81f3255599dffd" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", -] - [[package]] name = "ark-serialize" version = "0.4.0-alpha.7" @@ -611,9 +525,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" +checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" dependencies = [ "proc-macro2", "quote", @@ -1019,9 +933,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e" +checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" dependencies = [ "serde", ] @@ -1716,9 +1630,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" +checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" dependencies = [ "cc", "cxxbridge-flags", @@ -1728,9 +1642,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" +checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" dependencies = [ "cc", "codespan-reporting", @@ -1743,15 +1657,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" +checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" [[package]] name = "cxxbridge-macro" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" +checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" dependencies = [ "proc-macro2", "quote", @@ -2998,9 +2912,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" @@ -3494,9 +3408,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" @@ -7775,9 +7689,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -9411,12 +9325,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] @@ -9907,89 +9820,6 @@ dependencies = [ "sp-arithmetic", ] -[[package]] -name = "sp-ark-bls12-377" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-bls12-377", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "sp-io", -] - -[[package]] -name = "sp-ark-bls12-381" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-models", - "ark-serialize", - "ark-std", - "hex", - "sp-io", -] - -[[package]] -name = "sp-ark-bw6-761" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-bw6-761", - "ark-ec", - "ark-ff", - "ark-models", - "ark-serialize", - "ark-std", - "sp-ark-bls12-377", - "sp-io", -] - -[[package]] -name = "sp-ark-ed-on-bls12-377" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "sp-ark-bls12-377", - "sp-io", -] - -[[package]] -name = "sp-ark-ed-on-bls12-381" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ed-on-bls12-381", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "sp-ark-bls12-381", - "sp-io", -] - [[package]] name = "sp-arkworks" version = "0.0.1" @@ -10763,9 +10593,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.36.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d92659e7d18d82b803824a9ba5a6022cff101c3491d027c1c1d8d30e749284" +checksum = "d44528162f980c0e03c71e005d334332c8da0aec9f2b0b4bdc557ed4a9f24776" dependencies = [ "Inflector", "num-format", @@ -11740,9 +11570,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" @@ -11777,9 +11607,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.74" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "654bfc024d30963fce210f22f98956407fe8c8365eb85a1fa530f6f8844137ed" +checksum = "f1212c215a87a183687a7cc7065901b1a98da6b37277d51a1b5faedbb4efd4f3" dependencies = [ "dissimilar", "glob", @@ -13046,3 +12876,13 @@ dependencies = [ "cc", "libc", ] + +[[patch.unused]] +name = "ark-algebra-test-templates" +version = "0.4.0-alpha.7" +source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" + +[[patch.unused]] +name = "ark-r1cs-std" +version = "0.4.0-alpha.3" +source = "git+https://github.com/arkworks-rs/r1cs-std/#054969fbcee949b9030bbc166865cba1d527517e" diff --git a/Cargo.toml b/Cargo.toml index 80a2840be26b9..7ba78832fe955 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -175,12 +175,6 @@ members = [ "primitives/arithmetic", "primitives/arithmetic/fuzzer", "primitives/arkworks", - "primitives/arkworks-curves/bls12_381", - "primitives/arkworks-curves/bls12_377", - "primitives/arkworks-curves/ed_on_bls12_381", - "primitives/arkworks-curves/ed_on_bls12_377", - "primitives/arkworks-curves/bw6_761", - "primitives/arkworks-models", "primitives/authority-discovery", "primitives/authorship", "primitives/beefy", diff --git a/primitives/arkworks/test/tests/mod.rs b/primitives/arkworks/test/tests/mod.rs new file mode 100644 index 0000000000000..0d3b60951d5e4 --- /dev/null +++ b/primitives/arkworks/test/tests/mod.rs @@ -0,0 +1 @@ +mod bls_377; \ No newline at end of file From c78d51c74557042c4a06c5074d216af18380a73c Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 9 Jan 2023 15:20:51 +0100 Subject: [PATCH 088/364] add remaining curve tests --- primitives/arkworks/test/Cargo.toml | 7 +- primitives/arkworks/test/tests/bls12_381.rs | 0 .../g1_compressed_valid_test_vectors.dat | Bin 0 -> 48000 bytes .../g1_uncompressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_compressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_uncompressed_valid_test_vectors.dat | Bin 0 -> 192000 bytes .../arkworks/test/tests/bls12_381/mod.rs | 157 ++++++++++++++++++ primitives/arkworks/test/tests/bw6_761.rs | 38 +++++ .../arkworks/test/tests/ed_on_bls12_377.rs | 0 .../arkworks/test/tests/ed_on_bls12_381.rs | 29 ++++ primitives/arkworks/test/tests/mod.rs | 6 +- 11 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 primitives/arkworks/test/tests/bls12_381.rs create mode 100644 primitives/arkworks/test/tests/bls12_381/g1_compressed_valid_test_vectors.dat create mode 100644 primitives/arkworks/test/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat create mode 100644 primitives/arkworks/test/tests/bls12_381/g2_compressed_valid_test_vectors.dat create mode 100644 primitives/arkworks/test/tests/bls12_381/g2_uncompressed_valid_test_vectors.dat create mode 100755 primitives/arkworks/test/tests/bls12_381/mod.rs create mode 100644 primitives/arkworks/test/tests/bw6_761.rs create mode 100644 primitives/arkworks/test/tests/ed_on_bls12_377.rs create mode 100644 primitives/arkworks/test/tests/ed_on_bls12_381.rs diff --git a/primitives/arkworks/test/Cargo.toml b/primitives/arkworks/test/Cargo.toml index 48f7092f38174..ab5fad50ea5a6 100644 --- a/primitives/arkworks/test/Cargo.toml +++ b/primitives/arkworks/test/Cargo.toml @@ -17,7 +17,6 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } ark-models = { package = "ark-models", version = "0.4.0-alpha.5", path = "../../models", default-features = false } -sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } @@ -25,6 +24,12 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-features = false } sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "achimcc/arkworks-integration" } +sp-ark-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } +sp-ark-bls12-381 = { git = "https://github.com/achimcc/ark-substrate/branches" } +sp-ark-bw6-761 = { git = "https://github.com/achimcc/ark-substrate/branches" } +sp-ark-ed-on-bls12-377 = { git = "https://github.com/achimcc/ark-substrate/branches" } +sp-ark-ed-on-bls12-381 = { git = "https://github.com/achimcc/ark-substrate/branches" } + [features] diff --git a/primitives/arkworks/test/tests/bls12_381.rs b/primitives/arkworks/test/tests/bls12_381.rs new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/primitives/arkworks/test/tests/bls12_381/g1_compressed_valid_test_vectors.dat b/primitives/arkworks/test/tests/bls12_381/g1_compressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea8cd67652d133010e79df8488452450b6f5cb17 GIT binary patch literal 48000 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 Rm?nepfGSPSF*XppvfIk?3d#Tg literal 0 HcmV?d00001 diff --git a/primitives/arkworks/test/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks/test/tests/bls12_381/g1_uncompressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..86abfba945c7b701750d637bffe6701330e10e88 GIT binary patch literal 96000 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%0A9l>2- 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 literal 0 HcmV?d00001 diff --git a/primitives/arkworks/test/tests/bls12_381/g2_compressed_valid_test_vectors.dat b/primitives/arkworks/test/tests/bls12_381/g2_compressed_valid_test_vectors.dat new file mode 100644 index 0000000000000000000000000000000000000000..a40bbe251d90e576060adb7eaa2456197878804c GIT binary patch literal 96000 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

{ - fn msm(bases: &[Self::MulBase], bigints: &[Self::ScalarField]) -> Result { - P::msm(bases, bigints) - } -} diff --git a/primitives/arkworks-models/src/twisted_edwards/mod.rs b/primitives/arkworks-models/src/twisted_edwards/mod.rs deleted file mode 100644 index a73253d042067..0000000000000 --- a/primitives/arkworks-models/src/twisted_edwards/mod.rs +++ /dev/null @@ -1,175 +0,0 @@ -use ark_serialize::{ - CanonicalDeserialize, CanonicalDeserializeWithFlags, CanonicalSerialize, - CanonicalSerializeWithFlags, Compress, SerializationError, Valid, Validate, -}; -use ark_std::io::{Read, Write}; - -use crate::{scalar_mul::variable_base::VariableBaseMSM, AffineRepr, Group}; -use num_traits::Zero; - -use ark_ff::fields::Field; - -mod affine; -pub use affine::*; - -mod group; -pub use group::*; - -mod serialization_flags; -pub use serialization_flags::*; - -/// Constants and convenience functions that collectively define the [Twisted Edwards model](https://www.hyperelliptic.org/EFD/g1p/auto-twisted.html) -/// of the curve. In this model, the curve equation is -/// `a * x² + y² = 1 + d * x² * y²`, for constants `a` and `d`. -pub trait TECurveConfig: super::CurveConfig { - /// Coefficient `a` of the curve equation. - const COEFF_A: Self::BaseField; - /// Coefficient `d` of the curve equation. - const COEFF_D: Self::BaseField; - /// Generator of the prime-order subgroup. - const GENERATOR: Affine; - - /// Model parameters for the Montgomery curve that is birationally - /// equivalent to this curve. - type MontCurveConfig: MontCurveConfig; - - /// Helper method for computing `elem * Self::COEFF_A`. - /// - /// The default implementation should be overridden only if - /// the product can be computed faster than standard field multiplication - /// (eg: via doubling if `COEFF_A == 2`, or if `COEFF_A.is_zero()`). - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - elem * Self::COEFF_A - } - - /// Checks that the current point is in the prime order subgroup given - /// the point on the curve. - fn is_in_correct_subgroup_assuming_on_curve(item: &Affine) -> bool { - Self::mul_affine(item, Self::ScalarField::characteristic()).is_zero() - } - - /// Performs cofactor clearing. - /// The default method is simply to multiply by the cofactor. - /// For some curve families though, it is sufficient to multiply - /// by a smaller scalar. - fn clear_cofactor(item: &Affine) -> Affine { - item.mul_by_cofactor() - } - - /// Default implementation of group multiplication for projective - /// coordinates - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base; - } - } - - res - } - - /// Default implementation of group multiplication for affine - /// coordinates - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut res = Projective::::zero(); - for b in ark_ff::BitIteratorBE::without_leading_zeros(scalar) { - res.double_in_place(); - if b { - res += base - } - } - - res - } - - /// Default implementation for multi scalar multiplication - fn msm( - bases: &[Affine], - scalars: &[Self::ScalarField], - ) -> Result, usize> { - (bases.len() == scalars.len()) - .then(|| VariableBaseMSM::msm_unchecked(bases, scalars)) - .ok_or(usize::min(bases.len(), scalars.len())) - } - - /// If uncompressed, serializes both x and y coordinates. - /// If compressed, serializes y coordinate with a bit to encode whether x is positive. - #[inline] - fn serialize_with_mode( - item: &Affine, - mut writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - let flags = TEFlags::from_x_coordinate(item.x); - match compress { - Compress::Yes => item.y.serialize_with_flags(writer, flags), - Compress::No => { - item.x.serialize_uncompressed(&mut writer)?; - item.y.serialize_uncompressed(&mut writer) - }, - } - } - - /// If `validate` is `Yes`, calls `check()` to make sure the element is valid. - /// - /// Uses `Affine::get_xs_from_y_unchecked()` for the compressed version. - fn deserialize_with_mode( - mut reader: R, - compress: Compress, - validate: Validate, - ) -> Result, SerializationError> { - let (x, y) = match compress { - Compress::Yes => { - let (y, flags): (_, TEFlags) = - CanonicalDeserializeWithFlags::deserialize_with_flags(reader)?; - let (x, neg_x) = Affine::::get_xs_from_y_unchecked(y) - .ok_or(SerializationError::InvalidData)?; - if flags.is_negative() { - (neg_x, y) - } else { - (x, y) - } - }, - Compress::No => { - let x: Self::BaseField = - CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; - let y: Self::BaseField = - CanonicalDeserialize::deserialize_uncompressed(&mut reader)?; - (x, y) - }, - }; - let point = Affine::::new_unchecked(x, y); - if let Validate::Yes = validate { - point.check()?; - } - Ok(point) - } - - #[inline] - fn serialized_size(compress: Compress) -> usize { - let zero = Self::BaseField::zero(); - match compress { - Compress::Yes => zero.serialized_size_with_flags::(), - Compress::No => zero.uncompressed_size() + zero.uncompressed_size(), - } - } -} - -/// Constants and convenience functions that collectively define the [Montgomery model](https://www.hyperelliptic.org/EFD/g1p/auto-montgom.html) -/// of the curve. In this model, the curve equation is -/// `b * y² = x³ + a * x² + x`, for constants `a` and `b`. -pub trait MontCurveConfig: super::CurveConfig { - /// Coefficient `a` of the curve equation. - const COEFF_A: Self::BaseField; - /// Coefficient `b` of the curve equation. - const COEFF_B: Self::BaseField; - - /// Model parameters for the Twisted Edwards curve that is birationally - /// equivalent to this curve. - type TECurveConfig: TECurveConfig; -} - -////////////////////////////////////////////////////////////////////////////// diff --git a/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs b/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs deleted file mode 100644 index 21117b6c29873..0000000000000 --- a/primitives/arkworks-models/src/twisted_edwards/serialization_flags.rs +++ /dev/null @@ -1,57 +0,0 @@ -use ark_ff::Field; -use ark_serialize::Flags; - -/// Flags to be encoded into the serialization. -/// The default flags (empty) should not change the binary representation. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum TEFlags { - XIsPositive = 0, - XIsNegative = 1, -} - -impl TEFlags { - #[inline] - pub fn from_x_coordinate(x: impl Field) -> Self { - if x <= -x { - TEFlags::XIsPositive - } else { - TEFlags::XIsNegative - } - } - - #[inline] - pub fn is_negative(&self) -> bool { - matches!(*self, TEFlags::XIsNegative) - } -} - -impl Default for TEFlags { - #[inline] - fn default() -> Self { - // XIsPositive doesn't change the serialization - TEFlags::XIsPositive - } -} - -impl Flags for TEFlags { - const BIT_SIZE: usize = 1; - - #[inline] - fn u8_bitmask(&self) -> u8 { - let mut mask = 0; - if let Self::XIsNegative = self { - mask |= 1 << 7; - } - mask - } - - #[inline] - fn from_u8(value: u8) -> Option { - let x_sign = (value >> 7) & 1 == 1; - if x_sign { - Some(Self::XIsNegative) - } else { - Some(Self::XIsPositive) - } - } -} diff --git a/primitives/arkworks/src/ed_on_bls12_381.rs b/primitives/arkworks/src/ed_on_bls12_381.rs index 25adc36d8dc0b..01aaa9c53331e 100644 --- a/primitives/arkworks/src/ed_on_bls12_381.rs +++ b/primitives/arkworks/src/ed_on_bls12_381.rs @@ -26,7 +26,7 @@ use ark_ec::{ twisted_edwards::{Affine as TEAffine, TECurveConfig}, VariableBaseMSM, }; -use ark_ed_on_bls12_381::{JubjubConfig, SWProjective}; +use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::io::Cursor; use sp_std::{vec, vec::Vec}; @@ -96,7 +96,37 @@ pub fn te_mul_affine(base: Vec, scalar: Vec) -> Vec { } /// Compute a multi scalar multiplication on G! through arkworks -pub fn msm(bases: Vec>, scalars: Vec>) -> Vec { +pub fn te_msm(bases: Vec>, scalars: Vec>) -> Vec { + let bases: Vec<_> = bases + .iter() + .map(|a| { + let cursor = Cursor::new(a); + TEAffine::::deserialize_with_mode(cursor, Compress::Yes, Validate::No) + .unwrap() + }) + .collect(); + let scalars: Vec<_> = scalars + .iter() + .map(|a| { + let cursor = Cursor::new(a); + ::ScalarField::deserialize_with_mode( + cursor, + Compress::Yes, + Validate::No, + ) + .unwrap() + }) + .collect(); + + let result = ::msm(&bases, &scalars).unwrap(); + let mut serialized = vec![0; result.serialized_size(Compress::Yes)]; + let mut cursor = Cursor::new(&mut serialized[..]); + result.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); + serialized +} + +/// Compute a multi scalar multiplication on G! through arkworks +pub fn sw_msm(bases: Vec>, scalars: Vec>) -> Vec { let bases: Vec<_> = bases .iter() .map(|a| { diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index bf028f716df8f..309b9ae61a2bf 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -1262,8 +1262,13 @@ pub trait Crypto { } /// Compute msm on ed_on_bls12_381 - fn ed_on_bls12_381_msm(bases: Vec>, scalars: Vec>) -> Vec { - sp_arkworks::ed_on_bls12_381::msm(bases, scalars) + fn ed_on_bls12_381_te_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::ed_on_bls12_381::te_msm(bases, scalars) + } + + /// Compute msm on ed_on_bls12_381 + fn ed_on_bls12_381_sw_msm(bases: Vec>, scalars: Vec>) -> Vec { + sp_arkworks::ed_on_bls12_381::sw_msm(bases, scalars) } /// Compute affine multiplication on ed_on_bls12_377 From 747c79cd88afc858b1e2c25e6f912ddb3b23c3bd Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 16:37:21 +0100 Subject: [PATCH 067/364] cleanup --- .../arkworks-curves/bls12_377/Cargo.toml | 4 --- .../bls12_377/benches/bls12_377.rs | 16 ----------- .../bls12_377/scripts/base_field.sage | 28 ------------------- .../bls12_377/scripts/scalar_field.sage | 28 ------------------- 4 files changed, 76 deletions(-) delete mode 100644 primitives/arkworks-curves/bls12_377/benches/bls12_377.rs delete mode 100644 primitives/arkworks-curves/bls12_377/scripts/base_field.sage delete mode 100644 primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index ad25ad63190d2..61577f91875de 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -35,7 +35,3 @@ scalar_field = [] base_field = [] r1cs = [ "base_field", "ark-r1cs-std" ] -[[bench]] -name = "bls12_377" -path = "benches/bls12_377.rs" -harness = false diff --git a/primitives/arkworks-curves/bls12_377/benches/bls12_377.rs b/primitives/arkworks-curves/bls12_377/benches/bls12_377.rs deleted file mode 100644 index 73a661c990ec8..0000000000000 --- a/primitives/arkworks-curves/bls12_377/benches/bls12_377.rs +++ /dev/null @@ -1,16 +0,0 @@ -use ark_algebra_bench_templates::*; - -use ark_bls12_377::{ - fq::Fq, fq2::Fq2, fr::Fr, Bls12_377, Fq12, G1Projective as G1, G2Projective as G2, -}; - -bench!( - Name = "Bls12_377", - Pairing = Bls12_377, - G1 = G1, - G2 = G2, - ScalarField = Fr, - G1BaseField = Fq, - G2BaseField = Fq2, - TargetField = Fq12, -); diff --git a/primitives/arkworks-curves/bls12_377/scripts/base_field.sage b/primitives/arkworks-curves/bls12_377/scripts/base_field.sage deleted file mode 100644 index 6d9f4a7e71948..0000000000000 --- a/primitives/arkworks-curves/bls12_377/scripts/base_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 20): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) diff --git a/primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage b/primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage deleted file mode 100644 index a4d06f0891f59..0000000000000 --- a/primitives/arkworks-curves/bls12_377/scripts/scalar_field.sage +++ /dev/null @@ -1,28 +0,0 @@ -modulus = 8444461749428370424248824938781546531375899335154063827935233455917409239041 - -assert(modulus.is_prime()) - -Fp = GF(modulus) - -generator = Fp(0); -for i in range(0, 30): - i = Fp(i); - neg_i = Fp(-i) - if not(i.is_primitive_root() or neg_i.is_primitive_root()): - continue - elif i.is_primitive_root(): - assert(i.is_primitive_root()); - print("Generator: %d" % i) - generator = i - break - else: - assert(neg_i.is_primitive_root()); - print("Generator: %d" % neg_i) - generator = neg_i - break - - -two_adicity = valuation(modulus - 1, 2); -trace = (modulus - 1) / 2**two_adicity; -two_adic_root_of_unity = generator^trace -print("2-adic Root of Unity: %d " % two_adic_root_of_unity) From 947c681edc23ab9c230d179eae93a0501311ba4b Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 16:47:48 +0100 Subject: [PATCH 068/364] make substrate build --- Cargo.lock | 10 +++++----- primitives/arkworks-curves/bls12_381/Cargo.toml | 6 +++--- primitives/arkworks-curves/bw6_761/Cargo.toml | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd6b8e1462394..1ef4673bf478e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -521,10 +521,10 @@ version = "0.4.0" dependencies = [ "ark-algebra-test-templates 0.4.0-alpha.7", "ark-bls12-381", - "ark-ec 0.4.0-alpha.6", - "ark-ff 0.4.0-alpha.6", + "ark-ec 0.4.0-alpha.7", + "ark-ff 0.4.0-alpha.7", "ark-models", - "ark-serialize 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "hex", "sp-io", @@ -548,10 +548,10 @@ version = "0.4.0-alpha.1" dependencies = [ "ark-algebra-test-templates 0.4.0-alpha.7", "ark-bw6-761", - "ark-ec 0.4.0-alpha.6", + "ark-ec 0.4.0-alpha.7", "ark-ff 0.4.0-alpha.7", "ark-models", - "ark-serialize 0.4.0-alpha.6", + "ark-serialize 0.4.0-alpha.7", "ark-std 0.4.0-alpha", "ark-sub-bls12-377", "sp-io", diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index f30e92dc881a2..12badc5e63aa6 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -10,16 +10,16 @@ license = "MIT/Apache-2.0" edition = "2021" [dependencies] -ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } hex = "^0.4.0" [features] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index bac9c712a2cd1..0dc03f5bc7eb3 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -13,14 +13,14 @@ edition = "2021" ark-ff = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } -ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } +ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } [features] default = [] From 1f85dd57041a663f0e6b245fed44fbd1ddba4691 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Thu, 29 Dec 2022 17:26:41 +0100 Subject: [PATCH 069/364] cleanup --- primitives/arkworks/Cargo.toml | 4 --- primitives/arkworks/tests/tests.rs | 56 ------------------------------ 2 files changed, 60 deletions(-) delete mode 100644 primitives/arkworks/tests/tests.rs diff --git a/primitives/arkworks/Cargo.toml b/primitives/arkworks/Cargo.toml index 2e9e8d4456e02..ad982c85f4a63 100644 --- a/primitives/arkworks/Cargo.toml +++ b/primitives/arkworks/Cargo.toml @@ -23,10 +23,6 @@ ark-ed-on-bls12-377 = { version = "0.4.0-alpha" } sp-std = { version = "5.0.0", default-features = false, path = "../std" } better_any = { version = "0.2.0" } -[dev-dependencies] -ark-sub-bls12-381 = { git = "https://github.com/achimcc/ark-sub-curves" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "release-0.4", default-features = false } - [features] default = ["std"] std = [ diff --git a/primitives/arkworks/tests/tests.rs b/primitives/arkworks/tests/tests.rs deleted file mode 100644 index 184cc84ba2354..0000000000000 --- a/primitives/arkworks/tests/tests.rs +++ /dev/null @@ -1,56 +0,0 @@ -use ark_algebra_test_templates::{msm::test_var_base_msm, test_group, test_pairing}; -use ark_ec::{pairing::Pairing, AffineRepr}; -use ark_sub_bls12_381::{ - Bls12_381 as Bls12_381_Host, Fr as BlsFr, G1Affine as G1Affine_Host, - G1Projective as G1Projective_Host, G2Affine as G2Affine_Host, - G2Projective as G2Projective_Host, HostFunctions, -}; -use sp_arkworks::bls12_381; -use sp_std::vec; - -pub struct Host {} - -impl HostFunctions for Host { - fn bls12_381_multi_miller_loop(a: Vec>, b: Vec>) -> Vec { - bls12_381::multi_miller_loop(a, b) - } - fn bls12_381_final_exponentiation(f12: &[u8]) -> Vec { - bls12_381::final_exponentiation(f12) - } - fn bls12_381_msm_g1(bases: Vec>, scalars: Vec>) -> Vec { - bls12_381::msm_g1(bases, scalars) - } - fn bls12_381_mul_projective_g1(base: Vec, scalar: Vec) -> Vec { - bls12_381::mul_projective_g1(base, scalar) - } - fn bls12_381_mul_affine_g1(base: Vec, scalar: Vec) -> Vec { - bls12_381::mul_affine_g1(base, scalar) - } - fn bls12_381_msm_g2(bases: Vec>, scalars: Vec>) -> Vec { - bls12_381::msm_g2(bases, scalars) - } - fn bls12_381_mul_projective_g2(base: Vec, scalar: Vec) -> Vec { - bls12_381::mul_projective_g2(base, scalar) - } - fn bls12_381_mul_affine_g2(base: Vec, scalar: Vec) -> Vec { - bls12_381::mul_affine_g2(base, scalar) - } -} - -type Bls12_381 = Bls12_381_Host; -type G1Affine = G1Affine_Host; -type G2Affine = G2Affine_Host; -type G1Projective = G1Projective_Host; -type G2Projective = G2Projective_Host; - -test_pairing!(pairing; crate::Bls12_381); -test_group!(g1; crate::G1Projective; sw); - -#[cfg(test)] -mod tests { - use super::*; - #[test] - fn bls12_381_msm() { - // test_var_base_msm::(); - } -} From 5e95506387bcaee42ca1fd2033d2aa1dd997ba5f Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 12:48:03 +0100 Subject: [PATCH 070/364] ark-sub -> sp-ark --- Cargo.lock | 166 +++++++++--------- .../arkworks-curves/bls12_377/Cargo.toml | 2 +- .../arkworks-curves/bls12_381/Cargo.toml | 2 +- primitives/arkworks-curves/bw6_761/Cargo.toml | 6 +- .../ed_on_bls12_377/Cargo.toml | 6 +- .../ed_on_bls12_381/Cargo.toml | 6 +- 6 files changed, 94 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8c3c6796bc3e0..ab78d4930bcc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -381,89 +381,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "ark-sub-bls12-377" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-bls12-377", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "sp-io", -] - -[[package]] -name = "ark-sub-bls12-381" -version = "0.4.0" -dependencies = [ - "ark-algebra-test-templates", - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-models", - "ark-serialize", - "ark-std", - "hex", - "sp-io", -] - -[[package]] -name = "ark-sub-bw6-761" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-bw6-761", - "ark-ec", - "ark-ff", - "ark-models", - "ark-serialize", - "ark-std", - "ark-sub-bls12-377", - "sp-io", -] - -[[package]] -name = "ark-sub-ed-on-bls12-377" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "ark-sub-bls12-377", - "sp-io", -] - -[[package]] -name = "ark-sub-ed-on-bls12-381" -version = "0.4.0-alpha.1" -dependencies = [ - "ark-algebra-test-templates", - "ark-curve-constraint-tests", - "ark-ec", - "ark-ed-on-bls12-381", - "ark-ff", - "ark-models", - "ark-r1cs-std", - "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", - "ark-serialize", - "ark-std", - "ark-sub-bls12-381", - "sp-io", -] - [[package]] name = "array-bytes" version = "4.2.0" @@ -9415,6 +9332,89 @@ dependencies = [ "sp-arithmetic", ] +[[package]] +name = "sp-ark-bls12-377" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-bls12-377", + "ark-curve-constraint-tests", + "ark-ec", + "ark-ff", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", + "ark-std", + "sp-io", +] + +[[package]] +name = "sp-ark-bls12-381" +version = "0.4.0" +dependencies = [ + "ark-algebra-test-templates", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", + "hex", + "sp-io", +] + +[[package]] +name = "sp-ark-bw6-761" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-models", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", + "sp-io", +] + +[[package]] +name = "sp-ark-ed-on-bls12-377" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-curve-constraint-tests", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", + "ark-std", + "sp-ark-bls12-377", + "sp-io", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381" +version = "0.4.0-alpha.1" +dependencies = [ + "ark-algebra-test-templates", + "ark-curve-constraint-tests", + "ark-ec", + "ark-ed-on-bls12-381", + "ark-ff", + "ark-models", + "ark-r1cs-std", + "ark-relations 0.4.0-alpha.1 (git+https://github.com/arkworks-rs/snark)", + "ark-serialize", + "ark-std", + "sp-ark-bls12-381", + "sp-io", +] + [[package]] name = "sp-arkworks" version = "0.0.1" diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 61577f91875de..52b3b846d48c2 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-bls12-377" +name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] description = "The BLS12-377 pairing-friendly elliptic curve, optimized for Substrate" diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 12badc5e63aa6..e9ba011600c8d 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-bls12-381" +name = "sp-ark-bls12-381" version = "0.4.0" authors = [ "achimcc, arkworks contributors" ] description = "The BLS12-381 pairing-friendly elliptic curve, optimized for Substrate" diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 0dc03f5bc7eb3..2e14d452c1d46 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-bw6-761" +name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] description = "The BW6-761 pairing-friendly elliptic curve, optimized for Substrate" @@ -14,7 +14,7 @@ ark-ff = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } +sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -24,5 +24,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "ark-sub-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 1a788faa3058e..012ee310ea5e9 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-ed-on-bls12-377" +name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve, optimized for Substrate" @@ -15,7 +15,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } -ark-sub-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } +sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -27,5 +27,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-sub-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std" ] r1cs = [ "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index e663bea2a6cc1..d480765a54234 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ark-sub-ed-on-bls12-381" +name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve, optimized for Substrate" @@ -15,7 +15,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } -ark-sub-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } +sp-ark-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -27,5 +27,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-sub-bls12-381/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std" ] r1cs = ["ark-r1cs-std"] \ No newline at end of file From d53d13872ddf575b905505b1a0d107755d65f1a0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 12:56:34 +0100 Subject: [PATCH 071/364] Lock file --- Cargo.lock | 339 ++++++++++------------------------------------------- 1 file changed, 62 insertions(+), 277 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 718b5096958dd..51099efa464c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,8 +52,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ "generic-array 0.14.6", -<<<<<<< HEAD -======= "rand_core 0.6.4", ] @@ -66,7 +64,6 @@ dependencies = [ "aes-soft", "aesni", "cipher 0.2.5", ->>>>>>> master ] [[package]] @@ -136,7 +133,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ "getrandom 0.2.8", -<<<<<<< HEAD "once_cell", "version_check", ] @@ -148,8 +144,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107" dependencies = [ "cfg-if", -======= ->>>>>>> master "once_cell", "version_check", ] @@ -198,12 +192,17 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.2.0" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0224938f92e7aef515fac2ff2d18bd1115c1394ddf4a092e0c87e8be9499ee5" + +[[package]] +name = "arc-swap" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] -<<<<<<< HEAD name = "ark-algebra-test-templates" version = "0.4.0-alpha.7" source = "git+https://github.com/arkworks-rs/algebra/?branch=releases#667ec3e82e86d168b5a4ba67bd97cacdc963a2f3" @@ -225,7 +224,7 @@ dependencies = [ [[package]] name = "ark-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" +source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" dependencies = [ "ark-ec", "ark-ff", @@ -235,7 +234,7 @@ dependencies = [ [[package]] name = "ark-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" +source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" dependencies = [ "ark-ec", "ark-ff", @@ -246,7 +245,7 @@ dependencies = [ [[package]] name = "ark-bw6-761" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" +source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" dependencies = [ "ark-bls12-377", "ark-ec", @@ -285,7 +284,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" +source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" dependencies = [ "ark-bls12-377", "ark-ec", @@ -296,7 +295,7 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-381" version = "0.4.0-alpha.1" -source = "git+https://github.com/arkworks-rs/curves#cba0c7ef0d72458b6e20796f02dfe423b9d7a84c" +source = "git+https://github.com/arkworks-rs/curves#0d2142c001c732c2a5e503b41156806b440d764c" dependencies = [ "ark-bls12-381", "ark-ec", @@ -442,12 +441,6 @@ dependencies = [ "rand 0.8.5", "rayon", ] -======= -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" ->>>>>>> master [[package]] name = "array-bytes" @@ -474,11 +467,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] -<<<<<<< HEAD -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "asn1-rs" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -549,7 +537,6 @@ dependencies = [ name = "asn1_der" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] @@ -573,49 +560,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] -<<<<<<< HEAD -name = "async-channel" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" -dependencies = [ - "async-lock", - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -======= ->>>>>>> master name = "async-io" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -667,15 +611,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "async-task" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" - -[[package]] -======= ->>>>>>> master name = "async-trait" version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -733,7 +668,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.30.0", + "object 0.30.1", "rustc-demangle", ] @@ -845,7 +780,7 @@ name = "beefy-merkle-tree" version = "4.0.0-dev" dependencies = [ "array-bytes", - "env_logger", + "env_logger 0.9.3", "log", "sp-api", "sp-beefy", @@ -976,8 +911,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array 0.14.6", -<<<<<<< HEAD -======= ] [[package]] @@ -988,7 +921,6 @@ checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" dependencies = [ "block-padding 0.2.1", "cipher 0.2.5", ->>>>>>> master ] [[package]] @@ -1001,25 +933,10 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "blocking" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", -] -======= name = "block-padding" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" ->>>>>>> master [[package]] name = "bs58" @@ -1237,11 +1154,7 @@ dependencies = [ "js-sys", "num-integer", "num-traits", -<<<<<<< HEAD - "time", -======= "time 0.1.45", ->>>>>>> master "wasm-bindgen", "winapi", ] @@ -1446,15 +1359,12 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "cpuid-bool" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" [[package]] ->>>>>>> master name = "cranelift-bforest" version = "0.88.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1553,11 +1463,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "crc" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1576,7 +1481,6 @@ checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" name = "crc32fast" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", @@ -1698,8 +1602,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.6", -<<<<<<< HEAD -======= "subtle", ] @@ -1710,7 +1612,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" dependencies = [ "generic-array 0.14.6", ->>>>>>> master "subtle", ] @@ -1859,11 +1760,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "data-encoding" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "darling" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1902,7 +1798,6 @@ dependencies = [ name = "data-encoding" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] @@ -1937,13 +1832,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ -======= name = "der-parser" version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1971,6 +1859,17 @@ dependencies = [ "rusticata-macros", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "derive_builder" version = "0.11.2" @@ -1987,15 +1886,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ "darling", ->>>>>>> master "proc-macro2", "quote", "syn", ] [[package]] -<<<<<<< HEAD -======= name = "derive_builder_macro" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2006,7 +1902,6 @@ dependencies = [ ] [[package]] ->>>>>>> master name = "derive_more" version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2100,12 +1995,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "dissimilar" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5f0c7e4bd266b8ab2550e6238d2e74977c23c15536ac7be45e9c95e2e3fbbb" -======= name = "displaydoc" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2115,7 +2004,6 @@ dependencies = [ "quote", "syn", ] ->>>>>>> master [[package]] name = "dissimilar" @@ -2216,11 +2104,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek 3.2.0", -<<<<<<< HEAD "hashbrown 0.12.3", -======= - "hashbrown", ->>>>>>> master "hex", "rand_core 0.6.4", "sha2 0.9.9", @@ -2246,12 +2130,9 @@ dependencies = [ "ff", "generic-array 0.14.6", "group", -<<<<<<< HEAD -======= "hkdf", "pem-rfc7468", "pkcs8", ->>>>>>> master "rand_core 0.6.4", "sec1", "subtle", @@ -2303,6 +2184,19 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "environmental" version = "1.1.4" @@ -2393,11 +2287,11 @@ checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" [[package]] name = "file-per-thread-logger" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger", + "env_logger 0.10.0", "log", ] @@ -2415,9 +2309,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22349c6a11563a202d95772a68e0fcf56119e74ea8a2a19cf2301460fcd0df5" +checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" dependencies = [ "either", "futures", @@ -3051,8 +2945,6 @@ dependencies = [ "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", -<<<<<<< HEAD -======= ] [[package]] @@ -3063,7 +2955,6 @@ checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" dependencies = [ "opaque-debug 0.3.0", "polyval 0.4.5", ->>>>>>> master ] [[package]] @@ -3114,12 +3005,12 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ "aho-corasick", - "bstr 0.2.17", + "bstr 1.1.0", "fnv", "log", "regex", @@ -3430,15 +3321,12 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] ->>>>>>> master name = "idna" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3524,11 +3412,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", -<<<<<<< HEAD "hashbrown 0.12.3", -======= - "hashbrown", ->>>>>>> master "serde", ] @@ -3557,11 +3441,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "interceptor" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3584,7 +3463,6 @@ dependencies = [ name = "io-lifetimes" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] @@ -4073,10 +3951,7 @@ dependencies = [ "prost-build", "rand 0.8.5", "rw-stream-sink", -<<<<<<< HEAD -======= "sec1", ->>>>>>> master "sha2 0.10.6", "smallvec", "thiserror", @@ -4411,15 +4286,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -<<<<<<< HEAD -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6874d66543c4f7e26e3b8ca9a6bead351563a13ab4fafd43c7927f7c0d6c12" -======= version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" ->>>>>>> master dependencies = [ "futures", "libp2p-core", @@ -4593,7 +4462,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -4674,11 +4543,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "md-5" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4691,7 +4555,6 @@ dependencies = [ name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] @@ -4737,7 +4600,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -5409,15 +5272,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -<<<<<<< HEAD -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" -======= version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" ->>>>>>> master dependencies = [ "memchr", "minimal-lexical", @@ -5518,26 +5375,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown", + "hashbrown 0.12.3", "indexmap", "memchr", ] [[package]] name = "object" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239da7f290cfa979f43f85a8efeee9a8a76d0827c356d37f9d3d7254d6b537fb" +checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" dependencies = [ "memchr", ] [[package]] -<<<<<<< HEAD -name = "once_cell" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "oid-registry" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5559,7 +5411,6 @@ dependencies = [ name = "once_cell" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] @@ -5608,8 +5459,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] -<<<<<<< HEAD -======= name = "p256" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5632,7 +5481,6 @@ dependencies = [ ] [[package]] ->>>>>>> master name = "packed_simd_2" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5960,7 +5808,7 @@ dependencies = [ "array-bytes", "assert_matches", "bitflags", - "env_logger", + "env_logger 0.9.3", "frame-benchmarking", "frame-support", "frame-system", @@ -6309,7 +6157,7 @@ name = "pallet-mmr" version = "4.0.0-dev" dependencies = [ "array-bytes", - "env_logger", + "env_logger 0.9.3", "frame-benchmarking", "frame-support", "frame-system", @@ -7224,11 +7072,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] -<<<<<<< HEAD -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "pem" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7250,7 +7093,6 @@ dependencies = [ name = "percent-encoding" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] @@ -7499,9 +7341,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8992a85d8e93a28bdf76137db888d3874e3b230dee5ed8bebac4c9f7617773" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", "syn", @@ -7705,11 +7547,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "quote" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "quinn-proto" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7731,7 +7568,6 @@ dependencies = [ name = "quote" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", @@ -7862,11 +7698,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "rcgen" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7895,7 +7726,6 @@ dependencies = [ name = "redox_syscall" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", @@ -8087,25 +7917,9 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "rtoolbox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "rustc-demangle" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] @@ -8136,8 +7950,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver 1.0.16", -<<<<<<< HEAD -======= ] [[package]] @@ -8147,7 +7959,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" dependencies = [ "nom", ->>>>>>> master ] [[package]] @@ -8180,10 +7991,6 @@ dependencies = [ [[package]] name = "rustls" -<<<<<<< HEAD -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" @@ -8199,7 +8006,6 @@ dependencies = [ name = "rustls" version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" dependencies = [ "log", @@ -8735,7 +8541,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "criterion", - "env_logger", + "env_logger 0.9.3", "lru", "num_cpus", "parity-scale-codec", @@ -9202,7 +9008,7 @@ name = "sc-rpc" version = "4.0.0-dev" dependencies = [ "assert_matches", - "env_logger", + "env_logger 0.9.3", "futures", "jsonrpsee", "log", @@ -9643,8 +9449,6 @@ name = "scratch" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" -<<<<<<< HEAD -======= [[package]] name = "sct" @@ -9655,7 +9459,6 @@ dependencies = [ "ring", "untrusted", ] ->>>>>>> master [[package]] name = "sct" @@ -10865,7 +10668,7 @@ dependencies = [ "array-bytes", "criterion", "hash-db", - "hashbrown", + "hashbrown 0.12.3", "lazy_static", "lru", "memory-db", @@ -11350,11 +11153,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -======= name = "substring" version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11367,7 +11165,6 @@ dependencies = [ name = "subtle" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" ->>>>>>> master checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] @@ -11612,9 +11409,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.23.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" dependencies = [ "autocfg", "bytes", @@ -11871,7 +11668,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", "log", "rustc-hex", "smallvec", @@ -11981,15 +11778,9 @@ dependencies = [ [[package]] name = "trybuild" -<<<<<<< HEAD -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed01de3de062db82c0920b5cabe804f88d599a3f217932292597c678c903754d" -======= version = "1.0.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "654bfc024d30963fce210f22f98956407fe8c8365eb85a1fa530f6f8844137ed" ->>>>>>> master dependencies = [ "dissimilar", "glob", @@ -12006,8 +11797,6 @@ name = "tt-call" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" -<<<<<<< HEAD -======= [[package]] name = "turn" @@ -12027,7 +11816,6 @@ dependencies = [ "tokio", "webrtc-util", ] ->>>>>>> master [[package]] name = "twox-hash" @@ -13202,8 +12990,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] -<<<<<<< HEAD -======= name = "yasna" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -13213,7 +12999,6 @@ dependencies = [ ] [[package]] ->>>>>>> master name = "zeroize" version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" From 86d805c16f94c6f49c1307958c296e8c1bc32f60 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 13:04:30 +0100 Subject: [PATCH 072/364] curves: add repository to Cargo.toml --- primitives/arkworks-curves/bls12_377/Cargo.toml | 1 + primitives/arkworks-curves/bls12_381/Cargo.toml | 1 + primitives/arkworks-curves/bw6_761/Cargo.toml | 1 + primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml | 1 + primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml | 1 + 5 files changed, 5 insertions(+) diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 52b3b846d48c2..9236c59a40faf 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -2,6 +2,7 @@ name = "sp-ark-bls12-377" version = "0.4.0-alpha.1" authors = [ "arkworks contributors" ] +repository = "https://github.com/paritytech/substrate/" description = "The BLS12-377 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index e9ba011600c8d..f7b05f6a9f888 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -2,6 +2,7 @@ name = "sp-ark-bls12-381" version = "0.4.0" authors = [ "achimcc, arkworks contributors" ] +repository = "https://github.com/paritytech/substrate/" description = "The BLS12-381 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 2e14d452c1d46..cd6318eee2c7e 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -2,6 +2,7 @@ name = "sp-ark-bw6-761" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] +repository = "https://github.com/paritytech/substrate/" description = "The BW6-761 pairing-friendly elliptic curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 012ee310ea5e9..1b1a682c05185 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -2,6 +2,7 @@ name = "sp-ark-ed-on-bls12-377" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] +repository = "https://github.com/paritytech/substrate/" description = "A Twisted Edwards curve defined over the scalar field of the BLS12-377 curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index d480765a54234..0e6001ee96d36 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -2,6 +2,7 @@ name = "sp-ark-ed-on-bls12-381" version = "0.4.0-alpha.1" authors = [ "achimcc, arkworks contributors" ] +repository = "https://github.com/paritytech/substrate/" description = "A Twisted Edwards curve defined over the scalar field of the BLS12-381 curve, optimized for Substrate" keywords = ["cryptography", "finite-fields", "elliptic-curves" ] categories = ["cryptography"] From d0160541f9d6bc559ccc594814e5557389ae129a Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 13:47:57 +0100 Subject: [PATCH 073/364] disable default features for curves --- primitives/arkworks-curves/bls12_377/Cargo.toml | 5 ++--- primitives/arkworks-curves/bls12_381/Cargo.toml | 4 ++-- primitives/arkworks-curves/bw6_761/Cargo.toml | 4 ++-- primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml | 4 ++-- primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml | 4 ++-- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 9236c59a40faf..2840ca853182b 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -15,8 +15,7 @@ ark-ff = { version="0.4.0-alpha", default-features = false } ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = true } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } - -ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -29,7 +28,7 @@ ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-featu [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index f7b05f6a9f888..84bf49ca27333 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -14,7 +14,7 @@ edition = "2021" ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -25,7 +25,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index cd6318eee2c7e..10e74c4f7b614 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" [dependencies] ark-ff = { version="0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves" } +ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } ark-models = { path = "../../arkworks-models" } @@ -25,5 +25,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std", "ark-bw6-761/std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 1b1a682c05185..0af7d0f4847b4 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" [dependencies] ark-ff = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } @@ -28,5 +28,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std", "ark-ed-on-bls12-377/std" ] r1cs = [ "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index 0e6001ee96d36..2ab8b2854f44c 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -15,7 +15,7 @@ ark-ff = { version = "0.4.0-alpha", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } ark-serialize = { version = "0.4.0-alpha", default-features = false } -ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves" } +ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } sp-ark-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } ark-models = { path = "../../arkworks-models" } sp-io = { path = "../../io" } @@ -28,5 +28,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std", "ark-ed-on-bls12-381/std" ] r1cs = ["ark-r1cs-std"] \ No newline at end of file From 3b6dbfc02704b9813cf4cc412cdab3ae698dc2f6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:02:15 +0100 Subject: [PATCH 074/364] disable default features for curves --- primitives/arkworks-curves/bls12_381/Cargo.toml | 4 ++-- primitives/arkworks-models/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 84bf49ca27333..9f4de4bf90422 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -15,7 +15,7 @@ ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -ark-models = { path = "../../arkworks-models" } +ark-models = { path = "../../arkworks-models", default-features = false } sp-io = { path = "../../io" } [dev-dependencies] @@ -25,7 +25,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml index 0a23cbed7e0a2..eb652829199de 100644 --- a/primitives/arkworks-models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -30,5 +30,5 @@ itertools = { version = "0.10", default-features = false } [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std" ] parallel = [ "std", "rayon", "ark-std/parallel" ] From 8bce69823ec2d31ad8a9c561574d5c57f65bf2e7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:09:00 +0100 Subject: [PATCH 075/364] disable default features for curves --- primitives/arkworks-models/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml index eb652829199de..3136d543a18d8 100644 --- a/primitives/arkworks-models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -23,12 +23,12 @@ derivative = { version = "2", features = ["use_core"] } num-traits = { version = "0.2", default-features = false } rayon = { version = "1", optional = true } zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } -hashbrown = "0.13.1" +hashbrown = { version = "0.13.1", default-features = false } itertools = { version = "0.10", default-features = false } [dev-dependencies] [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std", "hashbrown/std" ] parallel = [ "std", "rayon", "ark-std/parallel" ] From e8241216441e9e0875272fec8ed94b81825a1c80 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:13:38 +0100 Subject: [PATCH 076/364] disable default features for curves --- primitives/arkworks-models/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml index 3136d543a18d8..cd2f736ed7c47 100644 --- a/primitives/arkworks-models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -23,12 +23,12 @@ derivative = { version = "2", features = ["use_core"] } num-traits = { version = "0.2", default-features = false } rayon = { version = "1", optional = true } zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } -hashbrown = { version = "0.13.1", default-features = false } +hashbrown = { version = "^0.13.1", default-features = false } itertools = { version = "0.10", default-features = false } [dev-dependencies] [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std", "hashbrown/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std" ] parallel = [ "std", "rayon", "ark-std/parallel" ] From e34f7f4595e5a3320e9b5ff4475d6d85114fd896 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:29:57 +0100 Subject: [PATCH 077/364] disable default features for curves --- primitives/arkworks-curves/bls12_381/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 9f4de4bf90422..a7b5cd263bdfa 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -16,7 +16,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io" } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } @@ -25,7 +25,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std", "sp-io/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] From d9fd17ba78346991cdffa37c677afb687b2ac1bd Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:36:13 +0100 Subject: [PATCH 078/364] curve features --- primitives/arkworks-curves/bls12_381/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index a7b5cd263bdfa..705a30432fc25 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -14,7 +14,7 @@ edition = "2021" ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } +ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } ark-models = { path = "../../arkworks-models", default-features = false } sp-io = { path = "../../io", default-features = false } From 6d4e9a1f24e07de80115d93a1efb211b5f6c0fc7 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 14:47:48 +0100 Subject: [PATCH 079/364] fix feature flags --- primitives/arkworks-curves/bls12_377/Cargo.toml | 6 +++--- primitives/arkworks-curves/bw6_761/Cargo.toml | 6 +++--- primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml | 6 +++--- primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/primitives/arkworks-curves/bls12_377/Cargo.toml b/primitives/arkworks-curves/bls12_377/Cargo.toml index 2840ca853182b..8355439ec722b 100644 --- a/primitives/arkworks-curves/bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/bls12_377/Cargo.toml @@ -16,8 +16,8 @@ ark-r1cs-std = { version="0.4.0-alpha", default-features = false, optional = tru ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-features = false } -ark-models = { path = "../../arkworks-models" } -sp-io = { path = "../../io" } +ark-models = { path = "../../arkworks-models", default-features = false } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } @@ -28,7 +28,7 @@ ark-curve-constraint-tests = { path = "../curve-constraint-tests", default-featu [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-377/std", "sp-io/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] diff --git a/primitives/arkworks-curves/bw6_761/Cargo.toml b/primitives/arkworks-curves/bw6_761/Cargo.toml index 10e74c4f7b614..a9039dadb12d2 100644 --- a/primitives/arkworks-curves/bw6_761/Cargo.toml +++ b/primitives/arkworks-curves/bw6_761/Cargo.toml @@ -16,8 +16,8 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-bw6-761 = { git = "https://github.com/arkworks-rs/curves", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "base_field" ] } -ark-models = { path = "../../arkworks-models" } -sp-io = { path = "../../io" } +ark-models = { path = "../../arkworks-models", default-features = false } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } @@ -25,5 +25,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std", "ark-bw6-761/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-ec/std", "sp-ark-bls12-377/std", "ark-bw6-761/std", "ark-models/std", "sp-io/std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml index 0af7d0f4847b4..61f908d4824bf 100644 --- a/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml @@ -17,8 +17,8 @@ ark-ed-on-bls12-377 = { git = "https://github.com/arkworks-rs/curves", default-f ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = true } sp-ark-bls12-377 = { version = "0.4.0-alpha", path = "../bls12_377", default-features = false, features = [ "scalar_field" ] } -ark-models = { path = "../../arkworks-models" } -sp-io = { path = "../../io" } +ark-models = { path = "../../arkworks-models", default-features = false } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } @@ -28,5 +28,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std", "ark-ed-on-bls12-377/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-377/std", "ark-ed-on-bls12-377/std", "ark-models/std", "sp-io/std" ] r1cs = [ "ark-r1cs-std" ] diff --git a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml index 2ab8b2854f44c..928e1d3ce197f 100644 --- a/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml @@ -17,8 +17,8 @@ ark-r1cs-std = { version = "0.4.0-alpha", default-features = false, optional = t ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ed-on-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false } sp-ark-bls12-381 = { version = "0.4.0-alpha", path = "../bls12_381", default-features = false, features = [ "scalar_field" ] } -ark-models = { path = "../../arkworks-models" } -sp-io = { path = "../../io" } +ark-models = { path = "../../arkworks-models", default-features = false } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false } @@ -28,5 +28,5 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", [features] default = [] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std", "ark-ed-on-bls12-381/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "sp-ark-bls12-381/std", "ark-ed-on-bls12-381/std", "ark-models/std", "sp-io/std" ] r1cs = ["ark-r1cs-std"] \ No newline at end of file From 40316330ac1ab1ce9cf8557866bb6c1283505742 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:11:54 +0100 Subject: [PATCH 080/364] fix feature flags --- primitives/arkworks-models/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml index cd2f736ed7c47..ecd38c3e685b0 100644 --- a/primitives/arkworks-models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -19,9 +19,9 @@ ark-serialize = { version = "0.4.0-alpha", default-features = false } ark-ec = { version = "0.4.0-alpha", default-features = false } ark-ff = { version = "0.4.0-alpha", default-features = false } ark-poly = { version = "0.4.0-alpha", default-features = false } -derivative = { version = "2", features = ["use_core"] } +derivative = { version = "2", features = ["use_core"], default-features = false } num-traits = { version = "0.2", default-features = false } -rayon = { version = "1", optional = true } +rayon = { version = "1",default-features = false, optional = true } zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } hashbrown = { version = "^0.13.1", default-features = false } itertools = { version = "0.10", default-features = false } From a4b99a64a54b749b28fa715b5e83dff8d7471e68 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:19:29 +0100 Subject: [PATCH 081/364] no_std --- primitives/arkworks-models/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/primitives/arkworks-models/src/lib.rs b/primitives/arkworks-models/src/lib.rs index 97b60f36bf8af..cd83ca4b950d6 100644 --- a/primitives/arkworks-models/src/lib.rs +++ b/primitives/arkworks-models/src/lib.rs @@ -1,3 +1,4 @@ +#![cfg_attr(not(feature = "std"), no_std)] pub mod bls12; pub mod bw6; pub use ark_ec::{ From 1415106c3f2a18942baeaee16f548f8fb640e386 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:23:39 +0100 Subject: [PATCH 082/364] default features std --- primitives/arkworks-curves/bls12_381/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 705a30432fc25..4260bdb030b32 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -16,7 +16,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } +sp-io = { path = "../../io" } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } From 4792a490f1b0356a09069911ab6eeab8e899d337 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:26:10 +0100 Subject: [PATCH 083/364] default features std --- primitives/arkworks-curves/bls12_381/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 4260bdb030b32..713bd74d6049b 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -16,7 +16,7 @@ ark-std = { version = "0.4.0-alpha", default-features = false } ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io" } +sp-io = { path = "../../io", default-features = false } [dev-dependencies] ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } @@ -25,7 +25,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std", "sp-io/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] From 34784ae1091d187feaa2071c6b0f545ca2b452a5 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:28:31 +0100 Subject: [PATCH 084/364] sp-io/std --- primitives/arkworks-curves/bls12_381/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 713bd74d6049b..705a30432fc25 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -25,7 +25,7 @@ hex = "^0.4.0" [features] default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std" ] +std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std", "sp-io/std" ] curve = [ "scalar_field", "base_field" ] scalar_field = [] From 7aca27453ae3c8f196aef85febe538a1f1d97da0 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Fri, 6 Jan 2023 15:47:44 +0100 Subject: [PATCH 085/364] fix feature flags --- Cargo.lock | 1 - primitives/arkworks-curves/bls12_381/Cargo.toml | 1 - primitives/arkworks-models/Cargo.toml | 1 - 3 files changed, 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 51099efa464c2..62352f05756d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -439,7 +439,6 @@ checksum = "cc5b16d734e9b2e43886ff586755219df7fb9639cc04ab00c7e636708a5ba06a" dependencies = [ "num-traits", "rand 0.8.5", - "rayon", ] [[package]] diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml index 705a30432fc25..c0e163106762c 100644 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ b/primitives/arkworks-curves/bls12_381/Cargo.toml @@ -26,7 +26,6 @@ hex = "^0.4.0" [features] default = [ "curve" ] std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std", "sp-io/std" ] - curve = [ "scalar_field", "base_field" ] scalar_field = [] base_field = [] diff --git a/primitives/arkworks-models/Cargo.toml b/primitives/arkworks-models/Cargo.toml index ecd38c3e685b0..20fe05c2fdc0d 100644 --- a/primitives/arkworks-models/Cargo.toml +++ b/primitives/arkworks-models/Cargo.toml @@ -31,4 +31,3 @@ itertools = { version = "0.10", default-features = false } [features] default = [] std = [ "ark-std/std", "ark-ff/std", "ark-serialize/std", "ark-ec/std", "ark-poly/std", "num-traits/std", "zeroize/std" ] -parallel = [ "std", "rayon", "ark-std/parallel" ] From ee7db91e1f1aeaa7e734d18c35107094430bb0b6 Mon Sep 17 00:00:00 2001 From: Achim Schneider Date: Mon, 9 Jan 2023 15:06:26 +0100 Subject: [PATCH 086/364] goodbye ark-curves and ark-models --- primitives/arkworks-curves/LICENSE-APACHE | 1 - primitives/arkworks-curves/LICENSE-MIT | 1 - .../arkworks-curves/bls12_377/LICENSE-APACHE | 1 - .../arkworks-curves/bls12_377/LICENSE-MIT | 1 - .../bls12_377/src/constraints/curves.rs | 39 -- .../bls12_377/src/constraints/fields.rs | 32 - .../bls12_377/src/constraints/mod.rs | 163 ----- .../bls12_377/src/constraints/pairing.rs | 13 - .../bls12_377/src/curves/g1.rs | 282 --------- .../bls12_377/src/curves/g2.rs | 147 ----- .../bls12_377/src/curves/mod.rs | 92 --- .../bls12_377/src/curves/tests.rs | 7 - .../arkworks-curves/bls12_377/src/lib.rs | 30 - .../arkworks-curves/bls12_381/Cargo.toml | 32 - .../bls12_381/src/curves/g1.rs | 257 -------- .../bls12_381/src/curves/g2.rs | 358 ----------- .../bls12_381/src/curves/mod.rs | 89 --- .../g1_compressed_valid_test_vectors.dat | Bin 48000 -> 0 bytes .../g1_uncompressed_valid_test_vectors.dat | Bin 96000 -> 0 bytes .../g2_compressed_valid_test_vectors.dat | Bin 96000 -> 0 bytes .../g2_uncompressed_valid_test_vectors.dat | Bin 192000 -> 0 bytes .../bls12_381/src/curves/tests/mod.rs | 117 ---- .../bls12_381/src/curves/util.rs | 207 ------- .../arkworks-curves/bls12_381/src/lib.rs | 26 - primitives/arkworks-curves/bw6_761/Cargo.toml | 29 - .../arkworks-curves/bw6_761/LICENSE-APACHE | 1 - .../arkworks-curves/bw6_761/LICENSE-MIT | 1 - .../arkworks-curves/bw6_761/src/curves/g1.rs | 123 ---- .../arkworks-curves/bw6_761/src/curves/g2.rs | 124 ---- .../arkworks-curves/bw6_761/src/curves/mod.rs | 104 ---- .../bw6_761/src/curves/tests.rs | 8 - primitives/arkworks-curves/bw6_761/src/lib.rs | 28 - .../curve-constraint-tests/Cargo.toml | 25 - .../curve-constraint-tests/LICENSE-APACHE | 1 - .../curve-constraint-tests/LICENSE-MIT | 1 - .../curve-constraint-tests/src/lib.rs | 580 ------------------ .../ed_on_bls12_377/Cargo.toml | 32 - .../ed_on_bls12_377/LICENSE-APACHE | 1 - .../ed_on_bls12_377/LICENSE-MIT | 1 - .../ed_on_bls12_377/scripts/base_field.sage | 28 - .../ed_on_bls12_377/scripts/scalar_field.sage | 28 - .../ed_on_bls12_377/src/constraints/curves.rs | 11 - .../ed_on_bls12_377/src/constraints/fields.rs | 11 - .../ed_on_bls12_377/src/constraints/mod.rs | 107 ---- .../ed_on_bls12_377/src/curves/mod.rs | 140 ----- .../ed_on_bls12_377/src/curves/tests.rs | 4 - .../ed_on_bls12_377/src/lib.rs | 24 - .../ed_on_bls12_381/Cargo.toml | 32 - .../ed_on_bls12_381/src/curves/mod.rs | 264 -------- .../ed_on_bls12_381/src/curves/tests.rs | 5 - .../ed_on_bls12_381/src/lib.rs | 24 - primitives/arkworks-models/Cargo.toml | 33 - primitives/arkworks-models/src/bls12/g1.rs | 57 -- primitives/arkworks-models/src/bls12/g2.rs | 56 -- primitives/arkworks-models/src/bls12/mod.rs | 87 --- primitives/arkworks-models/src/bw6/g1.rs | 57 -- primitives/arkworks-models/src/bw6/g2.rs | 58 -- primitives/arkworks-models/src/bw6/mod.rs | 80 --- primitives/arkworks-models/src/lib.rs | 7 - .../bls12_377 => arkworks/test}/Cargo.toml | 11 +- primitives/arkworks/test/lib.rs | 2 + primitives/arkworks/test/tests/bls12_377.rs | 0 62 files changed, 8 insertions(+), 4072 deletions(-) delete mode 120000 primitives/arkworks-curves/LICENSE-APACHE delete mode 120000 primitives/arkworks-curves/LICENSE-MIT delete mode 120000 primitives/arkworks-curves/bls12_377/LICENSE-APACHE delete mode 120000 primitives/arkworks-curves/bls12_377/LICENSE-MIT delete mode 100644 primitives/arkworks-curves/bls12_377/src/constraints/curves.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/constraints/fields.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/constraints/mod.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/curves/g1.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/curves/g2.rs delete mode 100644 primitives/arkworks-curves/bls12_377/src/curves/mod.rs delete mode 100755 primitives/arkworks-curves/bls12_377/src/curves/tests.rs delete mode 100755 primitives/arkworks-curves/bls12_377/src/lib.rs delete mode 100644 primitives/arkworks-curves/bls12_381/Cargo.toml delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/g1.rs delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/g2.rs delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/mod.rs delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/tests/g2_uncompressed_valid_test_vectors.dat delete mode 100755 primitives/arkworks-curves/bls12_381/src/curves/tests/mod.rs delete mode 100644 primitives/arkworks-curves/bls12_381/src/curves/util.rs delete mode 100755 primitives/arkworks-curves/bls12_381/src/lib.rs delete mode 100644 primitives/arkworks-curves/bw6_761/Cargo.toml delete mode 120000 primitives/arkworks-curves/bw6_761/LICENSE-APACHE delete mode 120000 primitives/arkworks-curves/bw6_761/LICENSE-MIT delete mode 100644 primitives/arkworks-curves/bw6_761/src/curves/g1.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/curves/g2.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/curves/mod.rs delete mode 100644 primitives/arkworks-curves/bw6_761/src/curves/tests.rs delete mode 100755 primitives/arkworks-curves/bw6_761/src/lib.rs delete mode 100644 primitives/arkworks-curves/curve-constraint-tests/Cargo.toml delete mode 120000 primitives/arkworks-curves/curve-constraint-tests/LICENSE-APACHE delete mode 120000 primitives/arkworks-curves/curve-constraint-tests/LICENSE-MIT delete mode 100644 primitives/arkworks-curves/curve-constraint-tests/src/lib.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/Cargo.toml delete mode 120000 primitives/arkworks-curves/ed_on_bls12_377/LICENSE-APACHE delete mode 120000 primitives/arkworks-curves/ed_on_bls12_377/LICENSE-MIT delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/scripts/base_field.sage delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/scripts/scalar_field.sage delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/curves.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/fields.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/constraints/mod.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/curves/mod.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_377/src/curves/tests.rs delete mode 100755 primitives/arkworks-curves/ed_on_bls12_377/src/lib.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_381/Cargo.toml delete mode 100644 primitives/arkworks-curves/ed_on_bls12_381/src/curves/mod.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_381/src/curves/tests.rs delete mode 100644 primitives/arkworks-curves/ed_on_bls12_381/src/lib.rs delete mode 100644 primitives/arkworks-models/Cargo.toml delete mode 100644 primitives/arkworks-models/src/bls12/g1.rs delete mode 100644 primitives/arkworks-models/src/bls12/g2.rs delete mode 100644 primitives/arkworks-models/src/bls12/mod.rs delete mode 100644 primitives/arkworks-models/src/bw6/g1.rs delete mode 100644 primitives/arkworks-models/src/bw6/g2.rs delete mode 100644 primitives/arkworks-models/src/bw6/mod.rs delete mode 100644 primitives/arkworks-models/src/lib.rs rename primitives/{arkworks-curves/bls12_377 => arkworks/test}/Cargo.toml (77%) create mode 100644 primitives/arkworks/test/lib.rs create mode 100644 primitives/arkworks/test/tests/bls12_377.rs diff --git a/primitives/arkworks-curves/LICENSE-APACHE b/primitives/arkworks-curves/LICENSE-APACHE deleted file mode 120000 index 965b606f331b5..0000000000000 --- a/primitives/arkworks-curves/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/LICENSE-MIT b/primitives/arkworks-curves/LICENSE-MIT deleted file mode 120000 index 76219eb72e852..0000000000000 --- a/primitives/arkworks-curves/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/bls12_377/LICENSE-APACHE b/primitives/arkworks-curves/bls12_377/LICENSE-APACHE deleted file mode 120000 index 965b606f331b5..0000000000000 --- a/primitives/arkworks-curves/bls12_377/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/primitives/arkworks-curves/bls12_377/LICENSE-MIT b/primitives/arkworks-curves/bls12_377/LICENSE-MIT deleted file mode 120000 index 76219eb72e852..0000000000000 --- a/primitives/arkworks-curves/bls12_377/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/primitives/arkworks-curves/bls12_377/src/constraints/curves.rs b/primitives/arkworks-curves/bls12_377/src/constraints/curves.rs deleted file mode 100644 index 90ab32ffc418f..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/constraints/curves.rs +++ /dev/null @@ -1,39 +0,0 @@ -use ark_ec::{bls12::Bls12Config, CurveConfig}; -use ark_r1cs_std::{ - fields::fp::FpVar, - groups::{bls12, curves::twisted_edwards::AffineVar as TEAffineVar}, -}; - -use crate::Config; - -/// An element of G1 in the BLS12-377 bilinear group. -pub type G1Var = bls12::G1Var; -/// An element of G2 in the BLS12-377 bilinear group. -pub type G2Var = bls12::G2Var; - -/// An element of G1 (in TE Affine form) in the BLS12-377 bilinear group. -pub type G1TEAffineVar = TEAffineVar< - ::G1Config, - FpVar<<::G1Config as CurveConfig>::BaseField>, ->; - -/// Represents the cached precomputation that can be performed on a G1 element -/// which enables speeding up pairing computation. -pub type G1PreparedVar = bls12::G1PreparedVar; -/// Represents the cached precomputation that can be performed on a G2 element -/// which enables speeding up pairing computation. -pub type G2PreparedVar = bls12::G2PreparedVar; - -#[test] -fn test() { - use ark_ec::models::bls12::Bls12Config; - ark_curve_constraint_tests::curves::sw_test::<::G1Config, G1Var>() - .unwrap(); - ark_curve_constraint_tests::curves::te_test::< - ::G1Config, - G1TEAffineVar, - >() - .unwrap(); - ark_curve_constraint_tests::curves::sw_test::<::G2Config, G2Var>() - .unwrap(); -} diff --git a/primitives/arkworks-curves/bls12_377/src/constraints/fields.rs b/primitives/arkworks-curves/bls12_377/src/constraints/fields.rs deleted file mode 100644 index 2aa2c3b684b78..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/constraints/fields.rs +++ /dev/null @@ -1,32 +0,0 @@ -use ark_r1cs_std::fields::{fp::FpVar, fp12::Fp12Var, fp2::Fp2Var, fp6_3over2::Fp6Var}; - -use crate::{Fq, Fq12Config, Fq2Config, Fq6Config}; - -/// A variable that is the R1CS equivalent of `crate::Fq`. -pub type FqVar = FpVar; - -/// A variable that is the R1CS equivalent of `crate::Fq2`. -pub type Fq2Var = Fp2Var; -/// A variable that is the R1CS equivalent of `crate::Fq6`. -pub type Fq6Var = Fp6Var; -/// A variable that is the R1CS equivalent of `crate::Fq12`. -pub type Fq12Var = Fp12Var; - -#[test] -fn bls12_377_field_test() { - use super::*; - use crate::{Fq, Fq12, Fq2, Fq6}; - use ark_curve_constraint_tests::fields::*; - - field_test::<_, _, FqVar>().unwrap(); - frobenius_tests::(13).unwrap(); - - field_test::<_, _, Fq2Var>().unwrap(); - frobenius_tests::(13).unwrap(); - - field_test::<_, _, Fq6Var>().unwrap(); - frobenius_tests::(13).unwrap(); - - field_test::<_, _, Fq12Var>().unwrap(); - frobenius_tests::(13).unwrap(); -} diff --git a/primitives/arkworks-curves/bls12_377/src/constraints/mod.rs b/primitives/arkworks-curves/bls12_377/src/constraints/mod.rs deleted file mode 100644 index db99c86c8ac50..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/constraints/mod.rs +++ /dev/null @@ -1,163 +0,0 @@ -//! This module implements the R1CS equivalent of `crate`. -//! -//! It implements field variables for `crate::{Fq, Fq2, Fq6, Fq12}`, -//! group variables for `crate::{G1, G2}`, and implements constraint -//! generation for computing `Bls12_377::pairing`. -//! -//! The field underlying these constraints is `crate::Fq`. -//! -//! # Examples -//! -//! One can perform standard algebraic operations on `FqVar`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! use ark_std::UniformRand; -//! use ark_relations::r1cs::*; -//! use ark_r1cs_std::prelude::*; -//! use ark_bls12_377::{*, constraints::*}; -//! -//! let cs = ConstraintSystem::::new_ref(); -//! // This rng is just for test purposes; do not use it -//! // in real applications. -//! let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `Fq` elements. -//! let a_native = Fq::rand(&mut rng); -//! let b_native = Fq::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = FqVar::new_witness(ark_relations::ns!(cs, "generate_a"), || Ok(a_native))?; -//! let b = FqVar::new_witness(ark_relations::ns!(cs, "generate_b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = FqVar::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = FqVar::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! let one = FqVar::one(); -//! let zero = FqVar::zero(); -//! -//! // Sanity check one + one = two -//! let two = &one + &one + &zero; -//! two.enforce_equal(&one.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that the value of &a * &b is correct. -//! assert_eq!((&a * &b).value()?, a_native * &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` -//! -//! One can also perform standard algebraic operations on `G1Var` and `G2Var`: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! # use ark_std::UniformRand; -//! # use ark_relations::r1cs::*; -//! # use ark_r1cs_std::prelude::*; -//! # use ark_bls12_377::{*, constraints::*}; -//! -//! # let cs = ConstraintSystem::::new_ref(); -//! # let mut rng = ark_std::test_rng(); -//! -//! // Generate some random `G1` elements. -//! let a_native = G1Projective::rand(&mut rng); -//! let b_native = G1Projective::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = G1Var::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; -//! let b = G1Var::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = G1Var::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = G1Var::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! // This returns the identity of `G1`. -//! let zero = G1Var::zero(); -//! -//! // Sanity check one + one = two -//! let two_a = &a + &a + &zero; -//! two_a.enforce_equal(&a.double()?)?; -//! -//! assert!(cs.is_satisfied()?); -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!((&a + &b).value()?, a_native + &b_native); -//! -//! // Check that operations on variables and constants are equivalent. -//! (&a + &b).enforce_equal(&(&a_const + &b_const))?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` -//! -//! Finally, one can check pairing computations as well: -//! -//! ``` -//! # fn main() -> Result<(), ark_relations::r1cs::SynthesisError> { -//! # use ark_std::UniformRand; -//! # use ark_ec::pairing::Pairing; -//! # use ark_relations::r1cs::*; -//! # use ark_r1cs_std::prelude::*; -//! # use ark_bls12_377::{*, constraints::*}; -//! -//! # let cs = ConstraintSystem::::new_ref(); -//! # let mut rng = ark_std::test_rng(); -//! -//! // Generate random `G1` and `G2` elements. -//! let a_native = G1Projective::rand(&mut rng); -//! let b_native = G2Projective::rand(&mut rng); -//! -//! // Allocate `a_native` and `b_native` as witness variables in `cs`. -//! let a = G1Var::new_witness(ark_relations::ns!(cs, "a"), || Ok(a_native))?; -//! let b = G2Var::new_witness(ark_relations::ns!(cs, "b"), || Ok(b_native))?; -//! -//! // Allocate `a_native` and `b_native` as constants in `cs`. This does not add any -//! // constraints or variables. -//! let a_const = G1Var::new_constant(ark_relations::ns!(cs, "a_as_constant"), a_native)?; -//! let b_const = G2Var::new_constant(ark_relations::ns!(cs, "b_as_constant"), b_native)?; -//! -//! let pairing_result_native = Bls12_377::pairing(a_native, b_native); -//! -//! // Prepare `a` and `b` for pairing. -//! let a_prep = constraints::PairingVar::prepare_g1(&a)?; -//! let b_prep = constraints::PairingVar::prepare_g2(&b)?; -//! let pairing_result = constraints::PairingVar::pairing(a_prep, b_prep)?; -//! -//! // Check that the value of &a + &b is correct. -//! assert_eq!(pairing_result.value()?, pairing_result_native.0); -//! -//! // Check that operations on variables and constants are equivalent. -//! let a_prep_const = constraints::PairingVar::prepare_g1(&a_const)?; -//! let b_prep_const = constraints::PairingVar::prepare_g2(&b_const)?; -//! let pairing_result_const = constraints::PairingVar::pairing(a_prep_const, b_prep_const)?; -//! println!("Done here 3"); -//! -//! pairing_result.enforce_equal(&pairing_result_const)?; -//! assert!(cs.is_satisfied()?); -//! # Ok(()) -//! # } -//! ``` - -mod fields; -pub use fields::*; - -#[cfg(feature = "curve")] -mod curves; -#[cfg(feature = "curve")] -mod pairing; - -#[cfg(feature = "curve")] -pub use curves::*; -#[cfg(feature = "curve")] -pub use pairing::*; diff --git a/primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs b/primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs deleted file mode 100644 index 3832cc08e954c..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/constraints/pairing.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::Config; - -/// Specifies the constraints for computing a pairing in the BLS12-377 bilinear -/// group. -pub type PairingVar = ark_r1cs_std::pairing::bls12::PairingVar; - -#[test] -fn test() { - use crate::Bls12_377; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); - ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() - .unwrap(); -} diff --git a/primitives/arkworks-curves/bls12_377/src/curves/g1.rs b/primitives/arkworks-curves/bls12_377/src/curves/g1.rs deleted file mode 100644 index fc71186837774..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/curves/g1.rs +++ /dev/null @@ -1,282 +0,0 @@ -use ark_ff::{Field, MontFp, Zero}; -use ark_models::models::{ - short_weierstrass::{Affine as SWAffine, Projective, SWCurveConfig}, - twisted_edwards::{ - Affine as TEAffine, MontCurveConfig, Projective as TEProjective, TECurveConfig, - }, - CurveConfig, -}; -use ark_serialize::{CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; -use core::ops::Neg; - -use crate::{Fq, Fr}; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = (x - 1)^2 / 3 = 30631250834960419227450344600217059328 - const COFACTOR: &'static [u64] = &[0x0, 0x170b5d4430000000]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 5285428838741532253824584287042945485047145357130994810877 - const COFACTOR_INV: Fr = MontFp!("5285428838741532253824584287042945485047145357130994810877"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = 1 - const COEFF_B: Fq = Fq::ONE; - - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1SWAffine = G1SWAffine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - fn msm( - bases: &[SWAffine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_377_msm_g1(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = - ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_377_mul_projective_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = - ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); - result.into() - } - - fn mul_affine(base: &SWAffine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let serialized_result = - sp_io::crypto::bls12_377_mul_affine_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&serialized_result[..]); - - let result = - ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); - result.into() - } -} - -pub type G1SWAffine = SWAffine; -pub type G1TEAffine = TEAffine; -pub type G1TEProjective = TEProjective; - -/// Bls12_377::G1 also has a twisted Edwards form. -/// It can be obtained via the following script, implementing -/// 1. SW -> Montgomery -> TE1 transformation: -/// 2. TE1 -> TE2 normalization (enforcing `a = -1`) -/// ``` sage -/// # modulus -/// p = 0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 -/// Fp = Zmod(p) -/// -/// ##################################################### -/// # Weierstrass curve: y² = x³ + A * x + B -/// ##################################################### -/// # curve y^2 = x^3 + 1 -/// WA = Fp(0) -/// WB = Fp(1) -/// -/// ##################################################### -/// # Montgomery curve: By² = x³ + A * x² + x -/// ##################################################### -/// # root for x^3 + 1 = 0 -/// alpha = -1 -/// # s = 1 / (sqrt(3alpha^2 + a)) -/// s = 1/(Fp(3).sqrt()) -/// -/// # MA = 3 * alpha * s -/// MA = Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) -/// # MB = s -/// MB = Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) -/// -/// # ##################################################### -/// # # Twisted Edwards curve 1: a * x² + y² = 1 + d * x² * y² -/// # ##################################################### -/// # We first convert to TE form obtaining a curve with a != -1, and then -/// # apply a transformation to obtain a TE curve with a = -1. -/// # a = (MA+2)/MB -/// TE1a = Fp(61134141799337779744243169579317764548490943457438569789767076791016838392692895365021181670618017873462480451583) -/// # b = (MA-2)/MB -/// TE1d = Fp(197530284213631314266409564115575768987902569297476090750117185875703629955647927409947706468955342250977841006588) -/// -/// # ##################################################### -/// # # Twisted Edwards curve 2: a * x² + y² = 1 + d * x² * y² -/// # ##################################################### -/// # a = -1 -/// TE2a = Fp(-1) -/// # b = -TE1d/TE1a -/// TE2d = Fp(122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179) -/// ``` -impl TECurveConfig for Config { - /// COEFF_A = -1 - const COEFF_A: Fq = MontFp!("-1"); - - /// COEFF_D = 122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179 mod q - const COEFF_D: Fq = MontFp!("122268283598675559488486339158635529096981886914877139579534153582033676785385790730042363341236035746924960903179"); - - /// AFFINE_GENERATOR_COEFFS = (GENERATOR_X, GENERATOR_Y) - const GENERATOR: G1TEAffine = G1TEAffine::new_unchecked(TE_GENERATOR_X, TE_GENERATOR_Y); - - type MontCurveConfig = Config; - - /// Multiplication by `a` is multiply by `-1`. - #[inline(always)] - fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { - elem.neg() - } -} - -// BLS12-377::G1 also has a Montgomery form. -// BLS12-377::G1 also has a twisted Edwards form. -// It can be obtained via the following script, implementing -// SW -> Montgomery transformation: -// ``` sage -// # modulus -// p=0x1ae3a4617c510eac63b05c06ca1493b1a22d9f300f5138f1ef3622fba094800170b5d44300000008508c00000000001 -// Fp=Zmod(p) -// -// ##################################################### -// # Weierstrass curve: y² = x³ + A * x + B -// ##################################################### -// # curve y^2 = x^3 + 1 -// WA=Fp(0) -// WB=Fp(1) -// -// ##################################################### -// # Montgomery curve: By² = x³ + A * x² + x -// ##################################################### -// # root for x^3 + 1 = 0 -// alpha = -1 -// # s = 1 / (sqrt(3alpha^2 + a)) -// s = 1/(Fp(3).sqrt()) -// -// # MA = 3 * alpha * s -// MA=Fp(228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384) -// # MB = s -// MB=Fp(10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931) -// ``` -impl MontCurveConfig for Config { - /// COEFF_A = 228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384 - const COEFF_A: Fq = MontFp!("228097355113300204138531148905234651262148041026195375645000724271212049151994375092458297304264351187709081232384"); - - /// COEFF_B = 10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931 - const COEFF_B: Fq = MontFp!("10189023633222963290707194929886294091415157242906428298294512798502806398782149227503530278436336312243746741931"); - - type TECurveConfig = Config; -} - -/// G1_GENERATOR_X = -/// 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695 -pub const G1_GENERATOR_X: Fq = MontFp!("81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695"); - -/// G1_GENERATOR_Y = -/// 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030 -pub const G1_GENERATOR_Y: Fq = MontFp!("241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030"); - -// The generator for twisted Edward form is the same SW generator converted into -// the normalized TE form (TE2). -//``` sage -// # following scripts in previous section -// ##################################################### -// # Weierstrass curve generator -// ##################################################### -// Wx = Fp(81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695) -// Wy = Fp(241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030) -// -// assert(Wy^2 - Wx^3 - WA * Wx - WB == 0) -// -// ##################################################### -// # Montgomery curve generator -// ##################################################### -// # x = s * (x - alpha) -// Mx = Fp(251803586774461569862800610331871502335378228972505599912537082323947581271784390797244487924068052270360793200630) -// # y = s * y -// My = Fp(77739247071951651095607889637653357561348174979132042929587539214321586851215673796661346812932566642719051699820) -// -// assert(MB * My^2 == Mx^3+ MA * Mx^2 + Mx) -// -// # ##################################################### -// # # Twisted Edwards curve 1 generator -// # ##################################################### -// # x = Mx/My -// TE1x = Fp(82241236807150726090333472814441006963902378430536027612759193445733851062772474760677400112551677454953925168208) -// # y = (Mx - 1)/(Mx+1) -// TE1y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) -// -// assert( TE1a * TE1x^2 + TE1y^2 == 1 + TE1d * TE1x^2 * TE1y^2 ) -// -// -// # ##################################################### -// # # Twisted Edwards curve 2 generator -// # ##################################################### -// beta = (-TE1a).sqrt() -// # x = TE1x * sqrt(-TE1a) -// TE2x = Fp(71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393) -// # y = TE1y -// TE2y = Fp(6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235) -// -// assert( TE2a * TE2x^2 + TE2y^2 == 1 + TE2d * TE2x^2 * TE2y^2 ) -// ``` -/// TE_GENERATOR_X = -/// 71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393 -pub const TE_GENERATOR_X: Fq = MontFp!("71222569531709137229370268896323705690285216175189308202338047559628438110820800641278662592954630774340654489393"); - -/// TE_GENERATOR_Y = -/// 6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235 -pub const TE_GENERATOR_Y: Fq = MontFp!("6177051365529633638563236407038680211609544222665285371549726196884440490905471891908272386851767077598415378235"); diff --git a/primitives/arkworks-curves/bls12_377/src/curves/g2.rs b/primitives/arkworks-curves/bls12_377/src/curves/g2.rs deleted file mode 100644 index f5632f245ffe2..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/curves/g2.rs +++ /dev/null @@ -1,147 +0,0 @@ -use ark_ff::{Field, MontFp, Zero}; -use ark_models::{ - models::{ - short_weierstrass::{Projective, SWCurveConfig}, - CurveConfig, - }, - short_weierstrass::Affine, -}; -use ark_serialize::{CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::{g1, Fq, Fq2, Fr}; - -pub type G2Affine = Affine; -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; - - /// COFACTOR = - /// 7923214915284317143930293550643874566881017850177945424769256759165301436616933228209277966774092486467289478618404761412630691835764674559376407658497 - #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ - 0x0000000000000001, - 0x452217cc90000000, - 0xa0f3622fba094800, - 0xd693e8c36676bd09, - 0x8c505634fae2e189, - 0xfbb36b00e1dcc40c, - 0xddd88d99a6f6a829, - 0x26ba558ae9562a, - ]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 6764900296503390671038341982857278410319949526107311149686707033187604810669 - const COFACTOR_INV: Fr = - MontFp!("6764900296503390671038341982857278410319949526107311149686707033187604810669"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - - // As per https://eprint.iacr.org/2012/072.pdf, - // this curve has b' = b/i, where b is the COEFF_B of G1, and x^6 -i is - // the irreducible poly used to extend from Fp2 to Fp12. - // In our case, i = u (App A.3, T_6). - /// COEFF_B = [0, - /// 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906] - const COEFF_B: Fq2 = Fq2::new( - Fq::ZERO, - MontFp!("155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906"), - ); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_377_msm_g2(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = - ::deserialize_with_mode(cursor, Compress::Yes, Validate::No) - .unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_377_mul_projective_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_377_mul_affine_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); -pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); - -/// G2_GENERATOR_X_C0 = -/// 233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294 -pub const G2_GENERATOR_X_C0: Fq = MontFp!("233578398248691099356572568220835526895379068987715365179118596935057653620464273615301663571204657964920925606294"); - -/// G2_GENERATOR_X_C1 = -/// 140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118 -pub const G2_GENERATOR_X_C1: Fq = MontFp!("140913150380207355837477652521042157274541796891053068589147167627541651775299824604154852141315666357241556069118"); - -/// G2_GENERATOR_Y_C0 = -/// 63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423 -pub const G2_GENERATOR_Y_C0: Fq = MontFp!("63160294768292073209381361943935198908131692476676907196754037919244929611450776219210369229519898517858833747423"); - -/// G2_GENERATOR_Y_C1 = -/// 149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491 -pub const G2_GENERATOR_Y_C1: Fq = MontFp!("149157405641012693445398062341192467754805999074082136895788947234480009303640899064710353187729182149407503257491"); diff --git a/primitives/arkworks-curves/bls12_377/src/curves/mod.rs b/primitives/arkworks-curves/bls12_377/src/curves/mod.rs deleted file mode 100644 index beee2f092b8a5..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/curves/mod.rs +++ /dev/null @@ -1,92 +0,0 @@ -use ark_ff::Fp12; -use ark_models::{ - bls12, - bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -use crate::*; - -pub mod g1; -pub mod g2; - -#[cfg(test)] -mod tests; - -pub struct Config; - -impl Bls12Config for Config { - const X: &'static [u64] = &[0x8508c00000000001]; - /// `x` is positive. - const X_IS_NEGATIVE: bool = false; - const TWIST_TYPE: TwistType = TwistType::D; - type Fp = Fq; - type Fp2Config = Fq2Config; - type Fp6Config = Fq6Config; - type Fp12Config = Fq12Config; - type G1Config = g1::Config; - type G2Config = g2::Config; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - let a: Vec> = a - .into_iter() - .map(|elem| { - let elem: as Pairing>::G1Prepared = elem.into(); - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let b = b - .into_iter() - .map(|elem| { - let elem: as Pairing>::G2Prepared = elem.into(); - let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - - let res = sp_io::crypto::bls12_377_multi_miller_loop(a, b); - let cursor = Cursor::new(&res[..]); - let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - MillerLoopOutput(f) - } - - fn final_exponentiation( - f: MillerLoopOutput>, - ) -> Option>> { - let mut out: [u8; 576] = [0; 576]; - let mut cursor = Cursor::new(&mut out[..]); - f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let res = sp_io::crypto::bls12_377_final_exponentiation(&out); - - let cursor = Cursor::new(&res[..]); - let res = PairingOutput::>::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - - Some(res) - } -} - -pub type Bls12_377 = Bls12; - -pub type G1Affine = bls12::G1Affine; -pub type G1Projective = bls12::G1Projective; -pub type G2Affine = bls12::G2Affine; -pub type G2Projective = bls12::G2Projective; - -pub use g1::{G1TEAffine, G1TEProjective}; diff --git a/primitives/arkworks-curves/bls12_377/src/curves/tests.rs b/primitives/arkworks-curves/bls12_377/src/curves/tests.rs deleted file mode 100755 index 661e0c3a89253..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/curves/tests.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::{Bls12_377, G1Projective, G2Projective}; -use ark_algebra_test_templates::*; - -test_group!(g1; G1Projective; sw); -test_group!(g2; G2Projective; sw); -test_group!(pairing_output; ark_ec::pairing::PairingOutput; msm); -test_pairing!(pairing; crate::Bls12_377); diff --git a/primitives/arkworks-curves/bls12_377/src/lib.rs b/primitives/arkworks-curves/bls12_377/src/lib.rs deleted file mode 100755 index 3ca84637c91a6..0000000000000 --- a/primitives/arkworks-curves/bls12_377/src/lib.rs +++ /dev/null @@ -1,30 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] -#![deny(warnings, unused, future_incompatible, nonstandard_style, rust_2018_idioms)] -#![forbid(unsafe_code)] - -//! This library implements the BLS12_377 curve generated in [\[BCGMMW20, “Zexe”\]](https://eprint.iacr.org/2018/962). -//! The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree -//! 12, defined over a 377-bit (prime) field. The main feature of this curve is -//! that both the scalar field and the base field are highly 2-adic. -//! (This is in contrast to the BLS12_381 curve for which only the scalar field -//! is highly 2-adic.) -//! -//! -//! Curve information: -//! * Base field: q = 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 -//! * Scalar field: r = 8444461749428370424248824938781546531375899335154063827935233455917409239041 -//! * valuation(q - 1, 2) = 46 -//! * valuation(r - 1, 2) = 47 -//! * G1 curve equation: y^2 = x^3 + 1 -//! * G2 curve equation: y^2 = x^3 + B, where -//! * B = Fq2(0, 155198655607781456406391640216936120121836107652948796323930557600032281009004493664981332883744016074664192874906) - -#[cfg(feature = "curve")] -mod curves; - -#[cfg(feature = "r1cs")] -pub mod constraints; - -pub use ark_bls12_377::{Fq, Fq12Config, Fq2, Fq2Config, Fq6Config, Fr, FrConfig}; -#[cfg(feature = "curve")] -pub use curves::*; diff --git a/primitives/arkworks-curves/bls12_381/Cargo.toml b/primitives/arkworks-curves/bls12_381/Cargo.toml deleted file mode 100644 index c0e163106762c..0000000000000 --- a/primitives/arkworks-curves/bls12_381/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "sp-ark-bls12-381" -version = "0.4.0" -authors = [ "achimcc, arkworks contributors" ] -repository = "https://github.com/paritytech/substrate/" -description = "The BLS12-381 pairing-friendly elliptic curve, optimized for Substrate" -keywords = ["cryptography", "finite-fields", "elliptic-curves" ] -categories = ["cryptography"] -include = ["Cargo.toml", "src", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] -license = "MIT/Apache-2.0" -edition = "2021" - -[dependencies] -ark-ff = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-std = { version = "0.4.0-alpha", default-features = false } -ark-serialize = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves", default-features = false, features = ["curve"] } -ark-models = { path = "../../arkworks-models", default-features = false } -sp-io = { path = "../../io", default-features = false } - -[dev-dependencies] -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -ark-ec = { git = "https://github.com/arkworks-rs/algebra", branch = "releases", default-features = false } -hex = "^0.4.0" - -[features] -default = [ "curve" ] -std = [ "ark-std/std", "ark-ff/std", "ark-models/std", "ark-bls12-381/std", "ark-serialize/std", "sp-io/std" ] -curve = [ "scalar_field", "base_field" ] -scalar_field = [] -base_field = [] - diff --git a/primitives/arkworks-curves/bls12_381/src/curves/g1.rs b/primitives/arkworks-curves/bls12_381/src/curves/g1.rs deleted file mode 100644 index cde4fd8f41fa1..0000000000000 --- a/primitives/arkworks-curves/bls12_381/src/curves/g1.rs +++ /dev/null @@ -1,257 +0,0 @@ -use ark_bls12_381::{Fq, Fr}; -use ark_ff::{Field, MontFp, PrimeField, Zero}; -use ark_models::{ - bls12, - bls12::Bls12Config, - models::CurveConfig, - short_weierstrass::{Affine, Projective, SWCurveConfig}, - AffineRepr, Group, -}; -use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; -use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec, One}; - -use crate::util::{ - read_g1_compressed, read_g1_uncompressed, serialize_fq, EncodingFlags, G1_SERIALIZED_SIZE, -}; - -pub type G1Affine = bls12::G1Affine; -pub type G1Projective = bls12::G1Projective; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq; - type ScalarField = Fr; - - /// COFACTOR = (x - 1)^2 / 3 = 76329603384216526031706109802092473003 - const COFACTOR: &'static [u64] = &[0x8c00aaab0000aaab, 0x396c8c005555e156]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// = 52435875175126190458656871551744051925719901746859129887267498875565241663483 - const COFACTOR_INV: Fr = - MontFp!("52435875175126190458656871551744051925719901746859129887267498875565241663483"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = 0 - const COEFF_A: Fq = Fq::ZERO; - - /// COEFF_B = 4 - const COEFF_B: Fq = MontFp!("4"); - - /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) - const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - #[inline] - fn is_in_correct_subgroup_assuming_on_curve(p: &G1Affine) -> bool { - // Algorithm from Section 6 of https://eprint.iacr.org/2021/1130. - // - // Check that endomorphism_p(P) == -[X^2]P - - // An early-out optimization described in Section 6. - // If uP == P but P != point of infinity, then the point is not in the right - // subgroup. - let x_times_p = p.mul_bigint(crate::Config::X); - if x_times_p.eq(p) && !p.infinity { - return false - } - - let minus_x_squared_times_p = x_times_p.mul_bigint(crate::Config::X).neg(); - let endomorphism_p = endomorphism(p); - minus_x_squared_times_p.eq(&endomorphism_p) - } - - #[inline] - fn clear_cofactor(p: &G1Affine) -> G1Affine { - // Using the effective cofactor, as explained in - // Section 5 of https://eprint.iacr.org/2019/403.pdf. - // - // It is enough to multiply by (1 - x), instead of (x - 1)^2 / 3 - let h_eff = one_minus_x().into_bigint(); - Config::mul_affine(&p, h_eff.as_ref()).into() - } - - fn deserialize_with_mode( - mut reader: R, - compress: ark_serialize::Compress, - validate: ark_serialize::Validate, - ) -> Result, ark_serialize::SerializationError> { - let p = if compress == ark_serialize::Compress::Yes { - read_g1_compressed(&mut reader)? - } else { - read_g1_uncompressed(&mut reader)? - }; - - if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() - { - return Err(SerializationError::InvalidData) - } - Ok(p) - } - - fn serialize_with_mode( - item: &Affine, - mut writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - let encoding = EncodingFlags { - is_compressed: compress == ark_serialize::Compress::Yes, - is_infinity: item.is_zero(), - is_lexographically_largest: item.y > -item.y, - }; - let mut p = *item; - if encoding.is_infinity { - p = G1Affine::zero(); - } - // need to access the field struct `x` directly, otherwise we get None from xy() - // method - let x_bytes = serialize_fq(p.x); - if encoding.is_compressed { - let mut bytes: [u8; G1_SERIALIZED_SIZE] = x_bytes; - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - } else { - let mut bytes = [0u8; 2 * G1_SERIALIZED_SIZE]; - bytes[0..G1_SERIALIZED_SIZE].copy_from_slice(&x_bytes[..]); - bytes[G1_SERIALIZED_SIZE..].copy_from_slice(&serialize_fq(p.y)[..]); - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - }; - - Ok(()) - } - - fn serialized_size(compress: Compress) -> usize { - if compress == Compress::Yes { - G1_SERIALIZED_SIZE - } else { - G1_SERIALIZED_SIZE * 2 - } - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_381_msm_g1(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_381_mul_projective_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let serialized_result = - sp_io::crypto::bls12_381_mul_affine_g1(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&serialized_result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -fn one_minus_x() -> Fr { - const X: Fr = Fr::from_sign_and_limbs(!crate::Config::X_IS_NEGATIVE, crate::Config::X); - Fr::one() - X -} - -/// G1_GENERATOR_X = -/// 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507 -pub const G1_GENERATOR_X: Fq = MontFp!("3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507"); - -/// G1_GENERATOR_Y = -/// 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569 -pub const G1_GENERATOR_Y: Fq = MontFp!("1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569"); - -/// BETA is a non-trivial cubic root of unity in Fq. -pub const BETA: Fq = MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"); - -pub fn endomorphism(p: &Affine) -> Affine { - // Endomorphism of the points on the curve. - // endomorphism_p(x,y) = (BETA * x, y) - // where BETA is a non-trivial cubic root of unity in Fq. - let mut res = (*p).clone(); - res.x *= BETA; - res -} - -#[cfg(test)] -mod test { - use super::*; - use crate::*; - use ark_std::{rand::Rng, UniformRand}; - - fn sample_unchecked() -> Affine { - let mut rng = ark_std::test_rng(); - loop { - let x = Fq::rand(&mut rng); - let greatest = rng.gen(); - - if let Some(p) = Affine::get_point_from_x_unchecked(x, greatest) { - return p - } - } - } - - #[test] - fn test_cofactor_clearing() { - const SAMPLES: usize = 100; - for _ in 0..SAMPLES { - let p: Affine = sample_unchecked(); - let p = p.clear_cofactor(); - assert!(p.is_on_curve()); - assert!(p.is_in_correct_subgroup_assuming_on_curve()); - } - } -} diff --git a/primitives/arkworks-curves/bls12_381/src/curves/g2.rs b/primitives/arkworks-curves/bls12_381/src/curves/g2.rs deleted file mode 100644 index 3bb592e302336..0000000000000 --- a/primitives/arkworks-curves/bls12_381/src/curves/g2.rs +++ /dev/null @@ -1,358 +0,0 @@ -use ark_std::{io::Cursor, ops::Neg, vec, vec::Vec}; - -use ark_ff::{Field, MontFp, Zero}; -use ark_models::{ - bls12, - bls12::Bls12Config, - models::CurveConfig, - short_weierstrass::{Affine, Projective, SWCurveConfig}, - AffineRepr, CurveGroup, Group, -}; -use ark_serialize::{CanonicalSerialize, Compress, SerializationError, Validate}; - -use super::util::{serialize_fq, EncodingFlags, G2_SERIALIZED_SIZE}; -use crate::{ - util::{read_g2_compressed, read_g2_uncompressed}, - *, -}; - -pub type G2Affine = bls12::G2Affine; -pub type G2Projective = bls12::G2Projective; - -#[derive(Clone, Default, PartialEq, Eq)] -pub struct Config; - -impl CurveConfig for Config { - type BaseField = Fq2; - type ScalarField = Fr; - - /// COFACTOR = (x^8 - 4 x^7 + 5 x^6) - (4 x^4 + 6 x^3 - 4 x^2 - 4 x + 13) // - /// 9 - /// = 305502333931268344200999753193121504214466019254188142667664032982267604182971884026507427359259977847832272839041616661285803823378372096355777062779109 - #[rustfmt::skip] - const COFACTOR: &'static [u64] = &[ - 0xcf1c38e31c7238e5, - 0x1616ec6e786f0c70, - 0x21537e293a6691ae, - 0xa628f1cb4d9e82ef, - 0xa68a205b2e5a7ddf, - 0xcd91de4547085aba, - 0x91d50792876a202, - 0x5d543a95414e7f1, - ]; - - /// COFACTOR_INV = COFACTOR^{-1} mod r - /// 26652489039290660355457965112010883481355318854675681319708643586776743290055 - const COFACTOR_INV: Fr = - MontFp!("26652489039290660355457965112010883481355318854675681319708643586776743290055"); -} - -impl SWCurveConfig for Config { - /// COEFF_A = [0, 0] - const COEFF_A: Fq2 = Fq2::new(g1::Config::COEFF_A, g1::Config::COEFF_A); - - /// COEFF_B = [4, 4] - const COEFF_B: Fq2 = Fq2::new(g1::Config::COEFF_B, g1::Config::COEFF_B); - - /// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y) - const GENERATOR: G2Affine = G2Affine::new_unchecked(G2_GENERATOR_X, G2_GENERATOR_Y); - - #[inline(always)] - fn mul_by_a(_: Self::BaseField) -> Self::BaseField { - Self::BaseField::zero() - } - - fn is_in_correct_subgroup_assuming_on_curve(point: &G2Affine) -> bool { - // Algorithm from Section 4 of https://eprint.iacr.org/2021/1130. - // - // Checks that [p]P = [X]P - - let mut x_times_point = point.mul_bigint(crate::Config::X); - if crate::Config::X_IS_NEGATIVE { - x_times_point = -x_times_point; - } - - let p_times_point = p_power_endomorphism(point); - - x_times_point.eq(&p_times_point) - } - - #[inline] - fn clear_cofactor(p: &G2Affine) -> G2Affine { - // Based on Section 4.1 of https://eprint.iacr.org/2017/419.pdf - // [h(ψ)]P = [x^2 − x − 1]P + [x − 1]ψ(P) + (ψ^2)(2P) - - // x = -15132376222941642752 - // When multiplying, use -c1 instead, and then negate the result. That's much - // more efficient, since the scalar -c1 has less limbs and a much lower Hamming - // weight. - let x: &'static [u64] = crate::Config::X; - let p_projective = p.into_group(); - - // [x]P - let x_p = Config::mul_affine(p, &x).neg(); - // ψ(P) - let psi_p = p_power_endomorphism(&p); - // (ψ^2)(2P) - let mut psi2_p2 = double_p_power_endomorphism(&p_projective.double()); - - // tmp = [x]P + ψ(P) - let mut tmp = x_p.clone(); - tmp += &psi_p; - - // tmp2 = [x^2]P + [x]ψ(P) - let mut tmp2: Projective = tmp; - tmp2 = tmp2.mul_bigint(x).neg(); - - // add up all the terms - psi2_p2 += tmp2; - psi2_p2 -= x_p; - psi2_p2 += &-psi_p; - (psi2_p2 - p_projective).into_affine() - } - - fn deserialize_with_mode( - mut reader: R, - compress: ark_serialize::Compress, - validate: ark_serialize::Validate, - ) -> Result, ark_serialize::SerializationError> { - let p = if compress == ark_serialize::Compress::Yes { - read_g2_compressed(&mut reader)? - } else { - read_g2_uncompressed(&mut reader)? - }; - - if validate == ark_serialize::Validate::Yes && !p.is_in_correct_subgroup_assuming_on_curve() - { - return Err(SerializationError::InvalidData) - } - Ok(p) - } - - fn serialize_with_mode( - item: &Affine, - mut writer: W, - compress: ark_serialize::Compress, - ) -> Result<(), SerializationError> { - let encoding = EncodingFlags { - is_compressed: compress == ark_serialize::Compress::Yes, - is_infinity: item.is_zero(), - is_lexographically_largest: item.y > -item.y, - }; - let mut p = *item; - if encoding.is_infinity { - p = G2Affine::zero(); - } - - let mut x_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.x.c1); - let c0_bytes = serialize_fq(p.x.c0); - x_bytes[0..48].copy_from_slice(&c1_bytes[..]); - x_bytes[48..96].copy_from_slice(&c0_bytes[..]); - if encoding.is_compressed { - let mut bytes: [u8; G2_SERIALIZED_SIZE] = x_bytes; - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - } else { - let mut bytes = [0u8; 2 * G2_SERIALIZED_SIZE]; - - let mut y_bytes = [0u8; G2_SERIALIZED_SIZE]; - let c1_bytes = serialize_fq(p.y.c1); - let c0_bytes = serialize_fq(p.y.c0); - y_bytes[0..48].copy_from_slice(&c1_bytes[..]); - y_bytes[48..96].copy_from_slice(&c0_bytes[..]); - bytes[0..G2_SERIALIZED_SIZE].copy_from_slice(&x_bytes); - bytes[G2_SERIALIZED_SIZE..].copy_from_slice(&y_bytes); - - encoding.encode_flags(&mut bytes); - writer.write_all(&bytes)?; - }; - - Ok(()) - } - - fn serialized_size(compress: ark_serialize::Compress) -> usize { - if compress == Compress::Yes { - G2_SERIALIZED_SIZE - } else { - 2 * G2_SERIALIZED_SIZE - } - } - - fn msm( - bases: &[Affine], - scalars: &[::ScalarField], - ) -> Result, usize> { - let bases: Vec> = bases - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let scalars: Vec> = scalars - .into_iter() - .map(|elem| { - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let result = sp_io::crypto::bls12_381_msm_g2(bases, scalars); - let cursor = Cursor::new(&result[..]); - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - Ok(result.into()) - } - - fn mul_projective(base: &Projective, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_381_mul_projective_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } - - fn mul_affine(base: &Affine, scalar: &[u64]) -> Projective { - let mut serialized_base = vec![0; base.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_base[..]); - base.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let mut serialized_scalar = vec![0; scalar.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized_scalar[..]); - scalar.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let result = sp_io::crypto::bls12_381_mul_affine_g2(serialized_base, serialized_scalar); - - let cursor = Cursor::new(&result[..]); - - let result = Self::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - result.into() - } -} - -pub const G2_GENERATOR_X: Fq2 = Fq2::new(G2_GENERATOR_X_C0, G2_GENERATOR_X_C1); -pub const G2_GENERATOR_Y: Fq2 = Fq2::new(G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1); - -/// G2_GENERATOR_X_C0 = -/// 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160 -pub const G2_GENERATOR_X_C0: Fq = MontFp!("352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160"); - -/// G2_GENERATOR_X_C1 = -/// 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758 -pub const G2_GENERATOR_X_C1: Fq = MontFp!("3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758"); - -/// G2_GENERATOR_Y_C0 = -/// 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905 -pub const G2_GENERATOR_Y_C0: Fq = MontFp!("1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905"); - -/// G2_GENERATOR_Y_C1 = -/// 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582 -pub const G2_GENERATOR_Y_C1: Fq = MontFp!("927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582"); - -// psi(x,y) = (x**p * PSI_X, y**p * PSI_Y) is the Frobenius composed -// with the quadratic twist and its inverse - -// PSI_X = 1/(u+1)^((p-1)/3) -pub const P_POWER_ENDOMORPHISM_COEFF_0 : Fq2 = Fq2::new( - Fq::ZERO, - MontFp!( - "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437" - ) -); - -// PSI_Y = 1/(u+1)^((p-1)/2) -pub const P_POWER_ENDOMORPHISM_COEFF_1: Fq2 = Fq2::new( - MontFp!( - "2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"), - MontFp!( - "1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257") -); - -pub const DOUBLE_P_POWER_ENDOMORPHISM: Fq2 = Fq2::new( - MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"), - Fq::ZERO -); - -pub fn p_power_endomorphism(p: &Affine) -> Affine { - // The p-power endomorphism for G2 is defined as follows: - // 1. Note that G2 is defined on curve E': y^2 = x^3 + 4(u+1). - // To map a point (x, y) in E' to (s, t) in E, - // one set s = x / ((u+1) ^ (1/3)), t = y / ((u+1) ^ (1/2)), - // because E: y^2 = x^3 + 4. - // 2. Apply the Frobenius endomorphism (s, t) => (s', t'), - // another point on curve E, where s' = s^p, t' = t^p. - // 3. Map the point from E back to E'; that is, - // one set x' = s' * ((u+1) ^ (1/3)), y' = t' * ((u+1) ^ (1/2)). - // - // To sum up, it maps - // (x,y) -> (x^p / ((u+1)^((p-1)/3)), y^p / ((u+1)^((p-1)/2))) - // as implemented in the code as follows. - - let mut res = *p; - res.x.frobenius_map_in_place(1); - res.y.frobenius_map_in_place(1); - - let tmp_x = res.x.clone(); - res.x.c0 = -P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c1; - res.x.c1 = P_POWER_ENDOMORPHISM_COEFF_0.c1 * &tmp_x.c0; - res.y *= P_POWER_ENDOMORPHISM_COEFF_1; - - res -} - -/// For a p-power endomorphism psi(P), compute psi(psi(P)) -pub fn double_p_power_endomorphism(p: &Projective) -> Projective { - let mut res = *p; - - res.x *= DOUBLE_P_POWER_ENDOMORPHISM; - res.y = res.y.neg(); - - res -} - -#[cfg(test)] -mod test { - - use super::*; - use ark_std::UniformRand; - - #[test] - fn test_cofactor_clearing() { - // multiplying by h_eff and clearing the cofactor by the efficient - // endomorphism-based method should yield the same result. - let h_eff: &'static [u64] = &[ - 0xe8020005aaa95551, - 0x59894c0adebbf6b4, - 0xe954cbc06689f6a3, - 0x2ec0ec69d7477c1a, - 0x6d82bf015d1212b0, - 0x329c2f178731db95, - 0x9986ff031508ffe1, - 0x88e2a8e9145ad768, - 0x584c6a0ea91b3528, - 0xbc69f08f2ee75b3, - ]; - - let mut rng = ark_std::test_rng(); - const SAMPLES: usize = 10; - for _ in 0..SAMPLES { - let p = Affine::::rand(&mut rng); - let optimised = p.clear_cofactor().into_group(); - let naive = g2::Config::mul_affine(&p, h_eff); - assert_eq!(optimised, naive); - } - } -} diff --git a/primitives/arkworks-curves/bls12_381/src/curves/mod.rs b/primitives/arkworks-curves/bls12_381/src/curves/mod.rs deleted file mode 100644 index 75a86d7ec4d18..0000000000000 --- a/primitives/arkworks-curves/bls12_381/src/curves/mod.rs +++ /dev/null @@ -1,89 +0,0 @@ -use ark_bls12_381::{Fq, Fq12Config, Fq2Config, Fq6Config}; -use ark_ff::Fp12; -use ark_models::{ - bls12, - bls12::{Bls12, Bls12Config, G1Prepared, G2Prepared, TwistType}, - pairing::{MillerLoopOutput, Pairing, PairingOutput}, -}; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; -use ark_std::{io::Cursor, vec, vec::Vec}; - -pub mod g1; -pub mod g2; -pub(crate) mod util; - -#[cfg(test)] -mod tests; - -pub struct Config; - -impl Bls12Config for Config { - const X: &'static [u64] = &[0xd201000000010000]; - const X_IS_NEGATIVE: bool = true; - const TWIST_TYPE: TwistType = TwistType::M; - type Fp = Fq; - type Fp2Config = Fq2Config; - type Fp6Config = Fq6Config; - type Fp12Config = Fq12Config; - type G1Config = self::g1::Config; - type G2Config = self::g2::Config; - - fn multi_miller_loop( - a: impl IntoIterator>>, - b: impl IntoIterator>>, - ) -> MillerLoopOutput> { - let a: Vec> = a - .into_iter() - .map(|elem| { - let elem: as Pairing>::G1Prepared = elem.into(); - let mut serialized = vec![0; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - let b = b - .into_iter() - .map(|elem| { - let elem: as Pairing>::G2Prepared = elem.into(); - let mut serialized = vec![0u8; elem.serialized_size(Compress::Yes)]; - let mut cursor = Cursor::new(&mut serialized[..]); - elem.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - serialized - }) - .collect(); - - let res = sp_io::crypto::bls12_381_multi_miller_loop(a, b); - let cursor = Cursor::new(&res[..]); - let f: as Pairing>::TargetField = - Fp12::deserialize_with_mode(cursor, Compress::Yes, Validate::No).unwrap(); - MillerLoopOutput(f) - } - - fn final_exponentiation( - f: MillerLoopOutput>, - ) -> Option>> { - let mut out: [u8; 576] = [0; 576]; - let mut cursor = Cursor::new(&mut out[..]); - f.0.serialize_with_mode(&mut cursor, Compress::Yes).unwrap(); - - let res = sp_io::crypto::bls12_381_final_exponentiation(&out); - - let cursor = Cursor::new(&res[..]); - let res = PairingOutput::>::deserialize_with_mode( - cursor, - Compress::Yes, - Validate::No, - ) - .unwrap(); - - Some(res) - } -} - -pub type Bls12_381 = Bls12; - -pub type G1Affine = bls12::G1Affine; -pub type G1Projective = bls12::G1Projective; -pub type G2Affine = bls12::G2Affine; -pub type G2Projective = bls12::G2Projective; diff --git a/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_compressed_valid_test_vectors.dat deleted file mode 100644 index ea8cd67652d133010e79df8488452450b6f5cb17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48000 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 Rm?nepfGSPSF*XppvfIk?3d#Tg diff --git a/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g1_uncompressed_valid_test_vectors.dat deleted file mode 100644 index 86abfba945c7b701750d637bffe6701330e10e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96000 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%0A9l>2- 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 diff --git a/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat b/primitives/arkworks-curves/bls12_381/src/curves/tests/g2_compressed_valid_test_vectors.dat deleted file mode 100644 index a40bbe251d90e576060adb7eaa2456197878804c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96000 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