From 574b5ace044d545cb2027b635f62233d967f4b10 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 2 May 2023 22:12:42 +0000 Subject: [PATCH 01/15] introduce slab based generators. --- .../crypto/generators/generator_data.cpp | 129 +++++++++++------- 1 file changed, 82 insertions(+), 47 deletions(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index dfa71840e5..82f87847bb 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -4,30 +4,32 @@ namespace crypto { namespace generators { namespace { -// Parameters for generator table construction -struct GeneratorParameters { - size_t num_default_generators; // Number of unique base points with default main index with precomputed ladders - size_t num_hash_indices; // Number of unique hash indices - size_t num_generators_per_hash_index; // Number of generators per hash index - size_t hash_indices_generator_offset; // Offset for hash index generators +// The number of unique base points with default main index with precomputed ladders +constexpr size_t num_default_generators = 128; + +/** + * @brief Contains number of hash indices all of which support a fixed number of generators per index. + */ +struct HashIndexParams { + size_t num_indices; + size_t num_generators_per_index; + + /** + * @brief Computes the total number of generators for a given HashIndexParams. + * + * @return Number of generators. + */ + constexpr size_t total_generators() const { return (num_indices * num_generators_per_index); } }; -// Define BARRETENBERG_CRYPTO_GENERATOR_PARAMETERS_HACK to use custom values for generator parameters -// This hack is to avoid breakage due to generators in aztec circuits while maintaining compatibility -// with the barretenberg master. -#ifdef BARRETENBERG_CRYPTO_GENERATOR_PARAMETERS_HACK -constexpr GeneratorParameters GEN_PARAMS = { BARRETENBERG_CRYPTO_GENERATOR_PARAMETERS_HACK }; -#else -#ifdef __wasm__ -constexpr GeneratorParameters GEN_PARAMS = { 32, 16, 8, 2048 }; -// TODO need to resolve memory out of bounds when these are too high -#else -constexpr GeneratorParameters GEN_PARAMS = { 2048, 16, 8, 2048 }; -#endif -#endif - -constexpr size_t num_indexed_generators = GEN_PARAMS.num_hash_indices * GEN_PARAMS.num_generators_per_hash_index; -constexpr size_t size_of_generator_data_array = GEN_PARAMS.hash_indices_generator_offset + num_indexed_generators; +constexpr HashIndexParams LOW = { 32, 8 }; +constexpr HashIndexParams MID = { 8, 16 }; +constexpr HashIndexParams HIGH = { 4, 40 }; + +constexpr size_t num_hash_indices = (LOW.num_indices + MID.num_indices + HIGH.num_indices); +constexpr size_t num_indexed_generators = LOW.total_generators() + MID.total_generators() + HIGH.total_generators(); + +constexpr size_t size_of_generator_data_array = num_default_generators + num_indexed_generators; constexpr size_t num_generator_types = 3; ladder_t g1_ladder; @@ -224,11 +226,11 @@ std::vector> const& init_generator_data() global_generator_data.resize(size_of_generator_data_array); - for (size_t i = 0; i < GEN_PARAMS.num_default_generators; i++) { + for (size_t i = 0; i < num_default_generators; i++) { global_generator_data[i] = compute_generator_data(generators[i], aux_generators[i], skew_generators[i]); } - for (size_t i = GEN_PARAMS.hash_indices_generator_offset; i < size_of_generator_data_array; i++) { + for (size_t i = num_default_generators; i < size_of_generator_data_array; i++) { global_generator_data[i] = compute_generator_data(generators[i], aux_generators[i], skew_generators[i]); } @@ -245,40 +247,73 @@ const fixed_base_ladder* get_g1_ladder(const size_t num_bits) } /** - * Generator indexing: + * @brief Returns a reference to the generator data for the specified generator index. + * The generator index is composed of an index and sub-index. The index specifies + * which hash index the generator belongs to, and the sub-index specifies the + * position of the generator within the hash index. + * + * The generator data is stored in a global array of generator_data objects, which + * is initialized lazily when the function is called for the first time. The global + * array includes both default generators and user-defined generators. * - * Number of default generators (index = 0): N = 2048 - * Number of hash indices: H = 32 - * Number of sub indices for a given hash index: h = 64. - * Number of types of generators needed per hash index: t = 3 + * If the specified index is 0, the sub-index is used to look up the corresponding + * default generator in the global array. Otherwise, the global index of the generator + * is calculated based on the index and sub-index, and used to look up the corresponding + * user-defined generator in the global array. * - * Default generators: - * 0: P_0 P_1 P_2 ... P_{N'-1} + * The function throws an exception if the specified index is invalid. * - * Hash-index dependent generators: (let N' = t * N) - * 1: P_{N' + 0*h*t} P_{N' + 0*h*t + 1*t} ... P_{N' + 0*h*t + (h-1)*t} - * 2: P_{N' + 1*h*t} P_{N' + 1*h*t + 1*t} ... P_{N' + 1*h*t + (h-1)*t} - * 2: P_{N' + 2*h*t} P_{N' + 2*h*t + 1*t} ... P_{N' + 2*h*t + (h-1)*t} - * 4: - * . - * . - * . - * H-1: P_{N' + (H-2)*h*t} P_{N' + (H-2)*h*t + 1*t} ... P_{N' + (H-2)*h*t + (h-1)*t} - * H : P_{N' + (H-1)*h*t} P_{N' + (H-1)*h*t + 1*t} ... P_{N' + (H-1)*h*t + (h-1)*t} + * @param index The generator index, consisting of an index and sub-index. + * @return A reference to the generator data for the specified generator index. + * @throws An exception if the specified index is invalid. * - * Total generators = (N + H * h) * t = 2304 + * @note TODO: Write a generator indexing example */ generator_data const& get_generator_data(generator_index_t index) { + // Initialize the global array of generator data auto& global_generator_data = init_generator_data(); + + // Handle default generators if (index.index == 0) { - ASSERT(index.sub_index < GEN_PARAMS.num_default_generators); + ASSERT(index.sub_index < num_default_generators); return *global_generator_data[index.sub_index]; } - ASSERT(index.index <= GEN_PARAMS.num_hash_indices); - ASSERT(index.sub_index < GEN_PARAMS.num_generators_per_hash_index); - return *global_generator_data[GEN_PARAMS.hash_indices_generator_offset + - ((index.index - 1) * GEN_PARAMS.num_generators_per_hash_index) + index.sub_index]; + + // Handle user-defined generators + ASSERT(index.index <= num_hash_indices); + size_t global_index_offset = 0; + size_t local_index_offset = 0; + size_t generator_count_offset = 0; + if (0 < index.index && index.index <= LOW.num_indices) { + // Calculate the global index of the generator for the LOW hash index + ASSERT(index.sub_index < LOW.num_generators_per_index); + global_index_offset = + generator_count_offset + (index.index - local_index_offset - 1) * LOW.num_generators_per_index; + local_index_offset += LOW.num_indices; + generator_count_offset += LOW.total_generators(); + + } else if (index.index <= MID.num_indices) { + // Calculate the global index of the generator for the MID hash index + ASSERT(index.sub_index < MID.num_generators_per_index); + global_index_offset = + generator_count_offset + (index.index - local_index_offset - 1) * MID.num_generators_per_index; + local_index_offset += MID.num_indices; + generator_count_offset += MID.total_generators(); + + } else if (index.index <= HIGH.num_indices) { + // Calculate the global index of the generator for the HIGH hash index + ASSERT(index.sub_index < HIGH.num_generators_per_index); + global_index_offset = + generator_count_offset + (index.index - local_index_offset - 1) * HIGH.num_generators_per_index; + + } else { + // Throw an exception for invalid index values + throw_or_abort(format("invalid hash index: ", index.index)); + } + + // Return a reference to the user-defined generator with the specified index and sub-index + return *global_generator_data[num_default_generators + global_index_offset + index.sub_index]; } const fixed_base_ladder* generator_data::get_ladder(size_t num_bits) const From 031a77994fbcba5300f1235c6a024a3fc5386559 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 2 May 2023 23:13:49 +0000 Subject: [PATCH 02/15] Remove `aux_ladder` from `generator_data` --- .../crypto/generators/generator_data.cpp | 42 ++++++++++--------- .../crypto/generators/generator_data.hpp | 2 +- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 82f87847bb..856c1ae393 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -35,30 +35,32 @@ constexpr size_t num_generator_types = 3; ladder_t g1_ladder; bool inited = false; -void compute_fixed_base_ladder(const grumpkin::g1::affine_element& generator, ladder_t& ladder) +template +void compute_fixed_base_ladder(const grumpkin::g1::affine_element& generator, + std::array& ladder) { grumpkin::g1::element* ladder_temp = - static_cast(aligned_alloc(64, sizeof(grumpkin::g1::element) * (quad_length * 2))); + static_cast(aligned_alloc(64, sizeof(grumpkin::g1::element) * (ladder_length * 2))); grumpkin::g1::element accumulator; accumulator = grumpkin::g1::element(generator); - for (size_t i = 0; i < quad_length; ++i) { + for (size_t i = 0; i < ladder_length; ++i) { ladder_temp[i] = accumulator; accumulator.self_dbl(); - ladder_temp[quad_length + i] = ladder_temp[i] + accumulator; + ladder_temp[ladder_length + i] = ladder_temp[i] + accumulator; accumulator.self_dbl(); } - grumpkin::g1::element::batch_normalize(&ladder_temp[0], quad_length * 2); - for (size_t i = 0; i < quad_length; ++i) { - grumpkin::fq::__copy(ladder_temp[i].x, ladder[quad_length - 1 - i].one.x); - grumpkin::fq::__copy(ladder_temp[i].y, ladder[quad_length - 1 - i].one.y); - grumpkin::fq::__copy(ladder_temp[quad_length + i].x, ladder[quad_length - 1 - i].three.x); - grumpkin::fq::__copy(ladder_temp[quad_length + i].y, ladder[quad_length - 1 - i].three.y); + grumpkin::g1::element::batch_normalize(&ladder_temp[0], ladder_length * 2); + for (size_t i = 0; i < ladder_length; ++i) { + grumpkin::fq::__copy(ladder_temp[i].x, ladder[ladder_length - 1 - i].one.x); + grumpkin::fq::__copy(ladder_temp[i].y, ladder[ladder_length - 1 - i].one.y); + grumpkin::fq::__copy(ladder_temp[ladder_length + i].x, ladder[ladder_length - 1 - i].three.x); + grumpkin::fq::__copy(ladder_temp[ladder_length + i].y, ladder[ladder_length - 1 - i].three.y); } constexpr grumpkin::fq eight_inverse = grumpkin::fq{ 8, 0, 0, 0 }.to_montgomery_form().invert(); - std::array y_denominators; - for (size_t i = 0; i < quad_length; ++i) { + std::array y_denominators; + for (size_t i = 0; i < ladder_length; ++i) { grumpkin::fq x_beta = ladder[i].one.x; grumpkin::fq x_gamma = ladder[i].three.x; @@ -86,8 +88,8 @@ void compute_fixed_base_ladder(const grumpkin::g1::affine_element& generator, la ladder[i].q_y_1 = y_alpha_1; ladder[i].q_y_2 = y_alpha_2; } - grumpkin::fq::batch_invert(&y_denominators[0], quad_length); - for (size_t i = 0; i < quad_length; ++i) { + grumpkin::fq::batch_invert(&y_denominators[0], ladder_length); + for (size_t i = 0; i < ladder_length; ++i) { ladder[i].q_y_1 *= y_denominators[i]; ladder[i].q_y_2 *= y_denominators[i]; } @@ -127,18 +129,18 @@ auto compute_generator_data(grumpkin::g1::affine_element const& generator, gen_data->aux_generator = aux_generator; gen_data->skew_generator = skew_generator; - compute_fixed_base_ladder(generator, gen_data->ladder); - compute_fixed_base_ladder(aux_generator, gen_data->aux_ladder); + compute_fixed_base_ladder(generator, gen_data->ladder); + std::array aux_ladder_temp; + compute_fixed_base_ladder(aux_generator, aux_ladder_temp); - constexpr size_t first_generator_segment = quad_length - 2; - constexpr size_t second_generator_segment = 2; + constexpr size_t first_generator_segment = quad_length - aux_length; + constexpr size_t second_generator_segment = aux_length; for (size_t j = 0; j < first_generator_segment; ++j) { gen_data->hash_ladder[j] = gen_data->ladder[j + (quad_length - first_generator_segment)]; } for (size_t j = 0; j < second_generator_segment; ++j) { - gen_data->hash_ladder[j + first_generator_segment] = - gen_data->aux_ladder[j + (quad_length - second_generator_segment)]; + gen_data->hash_ladder[j + first_generator_segment] = aux_ladder_temp[j]; } return gen_data; diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.hpp b/cpp/src/barretenberg/crypto/generators/generator_data.hpp index e3276c6c74..919864476c 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.hpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.hpp @@ -40,6 +40,7 @@ struct fixed_base_ladder { */ constexpr size_t bit_length = 256; constexpr size_t quad_length = bit_length / 2 + 1; +constexpr size_t aux_length = 2; typedef std::array ladder_t; struct generator_data { @@ -47,7 +48,6 @@ struct generator_data { grumpkin::g1::affine_element aux_generator; grumpkin::g1::affine_element skew_generator; ladder_t ladder; - ladder_t aux_ladder; ladder_t hash_ladder; const fixed_base_ladder* get_ladder(size_t num_bits) const; From 58cdd73175a13601702eec25eeb5796fa4c11a55 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 3 May 2023 00:00:12 +0000 Subject: [PATCH 03/15] Get rid of `hash_ladder` in `generator_data`. --- .../crypto/generators/generator_data.cpp | 25 ++++++++----------- .../crypto/generators/generator_data.hpp | 3 +-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 856c1ae393..22b3181d8f 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -35,10 +35,11 @@ constexpr size_t num_generator_types = 3; ladder_t g1_ladder; bool inited = false; -template +template void compute_fixed_base_ladder(const grumpkin::g1::affine_element& generator, - std::array& ladder) + std::array& ladder) { + ASSERT(ladder_length <= ladder_max_length); grumpkin::g1::element* ladder_temp = static_cast(aligned_alloc(64, sizeof(grumpkin::g1::element) * (ladder_length * 2))); @@ -133,21 +134,15 @@ auto compute_generator_data(grumpkin::g1::affine_element const& generator, std::array aux_ladder_temp; compute_fixed_base_ladder(aux_generator, aux_ladder_temp); - constexpr size_t first_generator_segment = quad_length - aux_length; - constexpr size_t second_generator_segment = aux_length; - - for (size_t j = 0; j < first_generator_segment; ++j) { - gen_data->hash_ladder[j] = gen_data->ladder[j + (quad_length - first_generator_segment)]; - } - for (size_t j = 0; j < second_generator_segment; ++j) { - gen_data->hash_ladder[j + first_generator_segment] = aux_ladder_temp[j]; + // Fill in the aux_generator multiples in the last two indices of the ladder. + for (size_t j = 0; j < aux_length; ++j) { + gen_data->ladder[j + quad_length] = aux_ladder_temp[j]; } return gen_data; } -const fixed_base_ladder* get_ladder_internal(std::array const& ladder, - const size_t num_bits) +const fixed_base_ladder* get_ladder_internal(ladder_t const& ladder, const size_t num_bits, const size_t offset = 0) { // find n, such that 2n + 1 >= num_bits size_t n; @@ -159,7 +154,7 @@ const fixed_base_ladder* get_ladder_internal(std::array> const& init_generator_data() global_generator_data[i] = compute_generator_data(generators[i], aux_generators[i], skew_generators[i]); } - compute_fixed_base_ladder(grumpkin::g1::one, g1_ladder); + compute_fixed_base_ladder(grumpkin::g1::one, g1_ladder); inited = true; return global_generator_data; @@ -327,7 +322,7 @@ const fixed_base_ladder* generator_data::get_ladder(size_t num_bits) const const fixed_base_ladder* generator_data::get_hash_ladder(size_t num_bits) const { init_generator_data(); - return get_ladder_internal(hash_ladder, num_bits); + return get_ladder_internal(ladder, num_bits, aux_length); } } // namespace generators diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.hpp b/cpp/src/barretenberg/crypto/generators/generator_data.hpp index 919864476c..9b336ad5d0 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.hpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.hpp @@ -41,14 +41,13 @@ struct fixed_base_ladder { constexpr size_t bit_length = 256; constexpr size_t quad_length = bit_length / 2 + 1; constexpr size_t aux_length = 2; -typedef std::array ladder_t; +typedef std::array ladder_t; struct generator_data { grumpkin::g1::affine_element generator; grumpkin::g1::affine_element aux_generator; grumpkin::g1::affine_element skew_generator; ladder_t ladder; - ladder_t hash_ladder; const fixed_base_ladder* get_ladder(size_t num_bits) const; const fixed_base_ladder* get_hash_ladder(size_t num_bits) const; From f6b30c0d8423b5027a2ae65f6a092799b238a19c Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 3 May 2023 08:46:30 +0000 Subject: [PATCH 04/15] Increase default generators to 200. --- cpp/src/barretenberg/crypto/generators/generator_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 22b3181d8f..12a5b67d1d 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -5,7 +5,7 @@ namespace generators { namespace { // The number of unique base points with default main index with precomputed ladders -constexpr size_t num_default_generators = 128; +constexpr size_t num_default_generators = 200; /** * @brief Contains number of hash indices all of which support a fixed number of generators per index. From 0d185b0eccc492a9c9e3ff85dfbdb9127201354a Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 3 May 2023 09:00:45 +0000 Subject: [PATCH 05/15] Change js vk hash. --- .../join_split_example/proofs/join_split/join_split.test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp index 420a99b01f..354b25eae8 100644 --- a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp +++ b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp @@ -708,7 +708,7 @@ TEST_F(join_split_tests, test_0_input_notes_and_detect_circuit_change) constexpr uint32_t CIRCUIT_GATE_COUNT = 184517; constexpr uint32_t GATES_NEXT_POWER_OF_TWO = 524288; - const uint256_t VK_HASH("24999463fd4168e633aad6171f8538e2e344e9136c3284f95bf607850a7f79bd"); + const uint256_t VK_HASH("f7593b089ac08335aa2a765fa1506e1c344a09de9d53a3591cde005ffa573cbc"); auto number_of_gates_js = result.number_of_gates; std::cout << get_verification_key()->sha256_hash() << std::endl; From ca16f980571a2406b92cf5a13b9146c3abd86613 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 3 May 2023 15:10:44 +0000 Subject: [PATCH 06/15] correct upper bound on hash index. --- cpp/src/barretenberg/crypto/generators/generator_data.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 12a5b67d1d..230ad57d97 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -290,7 +290,7 @@ generator_data const& get_generator_data(generator_index_t index) local_index_offset += LOW.num_indices; generator_count_offset += LOW.total_generators(); - } else if (index.index <= MID.num_indices) { + } else if (index.index <= (LOW.num_indices + MID.num_indices)) { // Calculate the global index of the generator for the MID hash index ASSERT(index.sub_index < MID.num_generators_per_index); global_index_offset = @@ -298,7 +298,7 @@ generator_data const& get_generator_data(generator_index_t index) local_index_offset += MID.num_indices; generator_count_offset += MID.total_generators(); - } else if (index.index <= HIGH.num_indices) { + } else if (index.index <= (LOW.num_indices + MID.num_indices + HIGH.num_indices)) { // Calculate the global index of the generator for the HIGH hash index ASSERT(index.sub_index < HIGH.num_generators_per_index); global_index_offset = From b873a4c599904a8975d29eadbab34de6dcdb0abc Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 3 May 2023 22:21:13 +0000 Subject: [PATCH 07/15] Fix offsets. --- .../crypto/generators/generator_data.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 230ad57d97..182a852e09 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -280,26 +280,26 @@ generator_data const& get_generator_data(generator_index_t index) // Handle user-defined generators ASSERT(index.index <= num_hash_indices); size_t global_index_offset = 0; - size_t local_index_offset = 0; - size_t generator_count_offset = 0; if (0 < index.index && index.index <= LOW.num_indices) { // Calculate the global index of the generator for the LOW hash index ASSERT(index.sub_index < LOW.num_generators_per_index); + const size_t local_index_offset = 0; + const size_t generator_count_offset = 0; global_index_offset = generator_count_offset + (index.index - local_index_offset - 1) * LOW.num_generators_per_index; - local_index_offset += LOW.num_indices; - generator_count_offset += LOW.total_generators(); } else if (index.index <= (LOW.num_indices + MID.num_indices)) { // Calculate the global index of the generator for the MID hash index ASSERT(index.sub_index < MID.num_generators_per_index); + const size_t local_index_offset = LOW.num_indices; + const size_t generator_count_offset = LOW.total_generators(); global_index_offset = generator_count_offset + (index.index - local_index_offset - 1) * MID.num_generators_per_index; - local_index_offset += MID.num_indices; - generator_count_offset += MID.total_generators(); } else if (index.index <= (LOW.num_indices + MID.num_indices + HIGH.num_indices)) { // Calculate the global index of the generator for the HIGH hash index + const size_t local_index_offset = LOW.num_indices + MID.num_indices; + const size_t generator_count_offset = LOW.total_generators() + HIGH.total_generators(); ASSERT(index.sub_index < HIGH.num_generators_per_index); global_index_offset = generator_count_offset + (index.index - local_index_offset - 1) * HIGH.num_generators_per_index; From eedb8da01ff11b817dccce1fb9bbb191dda86ad5 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Thu, 18 May 2023 19:02:13 +0000 Subject: [PATCH 08/15] Fix js test vk. --- .../join_split_example/proofs/join_split/join_split.test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp index 354b25eae8..2b35722889 100644 --- a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp +++ b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp @@ -708,7 +708,7 @@ TEST_F(join_split_tests, test_0_input_notes_and_detect_circuit_change) constexpr uint32_t CIRCUIT_GATE_COUNT = 184517; constexpr uint32_t GATES_NEXT_POWER_OF_TWO = 524288; - const uint256_t VK_HASH("f7593b089ac08335aa2a765fa1506e1c344a09de9d53a3591cde005ffa573cbc"); + const uint256_t VK_HASH("38f958b9cecb2502007b210a978b596ba1c0b37b2e5833e61aac4de53f1f9973"); auto number_of_gates_js = result.number_of_gates; std::cout << get_verification_key()->sha256_hash() << std::endl; From f6b175be01fb0c7010e7603ed7deb442022085dd Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 20 Jun 2023 14:53:46 +0000 Subject: [PATCH 09/15] Fix js vk test again. --- .../join_split_example/proofs/join_split/join_split.test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp index 2b35722889..43a9a17a35 100644 --- a/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp +++ b/cpp/src/barretenberg/join_split_example/proofs/join_split/join_split.test.cpp @@ -708,7 +708,7 @@ TEST_F(join_split_tests, test_0_input_notes_and_detect_circuit_change) constexpr uint32_t CIRCUIT_GATE_COUNT = 184517; constexpr uint32_t GATES_NEXT_POWER_OF_TWO = 524288; - const uint256_t VK_HASH("38f958b9cecb2502007b210a978b596ba1c0b37b2e5833e61aac4de53f1f9973"); + const uint256_t VK_HASH("787c464414a2c2e3332314ff528bd236b13133c269c5704505a0f3a3ad56ad57"); auto number_of_gates_js = result.number_of_gates; std::cout << get_verification_key()->sha256_hash() << std::endl; From 4eb4296b9a67c7b249196c2cf89ac8f2360f9b4c Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 20 Jun 2023 15:18:48 +0000 Subject: [PATCH 10/15] Fix high generator index offset. --- cpp/src/barretenberg/crypto/generators/generator_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index 182a852e09..cd9b5a4791 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -299,7 +299,7 @@ generator_data const& get_generator_data(generator_index_t index) } else if (index.index <= (LOW.num_indices + MID.num_indices + HIGH.num_indices)) { // Calculate the global index of the generator for the HIGH hash index const size_t local_index_offset = LOW.num_indices + MID.num_indices; - const size_t generator_count_offset = LOW.total_generators() + HIGH.total_generators(); + const size_t generator_count_offset = LOW.total_generators() + MID.total_generators(); ASSERT(index.sub_index < HIGH.num_generators_per_index); global_index_offset = generator_count_offset + (index.index - local_index_offset - 1) * HIGH.num_generators_per_index; From 892e3cd57e2b21e8c9d460e674dc3be9f606ab6d Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 20 Jun 2023 19:38:08 +0000 Subject: [PATCH 11/15] Fix pedersen ts test expected value. --- ts/src/barretenberg_api/pedersen.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/src/barretenberg_api/pedersen.test.ts b/ts/src/barretenberg_api/pedersen.test.ts index 3e812f5ae7..6d2fbe88ec 100644 --- a/ts/src/barretenberg_api/pedersen.test.ts +++ b/ts/src/barretenberg_api/pedersen.test.ts @@ -36,7 +36,7 @@ describe('pedersen', () => { it('pedersenCompressWithHashIndex', () => { const result = api.pedersenCompressWithHashIndex([new Fr(4n), new Fr(8n)], 7); - expect(result).toEqual(new Fr(12675961871866002745031098923411501942277744385859978302365013982702509949754n)); + expect(result).toEqual(new Fr(11068631634751286805527305272746775861010877976108429785597565355072506728435n)); }); it('pedersenCommit', () => { From 53ea96a5aa86b7e6c162a205b38a5f83d912460d Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Wed, 21 Jun 2023 13:13:31 +0000 Subject: [PATCH 12/15] Maybe fix --- README.md | 4 ++-- .../Dockerfile.circuits-wasm-linux-clang-builder-runner | 2 +- cpp/dockerfiles/Dockerfile.wasm-linux-clang | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7778931ea8..dced1feabf 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@ - clang >= 10 or gcc >= 10 - clang-format - libomp (if multithreading is required. Multithreading can be disabled using the compiler flag `-DMULTITHREADING 0`) -- wasm-opt (part of the [Binaryen](https://github.com/WebAssembly/binaryen) toolkit) To install on Ubuntu, run: + ``` -sudo apt-get install cmake clang clang-format ninja-build binaryen +sudo apt-get install cmake clang clang-format ninja-build ``` ### Installing openMP (Linux) diff --git a/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner b/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner index b1148403f4..7e9699e873 100644 --- a/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner +++ b/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner @@ -1,5 +1,5 @@ FROM ubuntu:kinetic -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y bash build-essential git libssl-dev cmake ninja-build curl binaryen xz-utils curl +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y bash build-essential git libssl-dev cmake ninja-build curl xz-utils curl RUN curl https://wasmtime.dev/install.sh -sSf | bash /dev/stdin --version v3.0.1 WORKDIR /usr/src/barretenberg/cpp diff --git a/cpp/dockerfiles/Dockerfile.wasm-linux-clang b/cpp/dockerfiles/Dockerfile.wasm-linux-clang index cd0408094f..7d98dcf2cc 100644 --- a/cpp/dockerfiles/Dockerfile.wasm-linux-clang +++ b/cpp/dockerfiles/Dockerfile.wasm-linux-clang @@ -1,5 +1,5 @@ FROM ubuntu:kinetic AS builder -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential wget git libssl-dev cmake ninja-build curl binaryen +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential wget git libssl-dev cmake ninja-build curl RUN curl https://wasmtime.dev/install.sh -sSf | bash /dev/stdin --version v3.0.1 WORKDIR /usr/src/barretenberg/cpp COPY ./scripts/install-wasi-sdk.sh ./scripts/install-wasi-sdk.sh From c0e088d3206e2c70eca9e43c063596e9da8f2bd1 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 27 Jun 2023 15:06:12 +0000 Subject: [PATCH 13/15] point to correct a3 commit. --- cpp/.aztec-packages-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/.aztec-packages-commit b/cpp/.aztec-packages-commit index 8b25206ff9..7860a2e94d 100644 --- a/cpp/.aztec-packages-commit +++ b/cpp/.aztec-packages-commit @@ -1 +1 @@ -master \ No newline at end of file +c5f733e3d8bc783b0f422e6ff95bb9090eaa76f6 \ No newline at end of file From a3b0aca08a78dd1a09dc4181d4e1feb4779d75f5 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Tue, 27 Jun 2023 15:37:19 +0000 Subject: [PATCH 14/15] increase HIGH generators. --- cpp/src/barretenberg/crypto/generators/generator_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/barretenberg/crypto/generators/generator_data.cpp b/cpp/src/barretenberg/crypto/generators/generator_data.cpp index cd9b5a4791..59cb11e679 100644 --- a/cpp/src/barretenberg/crypto/generators/generator_data.cpp +++ b/cpp/src/barretenberg/crypto/generators/generator_data.cpp @@ -24,7 +24,7 @@ struct HashIndexParams { constexpr HashIndexParams LOW = { 32, 8 }; constexpr HashIndexParams MID = { 8, 16 }; -constexpr HashIndexParams HIGH = { 4, 40 }; +constexpr HashIndexParams HIGH = { 4, 44 }; constexpr size_t num_hash_indices = (LOW.num_indices + MID.num_indices + HIGH.num_indices); constexpr size_t num_indexed_generators = LOW.total_generators() + MID.total_generators() + HIGH.total_generators(); From f0f272465d79377f53a8303680b2342c63412a55 Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Wed, 28 Jun 2023 13:18:43 +0000 Subject: [PATCH 15/15] point to latest a3 --- cpp/.aztec-packages-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/.aztec-packages-commit b/cpp/.aztec-packages-commit index 7860a2e94d..656b947ce1 100644 --- a/cpp/.aztec-packages-commit +++ b/cpp/.aztec-packages-commit @@ -1 +1 @@ -c5f733e3d8bc783b0f422e6ff95bb9090eaa76f6 \ No newline at end of file +3e16992198189112739e3710860e7d7717366108 \ No newline at end of file