From 4971ebe7bd6854a16e358c3b2ae3ab084fed933c Mon Sep 17 00:00:00 2001 From: maramihali Date: Tue, 18 Jun 2024 09:15:15 +0000 Subject: [PATCH 01/15] commit --- .../ultra_bench/ultra_honk_rounds.bench.cpp | 2 +- .../zeromorph/zeromorph.hpp | 137 +++---- .../zeromorph/zeromorph.test.cpp | 349 +++++++++--------- .../src/barretenberg/eccvm/eccvm_prover.cpp | 22 +- .../src/barretenberg/eccvm/eccvm_prover.hpp | 2 +- .../src/barretenberg/eccvm/eccvm_verifier.cpp | 20 +- .../eccvm_recursive_verifier.cpp | 20 +- .../protogalaxy/decider_verifier.cpp | 17 +- .../verifier/decider_recursive_verifier.cpp | 17 +- .../translator_vm/translator_prover.cpp | 30 +- .../translator_vm/translator_prover.hpp | 2 +- .../translator_vm/translator_verifier.cpp | 24 +- .../translator_recursive_verifier.cpp | 22 +- .../ultra_honk/decider_prover.cpp | 23 +- .../ultra_honk/decider_prover.hpp | 5 +- .../ultra_honk/ultra_verifier.cpp | 18 +- .../barretenberg/vm/generated/avm_prover.cpp | 23 +- .../barretenberg/vm/generated/avm_prover.hpp | 4 +- .../vm/generated/avm_verifier.cpp | 3 +- 19 files changed, 394 insertions(+), 346 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp index 2d8cbe748e3..5625d4fddac 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp @@ -60,7 +60,7 @@ BB_PROFILE static void test_round_inner(State& state, MegaProver& prover, size_t DeciderProver_ decider_prover(prover.instance, prover.transcript); time_if_index(RELATION_CHECK, [&] { decider_prover.execute_relation_check_rounds(); }); - time_if_index(ZEROMORPH, [&] { decider_prover.execute_zeromorph_rounds(); }); + time_if_index(ZEROMORPH, [&] { decider_prover.execute_pcs_rounds(); }); } BB_PROFILE static void test_round(State& state, size_t index) noexcept { diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index fe8947cbf01..ef11612613b 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -33,8 +33,7 @@ template inline std::vector powers_of_challenge(const FF challeng * * @tparam PCS - The univariate PCS used inside ZeroMorph as a building block */ -template class ZeroMorphProver_ { - using Curve = typename PCS::Curve; +template class ZeroMorphProver_ { using FF = typename Curve::ScalarField; using Commitment = typename Curve::AffineElement; using Polynomial = bb::Polynomial; @@ -320,16 +319,16 @@ template class ZeroMorphProver_ { * @param commitment_key * @param transcript */ - static void prove(RefSpan f_polynomials, - RefSpan g_polynomials, - RefSpan f_evaluations, - RefSpan g_shift_evaluations, - std::span multilinear_challenge, - const std::shared_ptr>& commitment_key, - const std::shared_ptr& transcript, - RefSpan concatenated_polynomials = {}, - RefSpan concatenated_evaluations = {}, - const std::vector>& concatenation_groups = {}) + static ProverOpeningClaim prove(RefSpan f_polynomials, + RefSpan g_polynomials, + RefSpan f_evaluations, + RefSpan g_shift_evaluations, + std::span multilinear_challenge, + const std::shared_ptr>& commitment_key, + const std::shared_ptr& transcript, + RefSpan concatenated_polynomials = {}, + RefSpan concatenated_evaluations = {}, + const std::vector>& concatenation_groups = {}) { // Generate batching challenge \rho and powers 1,...,\rho^{m-1} const FF rho = transcript->template get_challenge("rho"); @@ -428,9 +427,11 @@ template class ZeroMorphProver_ { // Compute batched degree-check and ZM-identity quotient polynomial pi auto pi_polynomial = compute_batched_evaluation_and_degree_check_polynomial(zeta_x, Z_x, z_challenge); - // Compute opening proof for x_challenge using the underlying univariate PCS - PCS::compute_opening_proof( - commitment_key, { .challenge = x_challenge, .evaluation = FF(0) }, pi_polynomial, transcript); + + return { pi_polynomial, { .challenge = x_challenge, .evaluation = FF(0) } }; + // // Compute opening proof for x_challenge using the underlying univariate CS:CS + // PCS::compute_opening_proof( + // commitment_key, { .challenge = x_challenge, .evaluation = FF(0) }, pi_polynomial, transcript); } }; @@ -439,11 +440,10 @@ template class ZeroMorphProver_ { * * @tparam Curve */ -template class ZeroMorphVerifier_ { - using Curve = typename PCS::Curve; +template class ZeroMorphVerifier_ { using FF = typename Curve::ScalarField; using Commitment = typename Curve::AffineElement; - using VerifierAccumulator = typename PCS::VerifierAccumulator; + using OpeningClaim = OpeningClaim; public: /** @@ -639,7 +639,7 @@ template class ZeroMorphVerifier_ { * @param concatenated_evaluations * @return OpeningClaim */ - static OpeningClaim compute_univariate_evaluation_opening_claim( + static OpeningClaim compute_univariate_evaluation_opening_claim( RefSpan unshifted_commitments, RefSpan to_be_shifted_commitments, RefSpan unshifted_evaluations, @@ -725,33 +725,34 @@ template class ZeroMorphVerifier_ { * @param transcript * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated */ - static VerifierAccumulator verify(RefSpan unshifted_commitments, - RefSpan to_be_shifted_commitments, - RefSpan unshifted_evaluations, - RefSpan shifted_evaluations, - std::span multivariate_challenge, - auto& transcript, - const std::vector>& concatenation_group_commitments = {}, - RefSpan concatenated_evaluations = {}) + static OpeningClaim verify(RefSpan unshifted_commitments, + RefSpan to_be_shifted_commitments, + RefSpan unshifted_evaluations, + RefSpan shifted_evaluations, + std::span multivariate_challenge, + Commitment first_g1, + auto& transcript, + const std::vector>& concatenation_group_commitments = {}, + RefSpan concatenated_evaluations = {}) { - Commitment first_g1; - - if constexpr (Curve::is_stdlib_type) { - auto builder = multivariate_challenge[0].get_context(); - first_g1 = Commitment::one(builder); - } else { - first_g1 = Commitment::one(); - } - auto opening_claim = compute_univariate_evaluation_opening_claim(unshifted_commitments, - to_be_shifted_commitments, - unshifted_evaluations, - shifted_evaluations, - multivariate_challenge, - first_g1, - transcript, - concatenation_group_commitments, - concatenated_evaluations); - return PCS::reduce_verify(opening_claim, transcript); + // Commitment first_g1; + + // if constexpr (Curve::is_stdlib_type) { + // auto builder = multivariate_challenge[0].get_context(); + // first_g1 = Commitment::one(builder); + // } else { + // first_g1 = Commitment::one(); + // } + return compute_univariate_evaluation_opening_claim(unshifted_commitments, + to_be_shifted_commitments, + unshifted_evaluations, + shifted_evaluations, + multivariate_challenge, + first_g1, + transcript, + concatenation_group_commitments, + concatenated_evaluations); + // return PCS::reduce_verify(opening_claim, transcript); } /** @@ -767,29 +768,29 @@ template class ZeroMorphVerifier_ { * @param transcript * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated */ - static VerifierAccumulator verify(RefSpan unshifted_commitments, - RefSpan to_be_shifted_commitments, - RefSpan unshifted_evaluations, - RefSpan shifted_evaluations, - std::span multivariate_challenge, - const std::shared_ptr>& vk, - auto& transcript, - const std::vector>& concatenation_group_commitments = {}, - RefSpan concatenated_evaluations = {}) - { - Commitment first_g1 = vk->get_first_g1(); - - auto opening_claim = compute_univariate_evaluation_opening_claim(unshifted_commitments, - to_be_shifted_commitments, - unshifted_evaluations, - shifted_evaluations, - multivariate_challenge, - first_g1, - transcript, - concatenation_group_commitments, - concatenated_evaluations); - return PCS::reduce_verify(vk, opening_claim, transcript); - } + // static VerifierAccumulator verify(RefSpan unshifted_commitments, + // RefSpan to_be_shifted_commitments, + // RefSpan unshifted_evaluations, + // RefSpan shifted_evaluations, + // std::span multivariate_challenge, + // const std::shared_ptr>& vk, + // auto& transcript, + // const std::vector>& concatenation_group_commitments = {}, + // RefSpan concatenated_evaluations = {}) + // { + // Commitment first_g1 = vk->get_first_g1(); + + // auto opening_claim = compute_univariate_evaluation_opening_claim(unshifted_commitments, + // to_be_shifted_commitments, + // unshifted_evaluations, + // shifted_evaluations, + // multivariate_challenge, + // first_g1, + // transcript, + // concatenation_group_commitments, + // concatenated_evaluations); + // return PCS::reduce_verify(vk, opening_claim, transcript); + // } }; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index 3fcb56aa3af..f4f23c99893 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -19,8 +19,11 @@ template class ZeroMorphTest : public CommitmentTest; using ZeroMorphVerifier = ZeroMorphVerifier_; - // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula - Fr Phi(Fr challenge, size_t subscript) + using PolynomialAndEvaluationsTuple + + // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula + Fr + Phi(Fr challenge, size_t subscript) { size_t length = 1 << subscript; auto result = Fr(0); @@ -39,7 +42,7 @@ template class ZeroMorphTest : public CommitmentTest class ZeroMorphTest : public CommitmentTest class ZeroMorphWithConcatenationTest : public CommitmentTest { - public: - using Curve = typename PCS::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - using Commitment = typename Curve::AffineElement; - using GroupElement = typename Curve::Element; - using VerifierAccumulator = typename PCS::VerifierAccumulator; - using ZeroMorphProver = ZeroMorphProver_; - using ZeroMorphVerifier = ZeroMorphVerifier_; - - // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula - Fr Phi(Fr challenge, size_t subscript) - { - size_t length = 1 << subscript; - auto result = Fr(0); - for (size_t idx = 0; idx < length; ++idx) { - result += challenge.pow(idx); - } - return result; - } - - /** - * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts and concatenation - * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials f_i, - * l polynomials h_i and o groups of polynomials where each polynomial is concatenated from several shorter - * polynomials. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" polynomials), which - * are a subset of the f_i. This is what is encountered in practice. We accomplish this using evaluations of h_i but - * commitments to only their unshifted counterparts g_i (which we get for "free" since commitments [g_i] are - * contained in the set of commitments [f_i]). - * - */ - bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED, size_t NUM_CONCATENATED) - { - bool verified = false; - size_t concatenation_index = 2; - size_t N = 64; - size_t MINI_CIRCUIT_N = N / concatenation_index; - size_t log_N = numeric::get_msb(N); - - auto u_challenge = this->random_evaluation_point(log_N); - - // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) - std::vector f_polynomials; // unshifted polynomials - std::vector v_evaluations; - for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { - f_polynomials.emplace_back(this->random_polynomial(N)); - f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" - v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); - } - - // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i - std::vector g_polynomials; // to-be-shifted polynomials - std::vector h_polynomials; // shifts of the to-be-shifted polynomials - std::vector w_evaluations; - for (size_t i = 0; i < NUM_SHIFTED; ++i) { - g_polynomials.emplace_back(f_polynomials[i]); - h_polynomials.emplace_back(g_polynomials[i].shifted()); - w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); - // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); - } - - // Polynomials "chunks" that are concatenated in the PCS - std::vector> concatenation_groups; - - // Concatenated polynomials - std::vector concatenated_polynomials; - - // Evaluations of concatenated polynomials - std::vector c_evaluations; - - // For each polynomial to be concatenated - for (size_t i = 0; i < NUM_CONCATENATED; ++i) { - std::vector concatenation_group; - Polynomial concatenated_polynomial(N); - // For each chunk - for (size_t j = 0; j < concatenation_index; j++) { - Polynomial chunk_polynomial(N); - // Fill the chunk polynomial with random values and appropriately fill the space in - // concatenated_polynomial - for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { - // Chunks should be shiftable - auto tmp = Fr(0); - if (k > 0) { - tmp = Fr::random_element(this->engine); - } - chunk_polynomial[k] = tmp; - concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; - } - concatenation_group.emplace_back(chunk_polynomial); - } - // Store chunks - concatenation_groups.emplace_back(concatenation_group); - // Store concatenated polynomial - concatenated_polynomials.emplace_back(concatenated_polynomial); - // Get evaluation - c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); - } - - // Compute commitments [f_i] - std::vector f_commitments; - for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { - f_commitments.emplace_back(this->commit(f_polynomials[i])); - } - - // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) - std::vector g_commitments; - for (size_t i = 0; i < NUM_SHIFTED; ++i) { - g_commitments.emplace_back(f_commitments[i]); - } - - // Compute commitments of all polynomial chunks - std::vector> concatenation_groups_commitments; - for (size_t i = 0; i < NUM_CONCATENATED; ++i) { - std::vector concatenation_group_commitment; - for (size_t j = 0; j < concatenation_index; j++) { - concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); - } - concatenation_groups_commitments.emplace_back(concatenation_group_commitment); - } - - // Initialize an empty NativeTranscript - auto prover_transcript = NativeTranscript::prover_init_empty(); - - // Execute Prover protocol - ZeroMorphProver::prove(RefVector(f_polynomials), // unshifted - RefVector(g_polynomials), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - this->commitment_key, - prover_transcript, - RefVector(concatenated_polynomials), - RefVector(c_evaluations), - to_vector_of_ref_vectors(concatenation_groups)); - - auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); - VerifierAccumulator result; - if constexpr (std::same_as>) { - // Execute Verifier protocol without the need for vk prior the final check - result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted - RefVector(g_commitments), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - verifier_transcript, - to_vector_of_ref_vectors(concatenation_groups_commitments), - RefVector(c_evaluations)); - verified = this->vk()->pairing_check(result[0], result[1]); - - } else { - // Execute Verifier protocol with vk - result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted - RefVector(g_commitments), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - this->vk(), - verifier_transcript, - to_vector_of_ref_vectors(concatenation_groups_commitments), - RefVector(c_evaluations)); - verified = result; - } - - // The prover and verifier manifests should agree - EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); - return verified; - } -}; +// template class ZeroMorphWithConcatenationTest : public CommitmentTest { +// public: +// using Curve = typename PCS::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; +// using Commitment = typename Curve::AffineElement; +// using GroupElement = typename Curve::Element; +// using VerifierAccumulator = typename PCS::VerifierAccumulator; +// using ZeroMorphProver = ZeroMorphProver_; +// using ZeroMorphVerifier = ZeroMorphVerifier_; + +// // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula +// Fr Phi(Fr challenge, size_t subscript) +// { +// size_t length = 1 << subscript; +// auto result = Fr(0); +// for (size_t idx = 0; idx < length; ++idx) { +// result += challenge.pow(idx); +// } +// return result; +// } + +// /** +// * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts and concatenation +// * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials +// f_i, +// * l polynomials h_i and o groups of polynomials where each polynomial is concatenated from several shorter +// * polynomials. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" polynomials), which +// * are a subset of the f_i. This is what is encountered in practice. We accomplish this using evaluations of h_i +// but +// * commitments to only their unshifted counterparts g_i (which we get for "free" since commitments [g_i] are +// * contained in the set of commitments [f_i]). +// * +// */ +// bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED, size_t NUM_CONCATENATED) +// { +// bool verified = false; +// size_t concatenation_index = 2; +// size_t N = 64; +// size_t MINI_CIRCUIT_N = N / concatenation_index; +// size_t log_N = numeric::get_msb(N); + +// auto u_challenge = this->random_evaluation_point(log_N); + +// // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) +// std::vector f_polynomials; // unshifted polynomials +// std::vector v_evaluations; +// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { +// f_polynomials.emplace_back(this->random_polynomial(N)); +// f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" +// v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); +// } + +// // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i +// std::vector g_polynomials; // to-be-shifted polynomials +// std::vector h_polynomials; // shifts of the to-be-shifted polynomials +// std::vector w_evaluations; +// for (size_t i = 0; i < NUM_SHIFTED; ++i) { +// g_polynomials.emplace_back(f_polynomials[i]); +// h_polynomials.emplace_back(g_polynomials[i].shifted()); +// w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); +// // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); +// } + +// // Polynomials "chunks" that are concatenated in the PCS +// std::vector> concatenation_groups; + +// // Concatenated polynomials +// std::vector concatenated_polynomials; + +// // Evaluations of concatenated polynomials +// std::vector c_evaluations; + +// // For each polynomial to be concatenated +// for (size_t i = 0; i < NUM_CONCATENATED; ++i) { +// std::vector concatenation_group; +// Polynomial concatenated_polynomial(N); +// // For each chunk +// for (size_t j = 0; j < concatenation_index; j++) { +// Polynomial chunk_polynomial(N); +// // Fill the chunk polynomial with random values and appropriately fill the space in +// // concatenated_polynomial +// for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { +// // Chunks should be shiftable +// auto tmp = Fr(0); +// if (k > 0) { +// tmp = Fr::random_element(this->engine); +// } +// chunk_polynomial[k] = tmp; +// concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; +// } +// concatenation_group.emplace_back(chunk_polynomial); +// } +// // Store chunks +// concatenation_groups.emplace_back(concatenation_group); +// // Store concatenated polynomial +// concatenated_polynomials.emplace_back(concatenated_polynomial); +// // Get evaluation +// c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); +// } + +// // Compute commitments [f_i] +// std::vector f_commitments; +// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { +// f_commitments.emplace_back(this->commit(f_polynomials[i])); +// } + +// // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) +// std::vector g_commitments; +// for (size_t i = 0; i < NUM_SHIFTED; ++i) { +// g_commitments.emplace_back(f_commitments[i]); +// } + +// // Compute commitments of all polynomial chunks +// std::vector> concatenation_groups_commitments; +// for (size_t i = 0; i < NUM_CONCATENATED; ++i) { +// std::vector concatenation_group_commitment; +// for (size_t j = 0; j < concatenation_index; j++) { +// concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); +// } +// concatenation_groups_commitments.emplace_back(concatenation_group_commitment); +// } + +// // Initialize an empty NativeTranscript +// auto prover_transcript = NativeTranscript::prover_init_empty(); + +// // Execute Prover protocol +// ZeroMorphProver::prove(RefVector(f_polynomials), // unshifted +// RefVector(g_polynomials), // to-be-shifted +// RefVector(v_evaluations), // unshifted +// RefVector(w_evaluations), // shifted +// u_challenge, +// this->commitment_key, +// prover_transcript, +// RefVector(concatenated_polynomials), +// RefVector(c_evaluations), +// to_vector_of_ref_vectors(concatenation_groups)); + +// auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); +// VerifierAccumulator result; +// if constexpr (std::same_as>) { +// // Execute Verifier protocol without the need for vk prior the final check +// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted +// RefVector(g_commitments), // to-be-shifted +// RefVector(v_evaluations), // unshifted +// RefVector(w_evaluations), // shifted +// u_challenge, +// verifier_transcript, +// to_vector_of_ref_vectors(concatenation_groups_commitments), +// RefVector(c_evaluations)); +// verified = this->vk()->pairing_check(result[0], result[1]); + +// } else { +// // Execute Verifier protocol with vk +// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted +// RefVector(g_commitments), // to-be-shifted +// RefVector(v_evaluations), // unshifted +// RefVector(w_evaluations), // shifted +// u_challenge, +// this->vk(), +// verifier_transcript, +// to_vector_of_ref_vectors(concatenation_groups_commitments), +// RefVector(c_evaluations)); +// verified = result; +// } + +// // The prover and verifier manifests should agree +// EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); +// return verified; +// } +// }; using PCSTypes = ::testing::Types, IPA>; TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 43cd7248f11..122e4ecba00 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -108,15 +108,19 @@ void ECCVMProver::execute_relation_check_rounds() * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ -void ECCVMProver::execute_zeromorph_rounds() +void ECCVMProver::execute_pcs_rounds() { - ZeroMorph::prove(key->polynomials.get_unshifted(), - key->polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphProver_; + auto prover_opening_claim = ZeroMorph::prove(key->polynomials.get_unshifted(), + key->polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + PCS::compute_opening_proof( + commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); } /** @@ -203,7 +207,7 @@ HonkProof ECCVMProver::construct_proof() execute_relation_check_rounds(); - execute_zeromorph_rounds(); + execute_pcs_rounds(); execute_transcript_consistency_univariate_opening_round(); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp index c6661069473..52d243ca06c 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp @@ -35,7 +35,7 @@ class ECCVMProver { BB_PROFILE void execute_log_derivative_commitments_round(); BB_PROFILE void execute_grand_product_computation_round(); BB_PROFILE void execute_relation_check_rounds(); - BB_PROFILE void execute_zeromorph_rounds(); + BB_PROFILE void execute_pcs_rounds(); BB_PROFILE void execute_transcript_consistency_univariate_opening_round(); HonkProof export_proof(); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp index 8cc715a97c5..07fddd18119 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp @@ -9,7 +9,8 @@ namespace bb { */ bool ECCVMVerifier::verify_proof(const HonkProof& proof) { - using ZeroMorph = ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; RelationParameters relation_parameters; transcript = std::make_shared(proof); @@ -57,13 +58,16 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) return false; } - bool multivariate_opening_verified = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - key->pcs_verification_key, - transcript); + auto multivariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + key->pcs_verification_key->get_first_g1(), + transcript); + bool multivariate_opening_verified = + PCS::reduce_verify(key->pcs_verification_key, multivariate_opening_claim, transcript); + // Execute transcript consistency univariate opening round // TODO(#768): Find a better way to do this. See issue for details. bool univariate_opening_verified = false; diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index 7bef58336b1..f206ef85d9c 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -18,7 +18,8 @@ ECCVMRecursiveVerifier_::ECCVMRecursiveVerifier_( // TODO(https://github.com/AztecProtocol/barretenberg/issues/1007): Finish this template void ECCVMRecursiveVerifier_::verify_proof(const HonkProof& proof) { - using ZeroMorph = ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; RelationParameters relation_parameters; StdlibProof stdlib_proof = bb::convert_proof_to_witness(builder, proof); @@ -72,13 +73,16 @@ template void ECCVMRecursiveVerifier_::verify_proof(co sumcheck.verify(relation_parameters, alpha, gate_challenges); // removed return bool - bool multivariate_opening_verified = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - key->pcs_verification_key, - transcript); + auto multivariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + key->pcs_verification_key->get_first_g1(), + transcript); + auto multivariate_opening_verified = + PCS::reduce_verify(key->pcs_verification_key, multivariate_opening_claim, transcript); + // Execute transcript consistency univariate opening round // TODO(#768): Find a better way to do this. See issue for details. bool univariate_opening_verified = false; diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_verifier.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/decider_verifier.cpp index 43441174ecf..5ae609a0e9a 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/decider_verifier.cpp @@ -28,7 +28,8 @@ DeciderVerifier_::DeciderVerifier_() template bool DeciderVerifier_::verify_proof(const HonkProof& proof) { using PCS = typename Flavor::PCS; - using ZeroMorph = ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; transcript = std::make_shared(proof); @@ -48,12 +49,14 @@ template bool DeciderVerifier_::verify_proof(const Hon // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - auto pairing_points = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - transcript); + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(), + transcript); + auto pairing_points = PCS::reduce_verify(opening_claim, transcript); auto verified = pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/decider_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/decider_recursive_verifier.cpp index 55d31e12096..44c083a544c 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/decider_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/decider_recursive_verifier.cpp @@ -15,7 +15,8 @@ std::array DeciderRecursiveVerifier_:: { using Sumcheck = ::bb::SumcheckVerifier; using PCS = typename Flavor::PCS; - using ZeroMorph = ::bb::ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ::bb::ZeroMorphVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; using Transcript = typename Flavor::Transcript; @@ -32,12 +33,14 @@ std::array DeciderRecursiveVerifier_:: // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - auto pairing_points = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - transcript); + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(builder), + transcript); + auto pairing_points = PCS::reduce_verify(opening_claim, transcript); return pairing_points; } diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp index f0b7101086b..7c12da82b6a 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp @@ -167,19 +167,23 @@ void TranslatorProver::execute_relation_check_rounds() * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ -void TranslatorProver::execute_zeromorph_rounds() +void TranslatorProver::execute_pcs_rounds() { - using ZeroMorph = ZeroMorphProver_; - ZeroMorph::prove(key->polynomials.get_unshifted_without_concatenated(), - key->polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted_without_concatenated(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript, - key->polynomials.get_concatenated_constraints(), - sumcheck_output.claimed_evaluations.get_concatenated_constraints(), - key->polynomials.get_concatenation_groups()); + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphProver_; + auto prover_opening_claim = + ZeroMorph::prove(key->polynomials.get_unshifted_without_concatenated(), + key->polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted_without_concatenated(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript, + key->polynomials.get_concatenated_constraints(), + sumcheck_output.claimed_evaluations.get_concatenated_constraints(), + key->polynomials.get_concatenation_groups()); + PCS::compute_opening_proof( + commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); } HonkProof TranslatorProver::export_proof() @@ -208,7 +212,7 @@ HonkProof TranslatorProver::construct_proof() // Fiat-Shamir: rho, y, x, z // Execute Zeromorph multilinear PCS - execute_zeromorph_rounds(); + execute_pcs_rounds(); return export_proof(); } diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.hpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.hpp index 62409ffbe8b..d61e9dc23cd 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.hpp @@ -36,7 +36,7 @@ class TranslatorProver { BB_PROFILE void execute_wire_and_sorted_constraints_commitments_round(); BB_PROFILE void execute_grand_product_computation_round(); BB_PROFILE void execute_relation_check_rounds(); - BB_PROFILE void execute_zeromorph_rounds(); + BB_PROFILE void execute_pcs_rounds(); HonkProof export_proof(); HonkProof construct_proof(); diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp index 53880bc0cf0..d4797caaccf 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp @@ -53,6 +53,10 @@ void TranslatorVerifier::put_translation_data_in_relation_parameters(const uint2 */ bool TranslatorVerifier::verify_proof(const HonkProof& proof) { + using Curve = typename Flavor::Curve; + using PCS = typename Flavor::PCS; + using ZeroMorph = ::bb::ZeroMorphVerifier_; + batching_challenge_v = transcript->template get_challenge("Translation:batching_challenge"); // Load the proof produced by the translator prover @@ -108,15 +112,17 @@ bool TranslatorVerifier::verify_proof(const HonkProof& proof) // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description ofthe // unrolled protocol. - auto pairing_points = - ZeroMorphVerifier_::verify(commitments.get_unshifted_without_concatenated(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted_without_concatenated(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - transcript, - commitments.get_concatenation_groups(), - claimed_evaluations.get_concatenated_constraints()); + + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(), + transcript, + commitments.get_concatenation_groups(), + claimed_evaluations.get_concatenated_constraints()); + auto pairing_points = PCS::reduce_verify(opening_claim, transcript); auto verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); diff --git a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp index e22a831aa26..11c582c6004 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp @@ -60,7 +60,8 @@ std::array TranslatorRecursiveVerifier_; using PCS = typename Flavor::PCS; - using ZeroMorph = ::bb::ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ::bb::ZeroMorphVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; using CommitmentLabels = typename Flavor::CommitmentLabels; @@ -111,14 +112,17 @@ std::array TranslatorRecursiveVerifier_ void DeciderProver_::execute_relation_ch * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ -template void DeciderProver_::execute_zeromorph_rounds() +template void DeciderProver_::execute_pcs_rounds() { - ZeroMorph::prove(accumulator->proving_key.polynomials.get_unshifted(), - accumulator->proving_key.polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); + using ZeroMorph = ZeroMorphProver_; + auto prover_opening_claim = ZeroMorph::prove(accumulator->proving_key.polynomials.get_unshifted(), + accumulator->proving_key.polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + PCS::compute_opening_proof( + commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); } template HonkProof DeciderProver_::export_proof() @@ -59,12 +62,12 @@ template HonkProof DeciderProver_::construct_proo { BB_OP_COUNT_TIME_NAME("Decider::construct_proof"); - // Run sumcheck subprotocol. execute_relation_check_rounds(); + // Run sumcheck subprotocol. // Fiat-Shamir: rho, y, x, z // Execute Zeromorph multilinear PCS - execute_zeromorph_rounds(); + execute_pcs_rounds(); return export_proof(); } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp index 910bcd898e0..2a3902d9ad1 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp @@ -12,6 +12,7 @@ namespace bb { template class DeciderProver_ { using FF = typename Flavor::FF; + using Curve = typename Flavor::Curve; using Commitment = typename Flavor::Commitment; using CommitmentKey = typename Flavor::CommitmentKey; using ProvingKey = typename Flavor::ProvingKey; @@ -28,7 +29,7 @@ template class DeciderProver_ { const std::shared_ptr& transcript = std::make_shared()); BB_PROFILE void execute_relation_check_rounds(); - BB_PROFILE void execute_zeromorph_rounds(); + BB_PROFILE void execute_pcs_rounds(); HonkProof export_proof(); HonkProof construct_proof(); @@ -47,8 +48,6 @@ template class DeciderProver_ { std::shared_ptr commitment_key; - using ZeroMorph = ZeroMorphProver_; - private: HonkProof proof; }; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp index 60e5afd118b..d87b32081c8 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp @@ -43,7 +43,8 @@ template bool UltraVerifier_::verify_proof(const HonkP { using FF = typename Flavor::FF; using PCS = typename Flavor::PCS; - using ZeroMorph = ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; transcript = std::make_shared(proof); @@ -74,12 +75,15 @@ template bool UltraVerifier_::verify_proof(const HonkP // Execute ZeroMorph rounds and check the pcs verifier accumulator returned. See // https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. - auto pairing_points = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - transcript); + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(), + transcript); + auto pairing_points = PCS::reduce_verify(opening_claim, transcript); + auto pcs_verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); return sumcheck_verified.value() && pcs_verified; } diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp index 57ee78efa8c..094479dec20 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp @@ -986,15 +986,20 @@ void AvmProver::execute_relation_check_rounds() * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ -void AvmProver::execute_zeromorph_rounds() +void AvmProver::execute_pcs_rounds() { - ZeroMorph::prove(prover_polynomials.get_unshifted(), - prover_polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); + using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphProver_; + + auto prover_opening_claim = ZeroMorph::prove(prover_polynomials.get_unshifted(), + prover_polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + PCS::compute_opening_proof( + commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); } HonkProof AvmProver::export_proof() @@ -1020,7 +1025,7 @@ HonkProof AvmProver::construct_proof() // Fiat-Shamir: rho, y, x, z // Execute Zeromorph multilinear PCS - execute_zeromorph_rounds(); + execute_pcs_rounds(); return export_proof(); } diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp index 74d504446a3..4fe30cb7fcd 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp @@ -30,7 +30,7 @@ class AvmProver { void execute_wire_commitments_round(); void execute_log_derivative_inverse_round(); void execute_relation_check_rounds(); - void execute_zeromorph_rounds(); + void execute_pcs_rounds(); HonkProof export_proof(); HonkProof construct_proof(); @@ -55,8 +55,6 @@ class AvmProver { std::shared_ptr commitment_key; - using ZeroMorph = ZeroMorphProver_; - private: HonkProof proof; }; diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp index 70dcfeda257..37a8aacd35b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp @@ -52,7 +52,8 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, const std::vector; + // using Curve = typename Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = Flavor::VerifierCommitments; using CommitmentLabels = Flavor::CommitmentLabels; From e7350db0b0bfe7a0e7a67e68c1520295f6691a61 Mon Sep 17 00:00:00 2001 From: maramihali Date: Tue, 18 Jun 2024 09:55:35 +0000 Subject: [PATCH 02/15] modify verifiers --- .../zeromorph/zeromorph.test.cpp | 814 +++++++++--------- .../eccvm_recursive_verifier.test.cpp | 1 - .../verifier/ultra_recursive_verifier.cpp | 20 +- .../stdlib_circuit_builders/ultra_flavor.hpp | 1 - .../translator_vm/translator_verifier.cpp | 4 +- .../translator_recursive_verifier.cpp | 4 +- 6 files changed, 422 insertions(+), 422 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index f4f23c99893..d4fbf7674fe 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -1,129 +1,127 @@ -#include "zeromorph.hpp" -#include "../commitment_key.test.hpp" -#include "barretenberg/commitment_schemes/ipa/ipa.hpp" -#include "barretenberg/commitment_schemes/kzg/kzg.hpp" -#include "barretenberg/transcript/transcript.hpp" - -#include - -namespace bb { - -template class ZeroMorphTest : public CommitmentTest { - public: - using Curve = typename PCS::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - using Commitment = typename Curve::AffineElement; - using GroupElement = typename Curve::Element; - using VerifierAccumulator = typename PCS::VerifierAccumulator; - using ZeroMorphProver = ZeroMorphProver_; - using ZeroMorphVerifier = ZeroMorphVerifier_; - - using PolynomialAndEvaluationsTuple - - // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula - Fr - Phi(Fr challenge, size_t subscript) - { - size_t length = 1 << subscript; - auto result = Fr(0); - for (size_t idx = 0; idx < length; ++idx) { - result += challenge.pow(idx); - } - return result; - } - - /** - * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts - * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials f_i - * and l polynomials h_i. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" - * polynomials), which are a subset of the f_i. This is what is encountered in practice. We accomplish this using - * evaluations of h_i but commitments to only their unshifted counterparts g_i (which we get for "free" since - * commitments [g_i] are contained in the set of commitments [f_i]). - * - */ - bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED, size_t NUM_CONCATENATED = 0) - { - size_t N = 2; - size_t log_N = numeric::get_msb(N); - - std::vector u_challenge = this->random_evaluation_point(log_N); - - // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) - std::vector f_polynomials; // unshifted polynomials - std::vector v_evaluations; - for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { - f_polynomials.emplace_back(this->random_polynomial(N)); - f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" - v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); - } - - // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i - std::vector g_polynomials; // to-be-shifted polynomials - std::vector h_polynomials; // shifts of the to-be-shifted polynomials - std::vector w_evaluations; - for (size_t i = 0; i < NUM_SHIFTED; ++i) { - g_polynomials.emplace_back(f_polynomials[i]); - h_polynomials.emplace_back(g_polynomials[i].shifted()); - w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); - // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); - } - - // Compute commitments [f_i] - std::vector f_commitments; - for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { - f_commitments.emplace_back(this->commit(f_polynomials[i])); - } - - // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) - std::vector g_commitments; - for (size_t i = 0; i < NUM_SHIFTED; ++i) { - g_commitments.emplace_back(f_commitments[i]); - } - - // Initialize an empty NativeTranscript - auto prover_transcript = NativeTranscript::prover_init_empty(); - - // Execute Prover protocol - ZeroMorphProver::prove(RefVector(f_polynomials), - RefVector(g_polynomials), - RefVector(v_evaluations), - RefVector(w_evaluations), - u_challenge, - this->commitment_key, - prover_transcript); - - auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); - - VerifierAccumulator result; - bool verified = false; - if constexpr (std::same_as>) { - // Execute Verifier protocol without the need for vk prior the final check - result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted - RefVector(g_commitments), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - verifier_transcript); - verified = this->vk()->pairing_check(result[0], result[1]); - } else { - // Execute Verifier protocol with vk - result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted - RefVector(g_commitments), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - this->vk(), - verifier_transcript); - verified = result; - } - - // The prover and verifier manifests should agree - EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); - - return verified; - } -}; +// #include "zeromorph.hpp" +// #include "../commitment_key.test.hpp" +// #include "barretenberg/commitment_schemes/ipa/ipa.hpp" +// #include "barretenberg/commitment_schemes/kzg/kzg.hpp" +// #include "barretenberg/transcript/transcript.hpp" + +// #include + +// namespace bb { + +// template class ZeroMorphTest : public CommitmentTest { +// public: +// using Curve = typename PCS::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; +// using Commitment = typename Curve::AffineElement; +// using GroupElement = typename Curve::Element; +// using VerifierAccumulator = typename PCS::VerifierAccumulator; +// using ZeroMorphProver = ZeroMorphProver_; +// using ZeroMorphVerifier = ZeroMorphVerifier_; + +// // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula +// Fr Phi(Fr challenge, size_t subscript) +// { +// size_t length = 1 << subscript; +// auto result = Fr(0); +// for (size_t idx = 0; idx < length; ++idx) { +// result += challenge.pow(idx); +// } +// return result; +// } + +// /** +// * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts +// * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials +// f_i +// * and l polynomials h_i. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" +// * polynomials), which are a subset of the f_i. This is what is encountered in practice. We accomplish this using +// * evaluations of h_i but commitments to only their unshifted counterparts g_i (which we get for "free" since +// * commitments [g_i] are contained in the set of commitments [f_i]). +// * +// */ +// bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED) +// { +// size_t N = 2; +// size_t log_N = numeric::get_msb(N); + +// std::vector u_challenge = this->random_evaluation_point(log_N); + +// // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) +// std::vector f_polynomials; // unshifted polynomials +// std::vector v_evaluations; +// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { +// f_polynomials.emplace_back(this->random_polynomial(N)); +// f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" +// v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); +// } + +// // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i +// std::vector g_polynomials; // to-be-shifted polynomials +// std::vector h_polynomials; // shifts of the to-be-shifted polynomials +// std::vector w_evaluations; +// for (size_t i = 0; i < NUM_SHIFTED; ++i) { +// g_polynomials.emplace_back(f_polynomials[i]); +// h_polynomials.emplace_back(g_polynomials[i].shifted()); +// w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); +// // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); +// } + +// // Compute commitments [f_i] +// std::vector f_commitments; +// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { +// f_commitments.emplace_back(this->commit(f_polynomials[i])); +// } + +// // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) +// std::vector g_commitments; +// for (size_t i = 0; i < NUM_SHIFTED; ++i) { +// g_commitments.emplace_back(f_commitments[i]); +// } + +// // Initialize an empty NativeTranscript +// auto prover_transcript = NativeTranscript::prover_init_empty(); + +// // Execute Prover protocol +// ZeroMorphProver::prove(RefVector(f_polynomials), +// RefVector(g_polynomials), +// RefVector(v_evaluations), +// RefVector(w_evaluations), +// u_challenge, +// this->commitment_key, +// prover_transcript); + +// auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); + +// VerifierAccumulator result; +// bool verified = false; +// if constexpr (std::same_as>) { +// // Execute Verifier protocol without the need for vk prior the final check +// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted +// RefVector(g_commitments), // to-be-shifted +// RefVector(v_evaluations), // unshifted +// RefVector(w_evaluations), // shifted +// u_challenge, +// verifier_transcript); +// verified = this->vk()->pairing_check(result[0], result[1]); +// } else { +// // Execute Verifier protocol with vk +// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted +// RefVector(g_commitments), // to-be-shifted +// RefVector(v_evaluations), // unshifted +// RefVector(w_evaluations), // shifted +// u_challenge, +// this->vk(), +// verifier_transcript); +// verified = result; +// } + +// // The prover and verifier manifests should agree +// EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); + +// return verified; +// } +// }; // template class ZeroMorphWithConcatenationTest : public CommitmentTest { // public: @@ -297,285 +295,285 @@ template class ZeroMorphTest : public CommitmentTest, IPA>; -TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); -TYPED_TEST_SUITE(ZeroMorphWithConcatenationTest, PCSTypes); - -/** - * @brief Test method for computing q_k given multilinear f - * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such that - * the following identity holds: - * - * f(X_0, ..., X_{d-1}) - v = \sum_{k=0}^{d-1} (X_k - u_k)q_k(X_0, ..., X_{k-1}) - * - */ -TYPED_TEST(ZeroMorphTest, QuotientConstruction) -{ - // Define some useful type aliases - using ZeroMorphProver = ZeroMorphProver_; - using Curve = typename TypeParam::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - - // Define size parameters - size_t N = 16; - size_t log_N = numeric::get_msb(N); - - // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. - Polynomial multilinear_f = this->random_polynomial(N); - std::vector u_challenge = this->random_evaluation_point(log_N); - Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); - - // Compute the multilinear quotients q_k = q_k(X_0, ..., X_{k-1}) - std::vector quotients = ZeroMorphProver::compute_multilinear_quotients(multilinear_f, u_challenge); - - // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear challenge - // z, i.e. f(z) - v - \sum_{k=0}^{d-1} (z_k - u_k)q_k(z) = 0 - std::vector z_challenge = this->random_evaluation_point(log_N); - - Fr result = multilinear_f.evaluate_mle(z_challenge); - result -= v_evaluation; - for (size_t k = 0; k < log_N; ++k) { - auto q_k_eval = Fr(0); - if (k == 0) { - // q_0 = a_0 is a constant polynomial so it's evaluation is simply its constant coefficient - q_k_eval = quotients[k][0]; - } else { - // Construct (u_0, ..., u_{k-1}) - auto subrange_size = static_cast(k); - std::vector z_partial(z_challenge.begin(), z_challenge.begin() + subrange_size); - q_k_eval = quotients[k].evaluate_mle(z_partial); - } - // result = result - (z_k - u_k) * q_k(u_0, ..., u_{k-1}) - result -= (z_challenge[k] - u_challenge[k]) * q_k_eval; - } - - EXPECT_EQ(result, 0); -} - -/** - * @brief Test function for constructing batched lifted degree quotient \hat{q} - * - */ -TYPED_TEST(ZeroMorphTest, BatchedLiftedDegreeQuotient) -{ - // Define some useful type aliases - using ZeroMorphProver = ZeroMorphProver_; - using Curve = typename TypeParam::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - - const size_t N = 8; - - // Define some mock q_k with deg(q_k) = 2^k - 1 - std::vector data_0 = { 1 }; - std::vector data_1 = { 2, 3 }; - std::vector data_2 = { 4, 5, 6, 7 }; - Polynomial q_0(data_0); - Polynomial q_1(data_1); - Polynomial q_2(data_2); - std::vector quotients = { q_0, q_1, q_2 }; - - auto y_challenge = Fr::random_element(); - - // Compute batched quotient \hat{q} using the prover method - auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); - - // Now explicitly define q_k_lifted = X^{N-2^k} * q_k and compute the expected batched result - std::array data_0_lifted = { 0, 0, 0, 0, 0, 0, 0, 1 }; - std::array data_1_lifted = { 0, 0, 0, 0, 0, 0, 2, 3 }; - std::array data_2_lifted = { 0, 0, 0, 0, 4, 5, 6, 7 }; - Polynomial q_0_lifted(data_0_lifted); - Polynomial q_1_lifted(data_1_lifted); - Polynomial q_2_lifted(data_2_lifted); - - // Explicitly compute \hat{q} - auto batched_quotient_expected = Polynomial(N); - batched_quotient_expected += q_0_lifted; - batched_quotient_expected.add_scaled(q_1_lifted, y_challenge); - batched_quotient_expected.add_scaled(q_2_lifted, y_challenge * y_challenge); - - EXPECT_EQ(batched_quotient, batched_quotient_expected); -} - -/** - * @brief Test function for constructing partially evaluated quotient \zeta_x - * - */ -TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZeta) -{ - // Define some useful type aliases - using ZeroMorphProver = ZeroMorphProver_; - using Curve = typename TypeParam::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - - const size_t N = 8; - - // Define some mock q_k with deg(q_k) = 2^k - 1 - std::vector data_0 = { 1 }; - std::vector data_1 = { 2, 3 }; - std::vector data_2 = { 4, 5, 6, 7 }; - Polynomial q_0(data_0); - Polynomial q_1(data_1); - Polynomial q_2(data_2); - std::vector quotients = { q_0, q_1, q_2 }; - - auto y_challenge = Fr::random_element(); - - auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); - - auto x_challenge = Fr::random_element(); - - // Contruct zeta_x using the prover method - auto zeta_x = ZeroMorphProver::compute_partially_evaluated_degree_check_polynomial( - batched_quotient, quotients, y_challenge, x_challenge); - - // Now construct zeta_x explicitly - auto zeta_x_expected = Polynomial(N); - zeta_x_expected += batched_quotient; - // q_batched - \sum_k q_k * y^k * x^{N - deg(q_k) - 1} - zeta_x_expected.add_scaled(q_0, -x_challenge.pow(N - 0 - 1)); - zeta_x_expected.add_scaled(q_1, -y_challenge * x_challenge.pow(N - 1 - 1)); - zeta_x_expected.add_scaled(q_2, -y_challenge * y_challenge * x_challenge.pow(N - 3 - 1)); - - EXPECT_EQ(zeta_x, zeta_x_expected); -} - -/** - * @brief Demonstrate formulas for efficiently computing \Phi_k(x) = \sum_{i=0}^{k-1}x^i - * @details \Phi_k(x) = \sum_{i=0}^{k-1}x^i = (x^{2^k} - 1) / (x - 1) - * - */ -TYPED_TEST(ZeroMorphTest, PhiEvaluation) -{ - using Curve = typename TypeParam::Curve; - using Fr = typename Curve::ScalarField; - const size_t N = 8; - size_t n = numeric::get_msb(N); - - // \Phi_n(x) - { - auto x_challenge = Fr::random_element(); - - auto efficient = (x_challenge.pow(1 << n) - 1) / (x_challenge - 1); - - auto expected = this->Phi(x_challenge, n); - - EXPECT_EQ(efficient, expected); - } - - // \Phi_{n-k-1}(x^{2^{k + 1}}) = (x^{2^n} - 1) / (x^{2^{k + 1}} - 1) - { - auto x_challenge = Fr::random_element(); - - size_t k = 2; - - // x^{2^{k+1}} - auto x_pow = x_challenge.pow(1 << (k + 1)); - - auto efficient = x_challenge.pow(1 << n) - 1; // x^N - 1 - efficient = efficient / (x_pow - 1); // (x^N - 1) / (x^{2^{k + 1}} - 1) - - auto expected = this->Phi(x_pow, n - k - 1); - EXPECT_EQ(efficient, expected); - } -} - -/** - * @brief Test function for constructing partially evaluated quotient Z_x - * - */ -TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZ) -{ - // Define some useful type aliases - using ZeroMorphProver = ZeroMorphProver_; - using Curve = typename TypeParam::Curve; - using Fr = typename Curve::ScalarField; - using Polynomial = bb::Polynomial; - - const size_t N = 8; - size_t log_N = numeric::get_msb(N); - - // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. - Polynomial multilinear_f = this->random_polynomial(N); - Polynomial multilinear_g = this->random_polynomial(N); - multilinear_g[0] = 0; - std::vector u_challenge = this->random_evaluation_point(log_N); - Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); - Fr w_evaluation = multilinear_g.evaluate_mle(u_challenge, /* shift = */ true); - - auto rho = Fr::random_element(); - - // compute batched polynomial and evaluation - auto f_batched = multilinear_f; - auto g_batched = multilinear_g; - g_batched *= rho; - auto v_batched = v_evaluation + rho * w_evaluation; - - // Define some mock q_k with deg(q_k) = 2^k - 1 - auto q_0 = this->random_polynomial(1 << 0); - auto q_1 = this->random_polynomial(1 << 1); - auto q_2 = this->random_polynomial(1 << 2); - std::vector quotients = { q_0, q_1, q_2 }; - - auto x_challenge = Fr::random_element(); - - // Construct Z_x using the prover method - auto Z_x = ZeroMorphProver::compute_partially_evaluated_zeromorph_identity_polynomial( - f_batched, g_batched, quotients, v_batched, u_challenge, x_challenge); - - // Compute Z_x directly - auto Z_x_expected = g_batched; - Z_x_expected.add_scaled(f_batched, x_challenge); - Z_x_expected[0] -= v_batched * x_challenge * this->Phi(x_challenge, log_N); - for (size_t k = 0; k < log_N; ++k) { - auto x_pow_2k = x_challenge.pow(1 << k); // x^{2^k} - auto x_pow_2kp1 = x_challenge.pow(1 << (k + 1)); // x^{2^{k+1}} - // x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k}) - auto scalar = x_pow_2k * this->Phi(x_pow_2kp1, log_N - k - 1) - u_challenge[k] * this->Phi(x_pow_2k, log_N - k); - scalar *= x_challenge; - scalar *= Fr(-1); - Z_x_expected.add_scaled(quotients[k], scalar); - } - - EXPECT_EQ(Z_x, Z_x_expected); -} - -/** - * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation - * - */ -TYPED_TEST(ZeroMorphTest, ProveAndVerifySingle) -{ - size_t num_unshifted = 1; - size_t num_shifted = 0; - auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); - EXPECT_TRUE(verified); -} - -/** - * @brief Test full Prover/Verifier protocol for proving batched multilinear evaluation with shifts - * - */ -TYPED_TEST(ZeroMorphTest, ProveAndVerifyBatchedWithShifts) -{ - size_t num_unshifted = 3; - size_t num_shifted = 2; - auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); - EXPECT_TRUE(verified); -} - -/** - * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation - * - */ -TYPED_TEST(ZeroMorphWithConcatenationTest, ProveAndVerify) -{ - size_t num_unshifted = 1; - size_t num_shifted = 0; - size_t num_concatenated = 3; - auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted, num_concatenated); - EXPECT_TRUE(verified); -} -} // namespace bb +// using PCSTypes = ::testing::Types, IPA>; +// TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); +// TYPED_TEST_SUITE(ZeroMorphWithConcatenationTest, PCSTypes); + +// /** +// * @brief Test method for computing q_k given multilinear f +// * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such +// that +// * the following identity holds: +// * +// * f(X_0, ..., X_{d-1}) - v = \sum_{k=0}^{d-1} (X_k - u_k)q_k(X_0, ..., X_{k-1}) +// * +// */ +// TYPED_TEST(ZeroMorphTest, QuotientConstruction) +// { +// // Define some useful type aliases +// using ZeroMorphProver = ZeroMorphProver_; +// using Curve = typename TypeParam::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; + +// // Define size parameters +// size_t N = 16; +// size_t log_N = numeric::get_msb(N); + +// // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. +// Polynomial multilinear_f = this->random_polynomial(N); +// std::vector u_challenge = this->random_evaluation_point(log_N); +// Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); + +// // Compute the multilinear quotients q_k = q_k(X_0, ..., X_{k-1}) +// std::vector quotients = ZeroMorphProver::compute_multilinear_quotients(multilinear_f, u_challenge); + +// // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear +// challenge +// // z, i.e. f(z) - v - \sum_{k=0}^{d-1} (z_k - u_k)q_k(z) = 0 +// std::vector z_challenge = this->random_evaluation_point(log_N); + +// Fr result = multilinear_f.evaluate_mle(z_challenge); +// result -= v_evaluation; +// for (size_t k = 0; k < log_N; ++k) { +// auto q_k_eval = Fr(0); +// if (k == 0) { +// // q_0 = a_0 is a constant polynomial so it's evaluation is simply its constant coefficient +// q_k_eval = quotients[k][0]; +// } else { +// // Construct (u_0, ..., u_{k-1}) +// auto subrange_size = static_cast(k); +// std::vector z_partial(z_challenge.begin(), z_challenge.begin() + subrange_size); +// q_k_eval = quotients[k].evaluate_mle(z_partial); +// } +// // result = result - (z_k - u_k) * q_k(u_0, ..., u_{k-1}) +// result -= (z_challenge[k] - u_challenge[k]) * q_k_eval; +// } + +// EXPECT_EQ(result, 0); +// } + +// /** +// * @brief Test function for constructing batched lifted degree quotient \hat{q} +// * +// */ +// TYPED_TEST(ZeroMorphTest, BatchedLiftedDegreeQuotient) +// { +// // Define some useful type aliases +// using ZeroMorphProver = ZeroMorphProver_; +// using Curve = typename TypeParam::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; + +// const size_t N = 8; + +// // Define some mock q_k with deg(q_k) = 2^k - 1 +// std::vector data_0 = { 1 }; +// std::vector data_1 = { 2, 3 }; +// std::vector data_2 = { 4, 5, 6, 7 }; +// Polynomial q_0(data_0); +// Polynomial q_1(data_1); +// Polynomial q_2(data_2); +// std::vector quotients = { q_0, q_1, q_2 }; + +// auto y_challenge = Fr::random_element(); + +// // Compute batched quotient \hat{q} using the prover method +// auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); + +// // Now explicitly define q_k_lifted = X^{N-2^k} * q_k and compute the expected batched result +// std::array data_0_lifted = { 0, 0, 0, 0, 0, 0, 0, 1 }; +// std::array data_1_lifted = { 0, 0, 0, 0, 0, 0, 2, 3 }; +// std::array data_2_lifted = { 0, 0, 0, 0, 4, 5, 6, 7 }; +// Polynomial q_0_lifted(data_0_lifted); +// Polynomial q_1_lifted(data_1_lifted); +// Polynomial q_2_lifted(data_2_lifted); + +// // Explicitly compute \hat{q} +// auto batched_quotient_expected = Polynomial(N); +// batched_quotient_expected += q_0_lifted; +// batched_quotient_expected.add_scaled(q_1_lifted, y_challenge); +// batched_quotient_expected.add_scaled(q_2_lifted, y_challenge * y_challenge); + +// EXPECT_EQ(batched_quotient, batched_quotient_expected); +// } + +// /** +// * @brief Test function for constructing partially evaluated quotient \zeta_x +// * +// */ +// TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZeta) +// { +// // Define some useful type aliases +// using ZeroMorphProver = ZeroMorphProver_; +// using Curve = typename TypeParam::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; + +// const size_t N = 8; + +// // Define some mock q_k with deg(q_k) = 2^k - 1 +// std::vector data_0 = { 1 }; +// std::vector data_1 = { 2, 3 }; +// std::vector data_2 = { 4, 5, 6, 7 }; +// Polynomial q_0(data_0); +// Polynomial q_1(data_1); +// Polynomial q_2(data_2); +// std::vector quotients = { q_0, q_1, q_2 }; + +// auto y_challenge = Fr::random_element(); + +// auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); + +// auto x_challenge = Fr::random_element(); + +// // Contruct zeta_x using the prover method +// auto zeta_x = ZeroMorphProver::compute_partially_evaluated_degree_check_polynomial( +// batched_quotient, quotients, y_challenge, x_challenge); + +// // Now construct zeta_x explicitly +// auto zeta_x_expected = Polynomial(N); +// zeta_x_expected += batched_quotient; +// // q_batched - \sum_k q_k * y^k * x^{N - deg(q_k) - 1} +// zeta_x_expected.add_scaled(q_0, -x_challenge.pow(N - 0 - 1)); +// zeta_x_expected.add_scaled(q_1, -y_challenge * x_challenge.pow(N - 1 - 1)); +// zeta_x_expected.add_scaled(q_2, -y_challenge * y_challenge * x_challenge.pow(N - 3 - 1)); + +// EXPECT_EQ(zeta_x, zeta_x_expected); +// } + +// /** +// * @brief Demonstrate formulas for efficiently computing \Phi_k(x) = \sum_{i=0}^{k-1}x^i +// * @details \Phi_k(x) = \sum_{i=0}^{k-1}x^i = (x^{2^k} - 1) / (x - 1) +// * +// */ +// TYPED_TEST(ZeroMorphTest, PhiEvaluation) +// { +// using Curve = typename TypeParam::Curve; +// using Fr = typename Curve::ScalarField; +// const size_t N = 8; +// size_t n = numeric::get_msb(N); + +// // \Phi_n(x) +// { +// auto x_challenge = Fr::random_element(); + +// auto efficient = (x_challenge.pow(1 << n) - 1) / (x_challenge - 1); + +// auto expected = this->Phi(x_challenge, n); + +// EXPECT_EQ(efficient, expected); +// } + +// // \Phi_{n-k-1}(x^{2^{k + 1}}) = (x^{2^n} - 1) / (x^{2^{k + 1}} - 1) +// { +// auto x_challenge = Fr::random_element(); + +// size_t k = 2; + +// // x^{2^{k+1}} +// auto x_pow = x_challenge.pow(1 << (k + 1)); + +// auto efficient = x_challenge.pow(1 << n) - 1; // x^N - 1 +// efficient = efficient / (x_pow - 1); // (x^N - 1) / (x^{2^{k + 1}} - 1) + +// auto expected = this->Phi(x_pow, n - k - 1); +// EXPECT_EQ(efficient, expected); +// } +// } + +// /** +// * @brief Test function for constructing partially evaluated quotient Z_x +// * +// */ +// TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZ) +// { +// // Define some useful type aliases +// using ZeroMorphProver = ZeroMorphProver_; +// using Curve = typename TypeParam::Curve; +// using Fr = typename Curve::ScalarField; +// using Polynomial = bb::Polynomial; + +// const size_t N = 8; +// size_t log_N = numeric::get_msb(N); + +// // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. +// Polynomial multilinear_f = this->random_polynomial(N); +// Polynomial multilinear_g = this->random_polynomial(N); +// multilinear_g[0] = 0; +// std::vector u_challenge = this->random_evaluation_point(log_N); +// Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); +// Fr w_evaluation = multilinear_g.evaluate_mle(u_challenge, /* shift = */ true); + +// auto rho = Fr::random_element(); + +// // compute batched polynomial and evaluation +// auto f_batched = multilinear_f; +// auto g_batched = multilinear_g; +// g_batched *= rho; +// auto v_batched = v_evaluation + rho * w_evaluation; + +// // Define some mock q_k with deg(q_k) = 2^k - 1 +// auto q_0 = this->random_polynomial(1 << 0); +// auto q_1 = this->random_polynomial(1 << 1); +// auto q_2 = this->random_polynomial(1 << 2); +// std::vector quotients = { q_0, q_1, q_2 }; + +// auto x_challenge = Fr::random_element(); + +// // Construct Z_x using the prover method +// auto Z_x = ZeroMorphProver::compute_partially_evaluated_zeromorph_identity_polynomial( +// f_batched, g_batched, quotients, v_batched, u_challenge, x_challenge); + +// // Compute Z_x directly +// auto Z_x_expected = g_batched; +// Z_x_expected.add_scaled(f_batched, x_challenge); +// Z_x_expected[0] -= v_batched * x_challenge * this->Phi(x_challenge, log_N); +// for (size_t k = 0; k < log_N; ++k) { +// auto x_pow_2k = x_challenge.pow(1 << k); // x^{2^k} +// auto x_pow_2kp1 = x_challenge.pow(1 << (k + 1)); // x^{2^{k+1}} +// // x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k}) +// auto scalar = x_pow_2k * this->Phi(x_pow_2kp1, log_N - k - 1) - u_challenge[k] * this->Phi(x_pow_2k, log_N - +// k); scalar *= x_challenge; scalar *= Fr(-1); Z_x_expected.add_scaled(quotients[k], scalar); +// } + +// EXPECT_EQ(Z_x, Z_x_expected); +// } + +// /** +// * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation +// * +// */ +// TYPED_TEST(ZeroMorphTest, ProveAndVerifySingle) +// { +// size_t num_unshifted = 1; +// size_t num_shifted = 0; +// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); +// EXPECT_TRUE(verified); +// } + +// /** +// * @brief Test full Prover/Verifier protocol for proving batched multilinear evaluation with shifts +// * +// */ +// TYPED_TEST(ZeroMorphTest, ProveAndVerifyBatchedWithShifts) +// { +// size_t num_unshifted = 3; +// size_t num_shifted = 2; +// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); +// EXPECT_TRUE(verified); +// } + +// /** +// * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation +// * +// */ +// TYPED_TEST(ZeroMorphWithConcatenationTest, ProveAndVerify) +// { +// size_t num_unshifted = 1; +// size_t num_shifted = 0; +// size_t num_concatenated = 3; +// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted, num_concatenated); +// EXPECT_TRUE(verified); +// } +// } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.test.cpp index 8be139c096a..2d2c1fe93bf 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.test.cpp @@ -76,7 +76,6 @@ template class ECCVMRecursiveTests : public ::testing { InnerBuilder builder = generate_circuit(&engine); InnerProver prover(builder); - info(builder.get_num_gates()); auto proof = prover.construct_proof(); auto verification_key = std::make_shared(prover.key); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp index abb38ea241a..140c521bc3d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp @@ -40,7 +40,8 @@ std::array UltraRecursiveVerifier_::ve { using Sumcheck = ::bb::SumcheckVerifier; using PCS = typename Flavor::PCS; - using ZeroMorph = ::bb::ZeroMorphVerifier_; + using Curve = typename Flavor::Curve; + using ZeroMorph = ::bb::ZeroMorphVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; using CommitmentLabels = typename Flavor::CommitmentLabels; using RelationParams = ::bb::RelationParameters; @@ -139,13 +140,16 @@ std::array UltraRecursiveVerifier_::ve auto [multivariate_challenge, claimed_evaluations, sumcheck_verified] = sumcheck.verify(relation_parameters, alpha, gate_challenges); // Execute ZeroMorph multilinear PCS evaluation verifier - auto verifier_accumulator = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - transcript); - return verifier_accumulator; + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(builder), + transcript); + auto pairing_points = PCS::reduce_verify(opening_claim, transcript); + + return pairing_points; } template class UltraRecursiveVerifier_>; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp index 5cd7326d445..f210ac804c3 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp @@ -244,7 +244,6 @@ class UltraFlavor { auto get_sigmas() { return RefArray{ sigma_1, sigma_2, sigma_3, sigma_4 }; }; auto get_ids() { return RefArray{ id_1, id_2, id_3, id_4 }; }; auto get_tables() { return RefArray{ table_1, table_2, table_3, table_4 }; }; - // Gemini-specific getters. auto get_unshifted() { return RefArray{ q_m, q_c, q_l, q_r, q_o, q_4, q_arith, q_delta_range, diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp index d4797caaccf..cfae12f3a5c 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_verifier.cpp @@ -113,9 +113,9 @@ bool TranslatorVerifier::verify_proof(const HonkProof& proof) // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description ofthe // unrolled protocol. - auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted_without_concatenated(), commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), + claimed_evaluations.get_unshifted_without_concatenated(), claimed_evaluations.get_shifted(), multivariate_challenge, Commitment::one(), diff --git a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp index 11c582c6004..1f9026fcb66 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp @@ -113,9 +113,9 @@ std::array TranslatorRecursiveVerifier_ Date: Tue, 18 Jun 2024 11:58:32 +0000 Subject: [PATCH 03/15] try to share more code paths in zm test files --- .../zeromorph/zeromorph.hpp | 49 - .../zeromorph/zeromorph.test.cpp | 1147 ++++++++--------- 2 files changed, 568 insertions(+), 628 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index ef11612613b..cfdb5934bbe 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -429,9 +429,6 @@ template class ZeroMorphProver_ { auto pi_polynomial = compute_batched_evaluation_and_degree_check_polynomial(zeta_x, Z_x, z_challenge); return { pi_polynomial, { .challenge = x_challenge, .evaluation = FF(0) } }; - // // Compute opening proof for x_challenge using the underlying univariate CS:CS - // PCS::compute_opening_proof( - // commitment_key, { .challenge = x_challenge, .evaluation = FF(0) }, pi_polynomial, transcript); } }; @@ -735,14 +732,6 @@ template class ZeroMorphVerifier_ { const std::vector>& concatenation_group_commitments = {}, RefSpan concatenated_evaluations = {}) { - // Commitment first_g1; - - // if constexpr (Curve::is_stdlib_type) { - // auto builder = multivariate_challenge[0].get_context(); - // first_g1 = Commitment::one(builder); - // } else { - // first_g1 = Commitment::one(); - // } return compute_univariate_evaluation_opening_claim(unshifted_commitments, to_be_shifted_commitments, unshifted_evaluations, @@ -752,45 +741,7 @@ template class ZeroMorphVerifier_ { transcript, concatenation_group_commitments, concatenated_evaluations); - // return PCS::reduce_verify(opening_claim, transcript); } - - /** - * @brief Verify a set of multilinear evaluation claims for unshifted polynomials f_i and to-be-shifted - * polynomials g_i. - * - * @details Identical purpose as the function above but used when the verification of the PCS evaluation protocol - * requires the verification key prior to the last step that is accumulated. - * - * @param commitments Commitments to polynomials f_i and g_i (unshifted and to-be-shifted) - * @param claimed_evaluations Claimed evaluations v_i = f_i(u) and w_i = h_i(u) = g_i_shifted(u) - * @param multivariate_challenge Challenge point u - * @param transcript - * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated - */ - // static VerifierAccumulator verify(RefSpan unshifted_commitments, - // RefSpan to_be_shifted_commitments, - // RefSpan unshifted_evaluations, - // RefSpan shifted_evaluations, - // std::span multivariate_challenge, - // const std::shared_ptr>& vk, - // auto& transcript, - // const std::vector>& concatenation_group_commitments = {}, - // RefSpan concatenated_evaluations = {}) - // { - // Commitment first_g1 = vk->get_first_g1(); - - // auto opening_claim = compute_univariate_evaluation_opening_claim(unshifted_commitments, - // to_be_shifted_commitments, - // unshifted_evaluations, - // shifted_evaluations, - // multivariate_challenge, - // first_g1, - // transcript, - // concatenation_group_commitments, - // concatenated_evaluations); - // return PCS::reduce_verify(vk, opening_claim, transcript); - // } }; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index d4fbf7674fe..dccf3bc1a41 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -1,579 +1,568 @@ -// #include "zeromorph.hpp" -// #include "../commitment_key.test.hpp" -// #include "barretenberg/commitment_schemes/ipa/ipa.hpp" -// #include "barretenberg/commitment_schemes/kzg/kzg.hpp" -// #include "barretenberg/transcript/transcript.hpp" - -// #include - -// namespace bb { - -// template class ZeroMorphTest : public CommitmentTest { -// public: -// using Curve = typename PCS::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; -// using Commitment = typename Curve::AffineElement; -// using GroupElement = typename Curve::Element; -// using VerifierAccumulator = typename PCS::VerifierAccumulator; -// using ZeroMorphProver = ZeroMorphProver_; -// using ZeroMorphVerifier = ZeroMorphVerifier_; - -// // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula -// Fr Phi(Fr challenge, size_t subscript) -// { -// size_t length = 1 << subscript; -// auto result = Fr(0); -// for (size_t idx = 0; idx < length; ++idx) { -// result += challenge.pow(idx); -// } -// return result; -// } - -// /** -// * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts -// * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials -// f_i -// * and l polynomials h_i. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" -// * polynomials), which are a subset of the f_i. This is what is encountered in practice. We accomplish this using -// * evaluations of h_i but commitments to only their unshifted counterparts g_i (which we get for "free" since -// * commitments [g_i] are contained in the set of commitments [f_i]). -// * -// */ -// bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED) -// { -// size_t N = 2; -// size_t log_N = numeric::get_msb(N); - -// std::vector u_challenge = this->random_evaluation_point(log_N); - -// // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) -// std::vector f_polynomials; // unshifted polynomials -// std::vector v_evaluations; -// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { -// f_polynomials.emplace_back(this->random_polynomial(N)); -// f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" -// v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); -// } - -// // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i -// std::vector g_polynomials; // to-be-shifted polynomials -// std::vector h_polynomials; // shifts of the to-be-shifted polynomials -// std::vector w_evaluations; -// for (size_t i = 0; i < NUM_SHIFTED; ++i) { -// g_polynomials.emplace_back(f_polynomials[i]); -// h_polynomials.emplace_back(g_polynomials[i].shifted()); -// w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); -// // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); -// } - -// // Compute commitments [f_i] -// std::vector f_commitments; -// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { -// f_commitments.emplace_back(this->commit(f_polynomials[i])); -// } - -// // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) -// std::vector g_commitments; -// for (size_t i = 0; i < NUM_SHIFTED; ++i) { -// g_commitments.emplace_back(f_commitments[i]); -// } - -// // Initialize an empty NativeTranscript -// auto prover_transcript = NativeTranscript::prover_init_empty(); - -// // Execute Prover protocol -// ZeroMorphProver::prove(RefVector(f_polynomials), -// RefVector(g_polynomials), -// RefVector(v_evaluations), -// RefVector(w_evaluations), -// u_challenge, -// this->commitment_key, -// prover_transcript); - -// auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); - -// VerifierAccumulator result; -// bool verified = false; -// if constexpr (std::same_as>) { -// // Execute Verifier protocol without the need for vk prior the final check -// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted -// RefVector(g_commitments), // to-be-shifted -// RefVector(v_evaluations), // unshifted -// RefVector(w_evaluations), // shifted -// u_challenge, -// verifier_transcript); -// verified = this->vk()->pairing_check(result[0], result[1]); -// } else { -// // Execute Verifier protocol with vk -// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted -// RefVector(g_commitments), // to-be-shifted -// RefVector(v_evaluations), // unshifted -// RefVector(w_evaluations), // shifted -// u_challenge, -// this->vk(), -// verifier_transcript); -// verified = result; -// } - -// // The prover and verifier manifests should agree -// EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); - -// return verified; -// } -// }; - -// template class ZeroMorphWithConcatenationTest : public CommitmentTest { -// public: -// using Curve = typename PCS::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; -// using Commitment = typename Curve::AffineElement; -// using GroupElement = typename Curve::Element; -// using VerifierAccumulator = typename PCS::VerifierAccumulator; -// using ZeroMorphProver = ZeroMorphProver_; -// using ZeroMorphVerifier = ZeroMorphVerifier_; - -// // Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula -// Fr Phi(Fr challenge, size_t subscript) -// { -// size_t length = 1 << subscript; -// auto result = Fr(0); -// for (size_t idx = 0; idx < length; ++idx) { -// result += challenge.pow(idx); -// } -// return result; -// } - -// /** -// * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts and concatenation -// * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials -// f_i, -// * l polynomials h_i and o groups of polynomials where each polynomial is concatenated from several shorter -// * polynomials. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" polynomials), which -// * are a subset of the f_i. This is what is encountered in practice. We accomplish this using evaluations of h_i -// but -// * commitments to only their unshifted counterparts g_i (which we get for "free" since commitments [g_i] are -// * contained in the set of commitments [f_i]). -// * -// */ -// bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, size_t NUM_SHIFTED, size_t NUM_CONCATENATED) -// { -// bool verified = false; -// size_t concatenation_index = 2; -// size_t N = 64; -// size_t MINI_CIRCUIT_N = N / concatenation_index; -// size_t log_N = numeric::get_msb(N); - -// auto u_challenge = this->random_evaluation_point(log_N); - -// // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) -// std::vector f_polynomials; // unshifted polynomials -// std::vector v_evaluations; -// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { -// f_polynomials.emplace_back(this->random_polynomial(N)); -// f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" -// v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); -// } - -// // Construct some "shifted" multilinear polynomials h_i as the left-shift-by-1 of f_i -// std::vector g_polynomials; // to-be-shifted polynomials -// std::vector h_polynomials; // shifts of the to-be-shifted polynomials -// std::vector w_evaluations; -// for (size_t i = 0; i < NUM_SHIFTED; ++i) { -// g_polynomials.emplace_back(f_polynomials[i]); -// h_polynomials.emplace_back(g_polynomials[i].shifted()); -// w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); -// // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); -// } - -// // Polynomials "chunks" that are concatenated in the PCS -// std::vector> concatenation_groups; - -// // Concatenated polynomials -// std::vector concatenated_polynomials; - -// // Evaluations of concatenated polynomials -// std::vector c_evaluations; - -// // For each polynomial to be concatenated -// for (size_t i = 0; i < NUM_CONCATENATED; ++i) { -// std::vector concatenation_group; -// Polynomial concatenated_polynomial(N); -// // For each chunk -// for (size_t j = 0; j < concatenation_index; j++) { -// Polynomial chunk_polynomial(N); -// // Fill the chunk polynomial with random values and appropriately fill the space in -// // concatenated_polynomial -// for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { -// // Chunks should be shiftable -// auto tmp = Fr(0); -// if (k > 0) { -// tmp = Fr::random_element(this->engine); -// } -// chunk_polynomial[k] = tmp; -// concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; -// } -// concatenation_group.emplace_back(chunk_polynomial); -// } -// // Store chunks -// concatenation_groups.emplace_back(concatenation_group); -// // Store concatenated polynomial -// concatenated_polynomials.emplace_back(concatenated_polynomial); -// // Get evaluation -// c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); -// } - -// // Compute commitments [f_i] -// std::vector f_commitments; -// for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { -// f_commitments.emplace_back(this->commit(f_polynomials[i])); -// } - -// // Construct container of commitments of the "to-be-shifted" polynomials [g_i] (= [f_i]) -// std::vector g_commitments; -// for (size_t i = 0; i < NUM_SHIFTED; ++i) { -// g_commitments.emplace_back(f_commitments[i]); -// } - -// // Compute commitments of all polynomial chunks -// std::vector> concatenation_groups_commitments; -// for (size_t i = 0; i < NUM_CONCATENATED; ++i) { -// std::vector concatenation_group_commitment; -// for (size_t j = 0; j < concatenation_index; j++) { -// concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); -// } -// concatenation_groups_commitments.emplace_back(concatenation_group_commitment); -// } - -// // Initialize an empty NativeTranscript -// auto prover_transcript = NativeTranscript::prover_init_empty(); - -// // Execute Prover protocol -// ZeroMorphProver::prove(RefVector(f_polynomials), // unshifted -// RefVector(g_polynomials), // to-be-shifted -// RefVector(v_evaluations), // unshifted -// RefVector(w_evaluations), // shifted -// u_challenge, -// this->commitment_key, -// prover_transcript, -// RefVector(concatenated_polynomials), -// RefVector(c_evaluations), -// to_vector_of_ref_vectors(concatenation_groups)); - -// auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); -// VerifierAccumulator result; -// if constexpr (std::same_as>) { -// // Execute Verifier protocol without the need for vk prior the final check -// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted -// RefVector(g_commitments), // to-be-shifted -// RefVector(v_evaluations), // unshifted -// RefVector(w_evaluations), // shifted -// u_challenge, -// verifier_transcript, -// to_vector_of_ref_vectors(concatenation_groups_commitments), -// RefVector(c_evaluations)); -// verified = this->vk()->pairing_check(result[0], result[1]); - -// } else { -// // Execute Verifier protocol with vk -// result = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted -// RefVector(g_commitments), // to-be-shifted -// RefVector(v_evaluations), // unshifted -// RefVector(w_evaluations), // shifted -// u_challenge, -// this->vk(), -// verifier_transcript, -// to_vector_of_ref_vectors(concatenation_groups_commitments), -// RefVector(c_evaluations)); -// verified = result; -// } - -// // The prover and verifier manifests should agree -// EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); -// return verified; -// } -// }; - -// using PCSTypes = ::testing::Types, IPA>; -// TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); -// TYPED_TEST_SUITE(ZeroMorphWithConcatenationTest, PCSTypes); - -// /** -// * @brief Test method for computing q_k given multilinear f -// * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such -// that -// * the following identity holds: -// * -// * f(X_0, ..., X_{d-1}) - v = \sum_{k=0}^{d-1} (X_k - u_k)q_k(X_0, ..., X_{k-1}) -// * -// */ -// TYPED_TEST(ZeroMorphTest, QuotientConstruction) -// { -// // Define some useful type aliases -// using ZeroMorphProver = ZeroMorphProver_; -// using Curve = typename TypeParam::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; - -// // Define size parameters -// size_t N = 16; -// size_t log_N = numeric::get_msb(N); - -// // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. -// Polynomial multilinear_f = this->random_polynomial(N); -// std::vector u_challenge = this->random_evaluation_point(log_N); -// Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); - -// // Compute the multilinear quotients q_k = q_k(X_0, ..., X_{k-1}) -// std::vector quotients = ZeroMorphProver::compute_multilinear_quotients(multilinear_f, u_challenge); - -// // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear -// challenge -// // z, i.e. f(z) - v - \sum_{k=0}^{d-1} (z_k - u_k)q_k(z) = 0 -// std::vector z_challenge = this->random_evaluation_point(log_N); - -// Fr result = multilinear_f.evaluate_mle(z_challenge); -// result -= v_evaluation; -// for (size_t k = 0; k < log_N; ++k) { -// auto q_k_eval = Fr(0); -// if (k == 0) { -// // q_0 = a_0 is a constant polynomial so it's evaluation is simply its constant coefficient -// q_k_eval = quotients[k][0]; -// } else { -// // Construct (u_0, ..., u_{k-1}) -// auto subrange_size = static_cast(k); -// std::vector z_partial(z_challenge.begin(), z_challenge.begin() + subrange_size); -// q_k_eval = quotients[k].evaluate_mle(z_partial); -// } -// // result = result - (z_k - u_k) * q_k(u_0, ..., u_{k-1}) -// result -= (z_challenge[k] - u_challenge[k]) * q_k_eval; -// } - -// EXPECT_EQ(result, 0); -// } - -// /** -// * @brief Test function for constructing batched lifted degree quotient \hat{q} -// * -// */ -// TYPED_TEST(ZeroMorphTest, BatchedLiftedDegreeQuotient) -// { -// // Define some useful type aliases -// using ZeroMorphProver = ZeroMorphProver_; -// using Curve = typename TypeParam::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; - -// const size_t N = 8; - -// // Define some mock q_k with deg(q_k) = 2^k - 1 -// std::vector data_0 = { 1 }; -// std::vector data_1 = { 2, 3 }; -// std::vector data_2 = { 4, 5, 6, 7 }; -// Polynomial q_0(data_0); -// Polynomial q_1(data_1); -// Polynomial q_2(data_2); -// std::vector quotients = { q_0, q_1, q_2 }; - -// auto y_challenge = Fr::random_element(); - -// // Compute batched quotient \hat{q} using the prover method -// auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); - -// // Now explicitly define q_k_lifted = X^{N-2^k} * q_k and compute the expected batched result -// std::array data_0_lifted = { 0, 0, 0, 0, 0, 0, 0, 1 }; -// std::array data_1_lifted = { 0, 0, 0, 0, 0, 0, 2, 3 }; -// std::array data_2_lifted = { 0, 0, 0, 0, 4, 5, 6, 7 }; -// Polynomial q_0_lifted(data_0_lifted); -// Polynomial q_1_lifted(data_1_lifted); -// Polynomial q_2_lifted(data_2_lifted); - -// // Explicitly compute \hat{q} -// auto batched_quotient_expected = Polynomial(N); -// batched_quotient_expected += q_0_lifted; -// batched_quotient_expected.add_scaled(q_1_lifted, y_challenge); -// batched_quotient_expected.add_scaled(q_2_lifted, y_challenge * y_challenge); - -// EXPECT_EQ(batched_quotient, batched_quotient_expected); -// } - -// /** -// * @brief Test function for constructing partially evaluated quotient \zeta_x -// * -// */ -// TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZeta) -// { -// // Define some useful type aliases -// using ZeroMorphProver = ZeroMorphProver_; -// using Curve = typename TypeParam::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; - -// const size_t N = 8; - -// // Define some mock q_k with deg(q_k) = 2^k - 1 -// std::vector data_0 = { 1 }; -// std::vector data_1 = { 2, 3 }; -// std::vector data_2 = { 4, 5, 6, 7 }; -// Polynomial q_0(data_0); -// Polynomial q_1(data_1); -// Polynomial q_2(data_2); -// std::vector quotients = { q_0, q_1, q_2 }; - -// auto y_challenge = Fr::random_element(); - -// auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); - -// auto x_challenge = Fr::random_element(); - -// // Contruct zeta_x using the prover method -// auto zeta_x = ZeroMorphProver::compute_partially_evaluated_degree_check_polynomial( -// batched_quotient, quotients, y_challenge, x_challenge); - -// // Now construct zeta_x explicitly -// auto zeta_x_expected = Polynomial(N); -// zeta_x_expected += batched_quotient; -// // q_batched - \sum_k q_k * y^k * x^{N - deg(q_k) - 1} -// zeta_x_expected.add_scaled(q_0, -x_challenge.pow(N - 0 - 1)); -// zeta_x_expected.add_scaled(q_1, -y_challenge * x_challenge.pow(N - 1 - 1)); -// zeta_x_expected.add_scaled(q_2, -y_challenge * y_challenge * x_challenge.pow(N - 3 - 1)); - -// EXPECT_EQ(zeta_x, zeta_x_expected); -// } - -// /** -// * @brief Demonstrate formulas for efficiently computing \Phi_k(x) = \sum_{i=0}^{k-1}x^i -// * @details \Phi_k(x) = \sum_{i=0}^{k-1}x^i = (x^{2^k} - 1) / (x - 1) -// * -// */ -// TYPED_TEST(ZeroMorphTest, PhiEvaluation) -// { -// using Curve = typename TypeParam::Curve; -// using Fr = typename Curve::ScalarField; -// const size_t N = 8; -// size_t n = numeric::get_msb(N); - -// // \Phi_n(x) -// { -// auto x_challenge = Fr::random_element(); - -// auto efficient = (x_challenge.pow(1 << n) - 1) / (x_challenge - 1); - -// auto expected = this->Phi(x_challenge, n); - -// EXPECT_EQ(efficient, expected); -// } - -// // \Phi_{n-k-1}(x^{2^{k + 1}}) = (x^{2^n} - 1) / (x^{2^{k + 1}} - 1) -// { -// auto x_challenge = Fr::random_element(); - -// size_t k = 2; - -// // x^{2^{k+1}} -// auto x_pow = x_challenge.pow(1 << (k + 1)); - -// auto efficient = x_challenge.pow(1 << n) - 1; // x^N - 1 -// efficient = efficient / (x_pow - 1); // (x^N - 1) / (x^{2^{k + 1}} - 1) - -// auto expected = this->Phi(x_pow, n - k - 1); -// EXPECT_EQ(efficient, expected); -// } -// } - -// /** -// * @brief Test function for constructing partially evaluated quotient Z_x -// * -// */ -// TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZ) -// { -// // Define some useful type aliases -// using ZeroMorphProver = ZeroMorphProver_; -// using Curve = typename TypeParam::Curve; -// using Fr = typename Curve::ScalarField; -// using Polynomial = bb::Polynomial; - -// const size_t N = 8; -// size_t log_N = numeric::get_msb(N); - -// // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. -// Polynomial multilinear_f = this->random_polynomial(N); -// Polynomial multilinear_g = this->random_polynomial(N); -// multilinear_g[0] = 0; -// std::vector u_challenge = this->random_evaluation_point(log_N); -// Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); -// Fr w_evaluation = multilinear_g.evaluate_mle(u_challenge, /* shift = */ true); - -// auto rho = Fr::random_element(); - -// // compute batched polynomial and evaluation -// auto f_batched = multilinear_f; -// auto g_batched = multilinear_g; -// g_batched *= rho; -// auto v_batched = v_evaluation + rho * w_evaluation; - -// // Define some mock q_k with deg(q_k) = 2^k - 1 -// auto q_0 = this->random_polynomial(1 << 0); -// auto q_1 = this->random_polynomial(1 << 1); -// auto q_2 = this->random_polynomial(1 << 2); -// std::vector quotients = { q_0, q_1, q_2 }; - -// auto x_challenge = Fr::random_element(); - -// // Construct Z_x using the prover method -// auto Z_x = ZeroMorphProver::compute_partially_evaluated_zeromorph_identity_polynomial( -// f_batched, g_batched, quotients, v_batched, u_challenge, x_challenge); - -// // Compute Z_x directly -// auto Z_x_expected = g_batched; -// Z_x_expected.add_scaled(f_batched, x_challenge); -// Z_x_expected[0] -= v_batched * x_challenge * this->Phi(x_challenge, log_N); -// for (size_t k = 0; k < log_N; ++k) { -// auto x_pow_2k = x_challenge.pow(1 << k); // x^{2^k} -// auto x_pow_2kp1 = x_challenge.pow(1 << (k + 1)); // x^{2^{k+1}} -// // x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k}) -// auto scalar = x_pow_2k * this->Phi(x_pow_2kp1, log_N - k - 1) - u_challenge[k] * this->Phi(x_pow_2k, log_N - -// k); scalar *= x_challenge; scalar *= Fr(-1); Z_x_expected.add_scaled(quotients[k], scalar); -// } - -// EXPECT_EQ(Z_x, Z_x_expected); -// } - -// /** -// * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation -// * -// */ -// TYPED_TEST(ZeroMorphTest, ProveAndVerifySingle) -// { -// size_t num_unshifted = 1; -// size_t num_shifted = 0; -// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); -// EXPECT_TRUE(verified); -// } - -// /** -// * @brief Test full Prover/Verifier protocol for proving batched multilinear evaluation with shifts -// * -// */ -// TYPED_TEST(ZeroMorphTest, ProveAndVerifyBatchedWithShifts) -// { -// size_t num_unshifted = 3; -// size_t num_shifted = 2; -// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); -// EXPECT_TRUE(verified); -// } - -// /** -// * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation -// * -// */ -// TYPED_TEST(ZeroMorphWithConcatenationTest, ProveAndVerify) -// { -// size_t num_unshifted = 1; -// size_t num_shifted = 0; -// size_t num_concatenated = 3; -// auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted, num_concatenated); -// EXPECT_TRUE(verified); -// } -// } // namespace bb +#include "zeromorph.hpp" +#include "../commitment_key.test.hpp" +#include "barretenberg/commitment_schemes/ipa/ipa.hpp" +#include "barretenberg/commitment_schemes/kzg/kzg.hpp" +#include "barretenberg/transcript/transcript.hpp" + +#include + +namespace bb { + +template class ZeroMorphTest : public CommitmentTest { + public: + using Curve = typename PCS::Curve; + using Fr = typename Curve::ScalarField; + using Polynomial = bb::Polynomial; + using Commitment = typename Curve::AffineElement; + using GroupElement = typename Curve::Element; + using VerifierAccumulator = typename PCS::VerifierAccumulator; + using ZeroMorphProver = ZeroMorphProver_; + using ZeroMorphVerifier = ZeroMorphVerifier_; + using TupleOfPolynomialsEvaluationsCommitments = + std::tuple, std::vector, std::vector>; + + using TupleOfConcatenationInputs = std::tuple>, + std::vector, + std::vector, + std::vector>>; + + /** + * @brief Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula + * + */ + Fr Phi(Fr challenge, size_t subscript) + { + size_t length = 1 << subscript; + auto result = Fr(0); + for (size_t idx = 0; idx < length; ++idx) { + result += challenge.pow(idx); + } + return result; + } + + TupleOfPolynomialsEvaluationsCommitments polynomials_and_evaluations(std::vector u_challenge, + size_t NUM_UNSHIFTED) + { + // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) + std::vector f_polynomials; // unshifted polynomials + std::vector v_evaluations; + std::vector f_commitments; + size_t poly_length = 1 << u_challenge.size(); + info(poly_length); + for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { + f_polynomials.emplace_back(this->random_polynomial(poly_length)); + f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" + v_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge)); + f_commitments.emplace_back(this->commit(f_polynomials[i])); + } + return { f_polynomials, v_evaluations, f_commitments }; + } + + TupleOfPolynomialsEvaluationsCommitments to_be_shifted_polynomials_and_shifted_evaluations( + std::vector original_polynomials, + std::vector u_challenge, + std::vector original_commitments, + size_t NUM_SHIFTED) + { + std::vector g_polynomials; // to-be-shifted polynomials + std::vector h_polynomials; // shifts of the to-be-shifted polynomials + std::vector w_evaluations; + std::vector g_commitments; + // For testing purposes, pick the first NUM_SHIFTED polynomials + for (size_t i = 0; i < NUM_SHIFTED; ++i) { + g_polynomials.emplace_back(original_polynomials[i]); + h_polynomials.emplace_back(g_polynomials[i].shifted()); + w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); + g_commitments.emplace_back(original_commitments[i]); + // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); + } + return { g_polynomials, w_evaluations, g_commitments }; + } + + bool prove_and_verify(TupleOfPolynomialsEvaluationsCommitments unshifted, + TupleOfPolynomialsEvaluationsCommitments shifted, + std::vector u_challenge) + { + auto [f_polynomials, v_evaluations, f_commitments] = unshifted; + auto [g_polynomials, w_evaluations, g_commitments] = shifted; + auto prover_transcript = NativeTranscript::prover_init_empty(); + + // Execute Prover protocol + auto prover_opening_claim = ZeroMorphProver::prove(RefVector(f_polynomials), + RefVector(g_polynomials), + RefVector(v_evaluations), + RefVector(w_evaluations), + u_challenge, + this->commitment_key, + prover_transcript); + + PCS::compute_opening_proof(this->commitment_key, + prover_opening_claim.opening_pair, + prover_opening_claim.polynomial, + prover_transcript); + + auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); + + auto verifier_opening_claim = ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted + RefVector(g_commitments), // to-be-shifted + RefVector(v_evaluations), // unshifted + RefVector(w_evaluations), // shifted + u_challenge, + this->vk()->get_first_g1(), + verifier_transcript); + VerifierAccumulator result; + + bool verified = false; + if constexpr (std::same_as>) { + + result = PCS::reduce_verify(verifier_opening_claim, verifier_transcript); + verified = this->vk()->pairing_check(result[0], result[1]); + } else { + // Execute Verifier protocol with vk + result = PCS::reduce_verify(this->vk(), verifier_opening_claim, verifier_transcript); + + verified = result; + } + + // The prover and verifier manifests should agree + EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); + return verified; + }; + + bool prove_and_verify_with_concatenation(TupleOfPolynomialsEvaluationsCommitments unshifted, + TupleOfPolynomialsEvaluationsCommitments shifted, + std::vector u_challenge, + size_t NUM_CONCATENATED) + { + auto [f_polynomials, v_evaluations, f_commitments] = unshifted; + auto [g_polynomials, w_evaluations, g_commitments] = shifted; + auto [concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments] = + get_concatenation_inputs(u_challenge, NUM_CONCATENATED); + + auto prover_transcript = NativeTranscript::prover_init_empty(); + + // Execute Prover protocol + auto prover_opening_claim = ZeroMorphProver::prove(RefVector(f_polynomials), // unshifted + RefVector(g_polynomials), // to-be-shifted + RefVector(v_evaluations), // unshifted + RefVector(w_evaluations), // shifted + u_challenge, + this->commitment_key, + prover_transcript, + RefVector(concatenated_polynomials), + RefVector(c_evaluations), + to_vector_of_ref_vectors(concatenation_groups)); + PCS::compute_opening_proof(this->commitment_key, + prover_opening_claim.opening_pair, + prover_opening_claim.polynomial, + prover_transcript); + + auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); + + auto verifier_opening_claim = + ZeroMorphVerifier::verify(RefVector(f_commitments), // unshifted + RefVector(g_commitments), // to-be-shifted + RefVector(v_evaluations), // unshifted + RefVector(w_evaluations), // shifted + u_challenge, + this->vk()->get_first_g1(), + verifier_transcript, + to_vector_of_ref_vectors(concatenation_groups_commitments), + RefVector(c_evaluations)); + VerifierAccumulator result; + + bool verified = false; + if constexpr (std::same_as>) { + + result = PCS::reduce_verify(verifier_opening_claim, verifier_transcript); + verified = this->vk()->pairing_check(result[0], result[1]); + } else { + // Execute Verifier protocol with vk + result = PCS::reduce_verify(this->vk(), verifier_opening_claim, verifier_transcript); + + verified = result; + } + + // The prover and verifier manifests should agree + EXPECT_EQ(prover_transcript->get_manifest(), verifier_transcript->get_manifest()); + return verified; + }; + + TupleOfConcatenationInputs get_concatenation_inputs(std::vector u_challenge, size_t NUM_CONCATENATED) + { + + size_t concatenation_index = 2; + size_t N = 1 << u_challenge.size(); + size_t MINI_CIRCUIT_N = N / concatenation_index; + + // Polynomials "chunks" that are concatenated in the PCS + std::vector> concatenation_groups; + + // Concatenated polynomials + std::vector concatenated_polynomials; + + // Evaluations of concatenated polynomials + std::vector c_evaluations; + + // For each polynomial to be concatenated + for (size_t i = 0; i < NUM_CONCATENATED; ++i) { + std::vector concatenation_group; + Polynomial concatenated_polynomial(N); + // For each chunk + for (size_t j = 0; j < concatenation_index; j++) { + Polynomial chunk_polynomial(N); + // Fill the chunk polynomial with random values and appropriately fill the space in + // concatenated_polynomial + for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { + // Chunks should be shiftable + auto tmp = Fr(0); + if (k > 0) { + tmp = Fr::random_element(this->engine); + } + chunk_polynomial[k] = tmp; + concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; + } + concatenation_group.emplace_back(chunk_polynomial); + } + // Store chunks + concatenation_groups.emplace_back(concatenation_group); + // Store concatenated polynomial + concatenated_polynomials.emplace_back(concatenated_polynomial); + // Get evaluation + c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); + } + + // Compute commitments of all polynomial chunks + std::vector> concatenation_groups_commitments; + for (size_t i = 0; i < NUM_CONCATENATED; ++i) { + std::vector concatenation_group_commitment; + for (size_t j = 0; j < concatenation_index; j++) { + concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); + } + concatenation_groups_commitments.emplace_back(concatenation_group_commitment); + } + + return { concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments }; + }; + + /** + * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts + * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials + f_i + * and l polynomials h_i. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" + * polynomials), which are a subset of the f_i. This is what is encountered in practice. We accomplish this + using + * evaluations of h_i but commitments to only their unshifted counterparts g_i (which we get for "free" since + * commitments [g_i] are contained in the set of commitments [f_i]). + * + */ + bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, + size_t NUM_SHIFTED, + [[maybe_unused]] size_t NUM_CONCATENATED = 0) + { + size_t N = 2; + size_t log_N = numeric::get_msb(N); + + std::vector u_challenge = this->random_evaluation_point(log_N); + + // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) + auto unshifted_tuple = polynomials_and_evaluations(u_challenge, NUM_UNSHIFTED); + + auto shifted_tuple = to_be_shifted_polynomials_and_shifted_evaluations( + std::get<0>(unshifted_tuple), u_challenge, std::get<2>(unshifted_tuple), NUM_SHIFTED); + + bool verified = false; + if (NUM_CONCATENATED == 0) { + verified = prove_and_verify(unshifted_tuple, shifted_tuple, u_challenge); + } else { + verified = + prove_and_verify_with_concatenation(unshifted_tuple, shifted_tuple, u_challenge, NUM_CONCATENATED); + } + + return verified; + }; +}; + +using PCSTypes = ::testing::Types, IPA>; +TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); + +/** + * @brief Test method for computing q_k given multilinear f + * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such + that + * the following identity holds: + * + * f(X_0, ..., X_{d-1}) - v = \sum_{k=0}^{d-1} (X_k - u_k)q_k(X_0, ..., X_{k-1}) + * + */ +TYPED_TEST(ZeroMorphTest, QuotientConstruction) +{ + // Define some useful type aliases + using Curve = typename TypeParam::Curve; + using ZeroMorphProver = ZeroMorphProver_; + using Fr = typename Curve::ScalarField; + using Polynomial = bb::Polynomial; + + // Define size parameters + size_t N = 16; + size_t log_N = numeric::get_msb(N); + + // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. + Polynomial multilinear_f = this->random_polynomial(N); + std::vector u_challenge = this->random_evaluation_point(log_N); + Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); + + // Compute the multilinear quotients q_k = q_k(X_0, ..., X_{k-1}) + std::vector quotients = ZeroMorphProver::compute_multilinear_quotients(multilinear_f, u_challenge); + + // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear + // challenge + // z, i.e. f(z) - v - \sum_{k=0}^{d-1} (z_k - u_k)q_k(z) = 0 + std::vector z_challenge = this->random_evaluation_point(log_N); + + Fr result = multilinear_f.evaluate_mle(z_challenge); + result -= v_evaluation; + for (size_t k = 0; k < log_N; ++k) { + auto q_k_eval = Fr(0); + if (k == 0) { + // q_0 = a_0 is a constant polynomial so it's evaluation is simply its constant coefficient + q_k_eval = quotients[k][0]; + } else { + // Construct (u_0, ..., u_{k-1}) + auto subrange_size = static_cast(k); + std::vector z_partial(z_challenge.begin(), z_challenge.begin() + subrange_size); + q_k_eval = quotients[k].evaluate_mle(z_partial); + } + // result = result - (z_k - u_k) * q_k(u_0, ..., u_{k-1}) + result -= (z_challenge[k] - u_challenge[k]) * q_k_eval; + } + + EXPECT_EQ(result, 0); +} + +/** + * @brief Test function for constructing batched lifted degree quotient \hat{q} + * + */ +TYPED_TEST(ZeroMorphTest, BatchedLiftedDegreeQuotient) +{ + // Define some useful type aliases + using Curve = typename TypeParam::Curve; + using ZeroMorphProver = ZeroMorphProver_; + using Fr = typename Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t N = 8; + + // Define some mock q_k with deg(q_k) = 2^k - 1 + std::vector data_0 = { 1 }; + std::vector data_1 = { 2, 3 }; + std::vector data_2 = { 4, 5, 6, 7 }; + Polynomial q_0(data_0); + Polynomial q_1(data_1); + Polynomial q_2(data_2); + std::vector quotients = { q_0, q_1, q_2 }; + + auto y_challenge = Fr::random_element(); + + // Compute batched quotient \hat{q} using the prover method + auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); + + // Now explicitly define q_k_lifted = X^{N-2^k} * q_k and compute the expected batched result + std::array data_0_lifted = { 0, 0, 0, 0, 0, 0, 0, 1 }; + std::array data_1_lifted = { 0, 0, 0, 0, 0, 0, 2, 3 }; + std::array data_2_lifted = { 0, 0, 0, 0, 4, 5, 6, 7 }; + Polynomial q_0_lifted(data_0_lifted); + Polynomial q_1_lifted(data_1_lifted); + Polynomial q_2_lifted(data_2_lifted); + + // Explicitly compute \hat{q} + auto batched_quotient_expected = Polynomial(N); + batched_quotient_expected += q_0_lifted; + batched_quotient_expected.add_scaled(q_1_lifted, y_challenge); + batched_quotient_expected.add_scaled(q_2_lifted, y_challenge * y_challenge); + + EXPECT_EQ(batched_quotient, batched_quotient_expected); +} + +/** + * @brief Test function for constructing partially evaluated quotient \zeta_x + * + */ +TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZeta) +{ + // Define some useful type aliases + using Curve = typename TypeParam::Curve; + using ZeroMorphProver = ZeroMorphProver_; + using Fr = typename Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t N = 8; + + // Define some mock q_k with deg(q_k) = 2^k - 1 + std::vector data_0 = { 1 }; + std::vector data_1 = { 2, 3 }; + std::vector data_2 = { 4, 5, 6, 7 }; + Polynomial q_0(data_0); + Polynomial q_1(data_1); + Polynomial q_2(data_2); + std::vector quotients = { q_0, q_1, q_2 }; + + auto y_challenge = Fr::random_element(); + + auto batched_quotient = ZeroMorphProver::compute_batched_lifted_degree_quotient(quotients, y_challenge, N); + + auto x_challenge = Fr::random_element(); + + // Contruct zeta_x using the prover method + auto zeta_x = ZeroMorphProver::compute_partially_evaluated_degree_check_polynomial( + batched_quotient, quotients, y_challenge, x_challenge); + + // Now construct zeta_x explicitly + auto zeta_x_expected = Polynomial(N); + zeta_x_expected += batched_quotient; + // q_batched - \sum_k q_k * y^k * x^{N - deg(q_k) - 1} + zeta_x_expected.add_scaled(q_0, -x_challenge.pow(N - 0 - 1)); + zeta_x_expected.add_scaled(q_1, -y_challenge * x_challenge.pow(N - 1 - 1)); + zeta_x_expected.add_scaled(q_2, -y_challenge * y_challenge * x_challenge.pow(N - 3 - 1)); + + EXPECT_EQ(zeta_x, zeta_x_expected); +} + +/** + * @brief Demonstrate formulas for efficiently computing \Phi_k(x) = \sum_{i=0}^{k-1}x^i + * @details \Phi_k(x) = \sum_{i=0}^{k-1}x^i = (x^{2^k} - 1) / (x - 1) + * + */ +TYPED_TEST(ZeroMorphTest, PhiEvaluation) +{ + using Curve = typename TypeParam::Curve; + using Fr = typename Curve::ScalarField; + const size_t N = 8; + size_t n = numeric::get_msb(N); + + // \Phi_n(x) + { + auto x_challenge = Fr::random_element(); + + auto efficient = (x_challenge.pow(1 << n) - 1) / (x_challenge - 1); + + auto expected = this->Phi(x_challenge, n); + + EXPECT_EQ(efficient, expected); + } + + // \Phi_{n-k-1}(x^{2^{k + 1}}) = (x^{2^n} - 1) / (x^{2^{k + 1}} - 1) + { + auto x_challenge = Fr::random_element(); + + size_t k = 2; + + // x^{2^{k+1}} + auto x_pow = x_challenge.pow(1 << (k + 1)); + + auto efficient = x_challenge.pow(1 << n) - 1; // x^N - 1 + efficient = efficient / (x_pow - 1); // (x^N - 1) / (x^{2^{k + 1}} - 1) + + auto expected = this->Phi(x_pow, n - k - 1); + EXPECT_EQ(efficient, expected); + } +} + +/** + * @brief Test function for constructing partially evaluated quotient Z_x + * + */ +TYPED_TEST(ZeroMorphTest, PartiallyEvaluatedQuotientZ) +{ + // Define some useful type aliases + using Curve = typename TypeParam::Curve; + using ZeroMorphProver = ZeroMorphProver_; + using Fr = typename Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t N = 8; + size_t log_N = numeric::get_msb(N); + + // Construct a random multilinear polynomial f, and (u,v) such that f(u) = v. + Polynomial multilinear_f = this->random_polynomial(N); + Polynomial multilinear_g = this->random_polynomial(N); + multilinear_g[0] = 0; + std::vector u_challenge = this->random_evaluation_point(log_N); + Fr v_evaluation = multilinear_f.evaluate_mle(u_challenge); + Fr w_evaluation = multilinear_g.evaluate_mle(u_challenge, /* shift = */ true); + + auto rho = Fr::random_element(); + + // compute batched polynomial and evaluation + auto f_batched = multilinear_f; + auto g_batched = multilinear_g; + g_batched *= rho; + auto v_batched = v_evaluation + rho * w_evaluation; + + // Define some mock q_k with deg(q_k) = 2^k - 1 + auto q_0 = this->random_polynomial(1 << 0); + auto q_1 = this->random_polynomial(1 << 1); + auto q_2 = this->random_polynomial(1 << 2); + std::vector quotients = { q_0, q_1, q_2 }; + + auto x_challenge = Fr::random_element(); + + // Construct Z_x using the prover method + auto Z_x = ZeroMorphProver::compute_partially_evaluated_zeromorph_identity_polynomial( + f_batched, g_batched, quotients, v_batched, u_challenge, x_challenge); + + // Compute Z_x directly + auto Z_x_expected = g_batched; + Z_x_expected.add_scaled(f_batched, x_challenge); + Z_x_expected[0] -= v_batched * x_challenge * this->Phi(x_challenge, log_N); + for (size_t k = 0; k < log_N; ++k) { + auto x_pow_2k = x_challenge.pow(1 << k); // x^{2^k} + auto x_pow_2kp1 = x_challenge.pow(1 << (k + 1)); // x^{2^{k+1}} + // x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k}) + auto scalar = x_pow_2k * this->Phi(x_pow_2kp1, log_N - k - 1) - u_challenge[k] * this->Phi(x_pow_2k, log_N - k); + scalar *= x_challenge; + scalar *= Fr(-1); + Z_x_expected.add_scaled(quotients[k], scalar); + } + + EXPECT_EQ(Z_x, Z_x_expected); +} + +/** + * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation + * + */ +TYPED_TEST(ZeroMorphTest, ProveAndVerifySingle) +{ + size_t num_unshifted = 1; + size_t num_shifted = 0; + auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); + EXPECT_TRUE(verified); +} + +/** + * @brief Test full Prover/Verifier protocol for proving batched multilinear evaluation with shifts + * + */ +TYPED_TEST(ZeroMorphTest, ProveAndVerifyBatchedWithShifts) +{ + size_t num_unshifted = 3; + size_t num_shifted = 2; + auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted); + EXPECT_TRUE(verified); +} + +/** + * @brief Test full Prover/Verifier protocol for proving single multilinear evaluation + * + */ +TYPED_TEST(ZeroMorphTest, ProveAndVerifyWithConcatenation) +{ + size_t num_unshifted = 1; + size_t num_shifted = 0; + size_t num_concatenated = 3; + auto verified = this->execute_zeromorph_protocol(num_unshifted, num_shifted, num_concatenated); + EXPECT_TRUE(verified); +} +} // namespace bb From 77f6d94e77067fcb7c713dff24b7b8d8553f3016 Mon Sep 17 00:00:00 2001 From: maramihali Date: Tue, 18 Jun 2024 12:08:02 +0000 Subject: [PATCH 04/15] cleanup --- .../zeromorph/zeromorph.test.cpp | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index dccf3bc1a41..4e0a3804005 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -40,8 +40,8 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, - size_t NUM_UNSHIFTED) + TupleOfPolynomialsEvaluationsCommitments polynomials_comms_and_evaluations(std::vector u_challenge, + size_t NUM_UNSHIFTED) { // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) std::vector f_polynomials; // unshifted polynomials @@ -58,23 +58,23 @@ template class ZeroMorphTest : public CommitmentTest original_polynomials, - std::vector u_challenge, - std::vector original_commitments, - size_t NUM_SHIFTED) + TupleOfPolynomialsEvaluationsCommitments to_be_shifted_polynomials_and_comms_and_shifted_evaluations( + TupleOfPolynomialsEvaluationsCommitments unshifted_input, std::vector u_challenge, size_t NUM_SHIFTED) { + std::vector f_polynomials = std::get<0>(unshifted_input); + std::vector f_commitments = std::get<2>(unshifted_input); + std::vector g_polynomials; // to-be-shifted polynomials std::vector h_polynomials; // shifts of the to-be-shifted polynomials - std::vector w_evaluations; + std::vector w_evaluations; // shifted evaluations std::vector g_commitments; - // For testing purposes, pick the first NUM_SHIFTED polynomials + + // For testing purposes, pick the first NUM_SHIFTED polynomials to be shifted for (size_t i = 0; i < NUM_SHIFTED; ++i) { - g_polynomials.emplace_back(original_polynomials[i]); + g_polynomials.emplace_back(f_polynomials[i]); h_polynomials.emplace_back(g_polynomials[i].shifted()); w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); - g_commitments.emplace_back(original_commitments[i]); - // ASSERT_EQ(w_evaluations[i], g_polynomials[i].evaluate_mle(u_challenge, /* shift = */ true)); + g_commitments.emplace_back(f_commitments[i]); } return { g_polynomials, w_evaluations, g_commitments }; } @@ -129,15 +129,15 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_CONCATENATED) { - auto [f_polynomials, v_evaluations, f_commitments] = unshifted; - auto [g_polynomials, w_evaluations, g_commitments] = shifted; + auto [f_polynomials, v_evaluations, f_commitments] = unshifted_input; + auto [g_polynomials, w_evaluations, g_commitments] = shifted_input; auto [concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments] = - get_concatenation_inputs(u_challenge, NUM_CONCATENATED); + concatenation_inputs(u_challenge, NUM_CONCATENATED); auto prover_transcript = NativeTranscript::prover_init_empty(); @@ -188,7 +188,7 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_CONCATENATED) + TupleOfConcatenationInputs concatenation_inputs(std::vector u_challenge, size_t NUM_CONCATENATED) { size_t concatenation_index = 2; @@ -265,11 +265,12 @@ template class ZeroMorphTest : public CommitmentTest u_challenge = this->random_evaluation_point(log_N); - // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) - auto unshifted_tuple = polynomials_and_evaluations(u_challenge, NUM_UNSHIFTED); + // Construct some random multilinear polynomials f_i, their commitments and their evaluations v_i = f_i(u) + auto unshifted_tuple = polynomials__comms_and_evaluations(u_challenge, NUM_UNSHIFTED); - auto shifted_tuple = to_be_shifted_polynomials_and_shifted_evaluations( - std::get<0>(unshifted_tuple), u_challenge, std::get<2>(unshifted_tuple), NUM_SHIFTED); + // Construct polynomials and commitments from f_i that are to be shifted and compute their shifted evaluations + auto shifted_tuple = + to_be_shifted_polynomials_and_comms_and_shifted_evaluations(unshifted_tuple, u_challenge, NUM_SHIFTED); bool verified = false; if (NUM_CONCATENATED == 0) { From 437fb3fa1447aad8f4e33d9f56d37886f2f9e4da Mon Sep 17 00:00:00 2001 From: maramihali Date: Wed, 19 Jun 2024 09:53:44 +0000 Subject: [PATCH 05/15] more cleaning --- .../zeromorph/zeromorph.hpp | 36 +- .../zeromorph/zeromorph.test.cpp | 210 ++-- .../src/barretenberg/eccvm/eccvm_prover.cpp | 3 +- .../eccvm_recursive_verifier.cpp | 1 - .../verifier/ultra_recursive_verifier.cpp | 15 +- .../translator_vm/translator_prover.cpp | 3 +- .../translator_recursive_verifier.cpp | 4 +- .../ultra_honk/decider_prover.cpp | 5 +- .../ultra_honk/ultra_verifier.cpp | 2 +- .../vm/generated/avm_verifier.cpp | 944 ++++++++---------- 10 files changed, 567 insertions(+), 656 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index cfdb5934bbe..b7b427fac2b 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -31,12 +31,13 @@ template inline std::vector powers_of_challenge(const FF challeng /** * @brief Prover for ZeroMorph multilinear PCS * - * @tparam PCS - The univariate PCS used inside ZeroMorph as a building block + * @tparam Curve - The curve used for arithmetising ZeroMorph */ template class ZeroMorphProver_ { using FF = typename Curve::ScalarField; using Commitment = typename Curve::AffineElement; using Polynomial = bb::Polynomial; + using OpeningClaim = ProverOpeningClaim; // TODO(#742): Set this N_max to be the number of G1 elements in the mocked zeromorph SRS once it's in place. // (Then, eventually, set it based on the real SRS). For now we set it to be larger then the Client IVC recursive @@ -309,8 +310,8 @@ template class ZeroMorphProver_ { } /** - * @brief Prove a set of multilinear evaluation claims for unshifted polynomials f_i and to-be-shifted - * polynomials g_i + * @brief Returns a univariate opening claim about a set of multilinear evaluation claims for unshifted polynomials + * f_i and to-be-shifted polynomials g_i to be subsequently proved with a univariate PCS * * @param f_polynomials Unshifted polynomials * @param g_polynomials To-be-shifted polynomials (of which the shifts h_i were evaluated by sumcheck) @@ -319,16 +320,16 @@ template class ZeroMorphProver_ { * @param commitment_key * @param transcript */ - static ProverOpeningClaim prove(RefSpan f_polynomials, - RefSpan g_polynomials, - RefSpan f_evaluations, - RefSpan g_shift_evaluations, - std::span multilinear_challenge, - const std::shared_ptr>& commitment_key, - const std::shared_ptr& transcript, - RefSpan concatenated_polynomials = {}, - RefSpan concatenated_evaluations = {}, - const std::vector>& concatenation_groups = {}) + static OpeningClaim prove(RefSpan f_polynomials, + RefSpan g_polynomials, + RefSpan f_evaluations, + RefSpan g_shift_evaluations, + std::span multilinear_challenge, + const std::shared_ptr>& commitment_key, + const std::shared_ptr& transcript, + RefSpan concatenated_polynomials = {}, + RefSpan concatenated_evaluations = {}, + const std::vector>& concatenation_groups = {}) { // Generate batching challenge \rho and powers 1,...,\rho^{m-1} const FF rho = transcript->template get_challenge("rho"); @@ -428,6 +429,7 @@ template class ZeroMorphProver_ { // Compute batched degree-check and ZM-identity quotient polynomial pi auto pi_polynomial = compute_batched_evaluation_and_degree_check_polynomial(zeta_x, Z_x, z_challenge); + // Returns the claim used to generate an opening proof for the univariate polynomial at x_challenge return { pi_polynomial, { .challenge = x_challenge, .evaluation = FF(0) } }; } }; @@ -435,7 +437,7 @@ template class ZeroMorphProver_ { /** * @brief Verifier for ZeroMorph multilinear PCS * - * @tparam Curve + * @tparam Curve - The Curve used to arithmetise ZeroMorph */ template class ZeroMorphVerifier_ { using FF = typename Curve::ScalarField; @@ -622,7 +624,7 @@ template class ZeroMorphVerifier_ { } /** - * @brief Compute the univariate opening claim used in the last step of Zeromorph to verify the univariate PCS + * @brief Compute the univariate opening claim used to verify the univariate PCS * evaluation. * * @param unshifted_commitments @@ -713,8 +715,8 @@ template class ZeroMorphVerifier_ { } /** - * @brief Verify a set of multilinear evaluation claims for unshifted polynomials f_i and to-be-shifted - * polynomials g_i + * @brief Return the univariate opening claim used to verify, in a subsequent PCS, a set of multilinear evaluation + * claims for unshifted polynomials f_i and to-be-shifted polynomials g_i * * @param commitments Commitments to polynomials f_i and g_i (unshifted and to-be-shifted) * @param claimed_evaluations Claimed evaluations v_i = f_i(u) and w_i = h_i(u) = g_i_shifted(u) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index 4e0a3804005..65722270e55 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -40,6 +40,45 @@ template class ZeroMorphTest : public CommitmentTest u_challenge = this->random_evaluation_point(log_N); + + // Construct some random multilinear polynomials f_i, their commitments and their evaluations v_i = f_i(u) + auto unshifted_tuple = polynomials_comms_and_evaluations(u_challenge, NUM_UNSHIFTED); + + // Construct polynomials and commitments from f_i that are to be shifted and compute their shifted evaluations + auto shifted_tuple = + to_be_shifted_polynomials_and_comms_and_shifted_evaluations(unshifted_tuple, u_challenge, NUM_SHIFTED); + + bool verified = false; + if (NUM_CONCATENATED == 0) { + verified = prove_and_verify(unshifted_tuple, shifted_tuple, u_challenge); + } else { + verified = + prove_and_verify_with_concatenation(unshifted_tuple, shifted_tuple, u_challenge, NUM_CONCATENATED); + } + + return verified; + } + + /** + * @brief Generate some random multilinear polynomials and compute their evaluation at the set challenge as well as + * their commitments, returned as a tuple to be used in the subsequent protocol. + */ TupleOfPolynomialsEvaluationsCommitments polynomials_comms_and_evaluations(std::vector u_challenge, size_t NUM_UNSHIFTED) { @@ -48,7 +87,6 @@ template class ZeroMorphTest : public CommitmentTest v_evaluations; std::vector f_commitments; size_t poly_length = 1 << u_challenge.size(); - info(poly_length); for (size_t i = 0; i < NUM_UNSHIFTED; ++i) { f_polynomials.emplace_back(this->random_polynomial(poly_length)); f_polynomials[i][0] = Fr(0); // ensure f is "shiftable" @@ -58,11 +96,15 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_SHIFTED) { std::vector f_polynomials = std::get<0>(unshifted_input); - std::vector f_commitments = std::get<2>(unshifted_input); + std::vector f_commitments = std::get<2>(unshifted_input); std::vector g_polynomials; // to-be-shifted polynomials std::vector h_polynomials; // shifts of the to-be-shifted polynomials @@ -79,6 +121,67 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_CONCATENATED) + { + + size_t concatenation_index = 2; + size_t N = 1 << u_challenge.size(); + size_t MINI_CIRCUIT_N = N / concatenation_index; + + // Polynomials "chunks" that are concatenated in the PCS + std::vector> concatenation_groups; + + // Concatenated polynomials + std::vector concatenated_polynomials; + + // Evaluations of concatenated polynomials + std::vector c_evaluations; + + // For each polynomial to be concatenated + for (size_t i = 0; i < NUM_CONCATENATED; ++i) { + std::vector concatenation_group; + Polynomial concatenated_polynomial(N); + // For each chunk + for (size_t j = 0; j < concatenation_index; j++) { + Polynomial chunk_polynomial(N); + // Fill the chunk polynomial with random values and appropriately fill the space in + // concatenated_polynomial + for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { + // Chunks should be shiftable + auto tmp = Fr(0); + if (k > 0) { + tmp = Fr::random_element(this->engine); + } + chunk_polynomial[k] = tmp; + concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; + } + concatenation_group.emplace_back(chunk_polynomial); + } + // Store chunks + concatenation_groups.emplace_back(concatenation_group); + // Store concatenated polynomial + concatenated_polynomials.emplace_back(concatenated_polynomial); + // Get evaluation + c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); + } + + // Compute commitments of all polynomial chunks + std::vector> concatenation_groups_commitments; + for (size_t i = 0; i < NUM_CONCATENATED; ++i) { + std::vector concatenation_group_commitment; + for (size_t j = 0; j < concatenation_index; j++) { + concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); + } + concatenation_groups_commitments.emplace_back(concatenation_group_commitment); + } + + return { concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments }; + }; + bool prove_and_verify(TupleOfPolynomialsEvaluationsCommitments unshifted, TupleOfPolynomialsEvaluationsCommitments shifted, std::vector u_challenge) @@ -186,102 +289,7 @@ template class ZeroMorphTest : public CommitmentTestget_manifest(), verifier_transcript->get_manifest()); return verified; - }; - - TupleOfConcatenationInputs concatenation_inputs(std::vector u_challenge, size_t NUM_CONCATENATED) - { - - size_t concatenation_index = 2; - size_t N = 1 << u_challenge.size(); - size_t MINI_CIRCUIT_N = N / concatenation_index; - - // Polynomials "chunks" that are concatenated in the PCS - std::vector> concatenation_groups; - - // Concatenated polynomials - std::vector concatenated_polynomials; - - // Evaluations of concatenated polynomials - std::vector c_evaluations; - - // For each polynomial to be concatenated - for (size_t i = 0; i < NUM_CONCATENATED; ++i) { - std::vector concatenation_group; - Polynomial concatenated_polynomial(N); - // For each chunk - for (size_t j = 0; j < concatenation_index; j++) { - Polynomial chunk_polynomial(N); - // Fill the chunk polynomial with random values and appropriately fill the space in - // concatenated_polynomial - for (size_t k = 0; k < MINI_CIRCUIT_N; k++) { - // Chunks should be shiftable - auto tmp = Fr(0); - if (k > 0) { - tmp = Fr::random_element(this->engine); - } - chunk_polynomial[k] = tmp; - concatenated_polynomial[j * MINI_CIRCUIT_N + k] = tmp; - } - concatenation_group.emplace_back(chunk_polynomial); - } - // Store chunks - concatenation_groups.emplace_back(concatenation_group); - // Store concatenated polynomial - concatenated_polynomials.emplace_back(concatenated_polynomial); - // Get evaluation - c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge)); - } - - // Compute commitments of all polynomial chunks - std::vector> concatenation_groups_commitments; - for (size_t i = 0; i < NUM_CONCATENATED; ++i) { - std::vector concatenation_group_commitment; - for (size_t j = 0; j < concatenation_index; j++) { - concatenation_group_commitment.emplace_back(this->commit(concatenation_groups[i][j])); - } - concatenation_groups_commitments.emplace_back(concatenation_group_commitment); - } - - return { concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments }; - }; - - /** - * @brief Construct and verify ZeroMorph proof of batched multilinear evaluation with shifts - * @details The goal is to construct and verify a single batched multilinear evaluation proof for m polynomials - f_i - * and l polynomials h_i. It is assumed that the h_i are shifts of polynomials g_i (the "to-be-shifted" - * polynomials), which are a subset of the f_i. This is what is encountered in practice. We accomplish this - using - * evaluations of h_i but commitments to only their unshifted counterparts g_i (which we get for "free" since - * commitments [g_i] are contained in the set of commitments [f_i]). - * - */ - bool execute_zeromorph_protocol(size_t NUM_UNSHIFTED, - size_t NUM_SHIFTED, - [[maybe_unused]] size_t NUM_CONCATENATED = 0) - { - size_t N = 2; - size_t log_N = numeric::get_msb(N); - - std::vector u_challenge = this->random_evaluation_point(log_N); - - // Construct some random multilinear polynomials f_i, their commitments and their evaluations v_i = f_i(u) - auto unshifted_tuple = polynomials__comms_and_evaluations(u_challenge, NUM_UNSHIFTED); - - // Construct polynomials and commitments from f_i that are to be shifted and compute their shifted evaluations - auto shifted_tuple = - to_be_shifted_polynomials_and_comms_and_shifted_evaluations(unshifted_tuple, u_challenge, NUM_SHIFTED); - - bool verified = false; - if (NUM_CONCATENATED == 0) { - verified = prove_and_verify(unshifted_tuple, shifted_tuple, u_challenge); - } else { - verified = - prove_and_verify_with_concatenation(unshifted_tuple, shifted_tuple, u_challenge, NUM_CONCATENATED); - } - - return verified; - }; + } }; using PCSTypes = ::testing::Types, IPA>; @@ -289,8 +297,7 @@ TYPED_TEST_SUITE(ZeroMorphTest, PCSTypes); /** * @brief Test method for computing q_k given multilinear f - * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such - that + * @details Given f = f(X_0, ..., X_{d-1}), and (u,v) such that f(u) = v, compute q_k = q_k(X_0, ..., X_{k-1}) such that * the following identity holds: * * f(X_0, ..., X_{d-1}) - v = \sum_{k=0}^{d-1} (X_k - u_k)q_k(X_0, ..., X_{k-1}) @@ -316,8 +323,7 @@ TYPED_TEST(ZeroMorphTest, QuotientConstruction) // Compute the multilinear quotients q_k = q_k(X_0, ..., X_{k-1}) std::vector quotients = ZeroMorphProver::compute_multilinear_quotients(multilinear_f, u_challenge); - // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear - // challenge + // Show that the q_k were properly constructed by showing that the identity holds at a random multilinear challenge // z, i.e. f(z) - v - \sum_{k=0}^{d-1} (z_k - u_k)q_k(z) = 0 std::vector z_challenge = this->random_evaluation_point(log_N); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 122e4ecba00..b752a861a90 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -104,7 +104,8 @@ void ECCVMProver::execute_relation_check_rounds() } /** - * @brief Execute the ZeroMorph protocol to prove the multilinear evaluations produced by Sumcheck + * @brief Execute the ZeroMorph protocol to produce an opening claim for the multilinear evaluations produced by + * Sumcheck and then produce an opening proof with a univariate PCS * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index f206ef85d9c..d5542781aa6 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -72,7 +72,6 @@ template void ECCVMRecursiveVerifier_::verify_proof(co auto [multivariate_challenge, claimed_evaluations, sumcheck_verified] = sumcheck.verify(relation_parameters, alpha, gate_challenges); - // removed return bool auto multivariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), commitments.get_to_be_shifted(), claimed_evaluations.get_unshifted(), diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp index 140c521bc3d..60e2ecd9e36 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp @@ -53,14 +53,14 @@ std::array UltraRecursiveVerifier_::ve VerifierCommitments commitments{ key }; CommitmentLabels commitment_labels; - transcript->template receive_from_prover("circuit_size"); - transcript->template receive_from_prover("public_input_size"); - transcript->template receive_from_prover("pub_inputs_offset"); + const auto circuit_size = transcript->template receive_from_prover("circuit_size"); + const auto public_input_size = transcript->template receive_from_prover("public_input_size"); + const auto pub_inputs_offset = transcript->template receive_from_prover("pub_inputs_offset"); // For debugging purposes only - // ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); - // ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); - // ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); + ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); + ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); + ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); std::vector public_inputs; for (size_t i = 0; i < key->num_public_inputs; ++i) { @@ -139,7 +139,8 @@ std::array UltraRecursiveVerifier_::ve } auto [multivariate_challenge, claimed_evaluations, sumcheck_verified] = sumcheck.verify(relation_parameters, alpha, gate_challenges); - // Execute ZeroMorph multilinear PCS evaluation verifier + + // Execute ZeroMorph to produce an opening claim subsequently verified by a univariate PCS auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), commitments.get_to_be_shifted(), claimed_evaluations.get_unshifted(), diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp index 7c12da82b6a..7b3e8f7b74d 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp @@ -163,7 +163,8 @@ void TranslatorProver::execute_relation_check_rounds() } /** - * @brief Execute the ZeroMorph protocol to prove the multilinear evaluations produced by Sumcheck + * @brief Execute the ZeroMorph protocol to produce an opening claim for the multilinear evaluations produced by + * Sumcheck and then produce an opening proof with a univariate PCS * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ diff --git a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp index 1f9026fcb66..bf171d2c4a1 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm_recursion/translator_recursive_verifier.cpp @@ -110,8 +110,8 @@ std::array TranslatorRecursiveVerifier_ void DeciderProver_::execute_relation_ch } /** - * @brief Execute the ZeroMorph protocol to prove the multilinear evaluations produced by Sumcheck + * @brief Execute the ZeroMorph protocol to produce an opening claim for the multilinear evaluations produced by + * Sumcheck and then produce an opening proof with a univariate PCS. * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. * * */ @@ -62,8 +63,8 @@ template HonkProof DeciderProver_::construct_proo { BB_OP_COUNT_TIME_NAME("Decider::construct_proof"); - execute_relation_check_rounds(); // Run sumcheck subprotocol. + execute_relation_check_rounds(); // Fiat-Shamir: rho, y, x, z // Execute Zeromorph multilinear PCS diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp index d87b32081c8..ac6a6201218 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_verifier.cpp @@ -73,7 +73,7 @@ template bool UltraVerifier_::verify_proof(const HonkP return false; } - // Execute ZeroMorph rounds and check the pcs verifier accumulator returned. See + // Execute ZeroMorph rounds to produce an opening claim and verify it with a univariate PCS. See // https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), commitments.get_to_be_shifted(), diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp index 37a8aacd35b..0f459049f34 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_verifier.cpp @@ -52,8 +52,7 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, const std::vector; + // using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = Flavor::VerifierCommitments; using CommitmentLabels = Flavor::CommitmentLabels; @@ -71,518 +70,419 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, const std::vectortemplate receive_from_prover(commitment_labels.avm_alu_a_hi); - commitments.avm_alu_a_lo = transcript->template receive_from_prover(commitment_labels.avm_alu_a_lo); - commitments.avm_alu_alu_sel = - transcript->template receive_from_prover(commitment_labels.avm_alu_alu_sel); - commitments.avm_alu_b_hi = transcript->template receive_from_prover(commitment_labels.avm_alu_b_hi); - commitments.avm_alu_b_lo = transcript->template receive_from_prover(commitment_labels.avm_alu_b_lo); - commitments.avm_alu_borrow = transcript->template receive_from_prover(commitment_labels.avm_alu_borrow); - commitments.avm_alu_cf = transcript->template receive_from_prover(commitment_labels.avm_alu_cf); - commitments.avm_alu_clk = transcript->template receive_from_prover(commitment_labels.avm_alu_clk); - commitments.avm_alu_cmp_rng_ctr = - transcript->template receive_from_prover(commitment_labels.avm_alu_cmp_rng_ctr); - commitments.avm_alu_cmp_sel = - transcript->template receive_from_prover(commitment_labels.avm_alu_cmp_sel); - commitments.avm_alu_div_rng_chk_selector = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_rng_chk_selector); - commitments.avm_alu_div_u16_r0 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r0); - commitments.avm_alu_div_u16_r1 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r1); - commitments.avm_alu_div_u16_r2 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r2); - commitments.avm_alu_div_u16_r3 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r3); - commitments.avm_alu_div_u16_r4 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r4); - commitments.avm_alu_div_u16_r5 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r5); - commitments.avm_alu_div_u16_r6 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r6); - commitments.avm_alu_div_u16_r7 = - transcript->template receive_from_prover(commitment_labels.avm_alu_div_u16_r7); - commitments.avm_alu_divisor_hi = - transcript->template receive_from_prover(commitment_labels.avm_alu_divisor_hi); - commitments.avm_alu_divisor_lo = - transcript->template receive_from_prover(commitment_labels.avm_alu_divisor_lo); - commitments.avm_alu_ff_tag = transcript->template receive_from_prover(commitment_labels.avm_alu_ff_tag); - commitments.avm_alu_ia = transcript->template receive_from_prover(commitment_labels.avm_alu_ia); - commitments.avm_alu_ib = transcript->template receive_from_prover(commitment_labels.avm_alu_ib); - commitments.avm_alu_ic = transcript->template receive_from_prover(commitment_labels.avm_alu_ic); - commitments.avm_alu_in_tag = transcript->template receive_from_prover(commitment_labels.avm_alu_in_tag); - commitments.avm_alu_op_add = transcript->template receive_from_prover(commitment_labels.avm_alu_op_add); - commitments.avm_alu_op_cast = - transcript->template receive_from_prover(commitment_labels.avm_alu_op_cast); - commitments.avm_alu_op_cast_prev = - transcript->template receive_from_prover(commitment_labels.avm_alu_op_cast_prev); - commitments.avm_alu_op_div = transcript->template receive_from_prover(commitment_labels.avm_alu_op_div); - commitments.avm_alu_op_div_a_lt_b = - transcript->template receive_from_prover(commitment_labels.avm_alu_op_div_a_lt_b); - commitments.avm_alu_op_div_std = - transcript->template receive_from_prover(commitment_labels.avm_alu_op_div_std); - commitments.avm_alu_op_eq = transcript->template receive_from_prover(commitment_labels.avm_alu_op_eq); - commitments.avm_alu_op_eq_diff_inv = - transcript->template receive_from_prover(commitment_labels.avm_alu_op_eq_diff_inv); - commitments.avm_alu_op_lt = transcript->template receive_from_prover(commitment_labels.avm_alu_op_lt); - commitments.avm_alu_op_lte = transcript->template receive_from_prover(commitment_labels.avm_alu_op_lte); - commitments.avm_alu_op_mul = transcript->template receive_from_prover(commitment_labels.avm_alu_op_mul); - commitments.avm_alu_op_not = transcript->template receive_from_prover(commitment_labels.avm_alu_op_not); - commitments.avm_alu_op_shl = transcript->template receive_from_prover(commitment_labels.avm_alu_op_shl); - commitments.avm_alu_op_shr = transcript->template receive_from_prover(commitment_labels.avm_alu_op_shr); - commitments.avm_alu_op_sub = transcript->template receive_from_prover(commitment_labels.avm_alu_op_sub); - commitments.avm_alu_p_a_borrow = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_a_borrow); - commitments.avm_alu_p_b_borrow = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_b_borrow); - commitments.avm_alu_p_sub_a_hi = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_sub_a_hi); - commitments.avm_alu_p_sub_a_lo = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_sub_a_lo); - commitments.avm_alu_p_sub_b_hi = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_sub_b_hi); - commitments.avm_alu_p_sub_b_lo = - transcript->template receive_from_prover(commitment_labels.avm_alu_p_sub_b_lo); - commitments.avm_alu_partial_prod_hi = - transcript->template receive_from_prover(commitment_labels.avm_alu_partial_prod_hi); - commitments.avm_alu_partial_prod_lo = - transcript->template receive_from_prover(commitment_labels.avm_alu_partial_prod_lo); - commitments.avm_alu_quotient_hi = - transcript->template receive_from_prover(commitment_labels.avm_alu_quotient_hi); - commitments.avm_alu_quotient_lo = - transcript->template receive_from_prover(commitment_labels.avm_alu_quotient_lo); - commitments.avm_alu_remainder = - transcript->template receive_from_prover(commitment_labels.avm_alu_remainder); - commitments.avm_alu_res_hi = transcript->template receive_from_prover(commitment_labels.avm_alu_res_hi); - commitments.avm_alu_res_lo = transcript->template receive_from_prover(commitment_labels.avm_alu_res_lo); - commitments.avm_alu_rng_chk_lookup_selector = - transcript->template receive_from_prover(commitment_labels.avm_alu_rng_chk_lookup_selector); - commitments.avm_alu_rng_chk_sel = - transcript->template receive_from_prover(commitment_labels.avm_alu_rng_chk_sel); - commitments.avm_alu_shift_lt_bit_len = - transcript->template receive_from_prover(commitment_labels.avm_alu_shift_lt_bit_len); - commitments.avm_alu_shift_sel = - transcript->template receive_from_prover(commitment_labels.avm_alu_shift_sel); - commitments.avm_alu_t_sub_s_bits = - transcript->template receive_from_prover(commitment_labels.avm_alu_t_sub_s_bits); - commitments.avm_alu_two_pow_s = - transcript->template receive_from_prover(commitment_labels.avm_alu_two_pow_s); - commitments.avm_alu_two_pow_t_sub_s = - transcript->template receive_from_prover(commitment_labels.avm_alu_two_pow_t_sub_s); - commitments.avm_alu_u128_tag = - transcript->template receive_from_prover(commitment_labels.avm_alu_u128_tag); - commitments.avm_alu_u16_r0 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r0); - commitments.avm_alu_u16_r1 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r1); - commitments.avm_alu_u16_r10 = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r10); - commitments.avm_alu_u16_r11 = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r11); - commitments.avm_alu_u16_r12 = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r12); - commitments.avm_alu_u16_r13 = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r13); - commitments.avm_alu_u16_r14 = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r14); - commitments.avm_alu_u16_r2 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r2); - commitments.avm_alu_u16_r3 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r3); - commitments.avm_alu_u16_r4 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r4); - commitments.avm_alu_u16_r5 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r5); - commitments.avm_alu_u16_r6 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r6); - commitments.avm_alu_u16_r7 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r7); - commitments.avm_alu_u16_r8 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r8); - commitments.avm_alu_u16_r9 = transcript->template receive_from_prover(commitment_labels.avm_alu_u16_r9); - commitments.avm_alu_u16_tag = - transcript->template receive_from_prover(commitment_labels.avm_alu_u16_tag); - commitments.avm_alu_u32_tag = - transcript->template receive_from_prover(commitment_labels.avm_alu_u32_tag); - commitments.avm_alu_u64_tag = - transcript->template receive_from_prover(commitment_labels.avm_alu_u64_tag); - commitments.avm_alu_u8_r0 = transcript->template receive_from_prover(commitment_labels.avm_alu_u8_r0); - commitments.avm_alu_u8_r1 = transcript->template receive_from_prover(commitment_labels.avm_alu_u8_r1); - commitments.avm_alu_u8_tag = transcript->template receive_from_prover(commitment_labels.avm_alu_u8_tag); - commitments.avm_binary_acc_ia = - transcript->template receive_from_prover(commitment_labels.avm_binary_acc_ia); - commitments.avm_binary_acc_ib = - transcript->template receive_from_prover(commitment_labels.avm_binary_acc_ib); - commitments.avm_binary_acc_ic = - transcript->template receive_from_prover(commitment_labels.avm_binary_acc_ic); - commitments.avm_binary_bin_sel = - transcript->template receive_from_prover(commitment_labels.avm_binary_bin_sel); - commitments.avm_binary_clk = transcript->template receive_from_prover(commitment_labels.avm_binary_clk); - commitments.avm_binary_ia_bytes = - transcript->template receive_from_prover(commitment_labels.avm_binary_ia_bytes); - commitments.avm_binary_ib_bytes = - transcript->template receive_from_prover(commitment_labels.avm_binary_ib_bytes); - commitments.avm_binary_ic_bytes = - transcript->template receive_from_prover(commitment_labels.avm_binary_ic_bytes); - commitments.avm_binary_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_binary_in_tag); - commitments.avm_binary_mem_tag_ctr = - transcript->template receive_from_prover(commitment_labels.avm_binary_mem_tag_ctr); - commitments.avm_binary_mem_tag_ctr_inv = - transcript->template receive_from_prover(commitment_labels.avm_binary_mem_tag_ctr_inv); - commitments.avm_binary_op_id = - transcript->template receive_from_prover(commitment_labels.avm_binary_op_id); - commitments.avm_binary_start = - transcript->template receive_from_prover(commitment_labels.avm_binary_start); - commitments.avm_byte_lookup_bin_sel = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_bin_sel); - commitments.avm_byte_lookup_table_byte_lengths = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_byte_lengths); - commitments.avm_byte_lookup_table_in_tags = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_in_tags); - commitments.avm_byte_lookup_table_input_a = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_input_a); - commitments.avm_byte_lookup_table_input_b = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_input_b); - commitments.avm_byte_lookup_table_op_id = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_op_id); - commitments.avm_byte_lookup_table_output = - transcript->template receive_from_prover(commitment_labels.avm_byte_lookup_table_output); - commitments.avm_conversion_clk = - transcript->template receive_from_prover(commitment_labels.avm_conversion_clk); - commitments.avm_conversion_input = - transcript->template receive_from_prover(commitment_labels.avm_conversion_input); - commitments.avm_conversion_num_limbs = - transcript->template receive_from_prover(commitment_labels.avm_conversion_num_limbs); - commitments.avm_conversion_radix = - transcript->template receive_from_prover(commitment_labels.avm_conversion_radix); - commitments.avm_conversion_to_radix_le_sel = - transcript->template receive_from_prover(commitment_labels.avm_conversion_to_radix_le_sel); - commitments.avm_gas_da_gas_fixed_table = - transcript->template receive_from_prover(commitment_labels.avm_gas_da_gas_fixed_table); - commitments.avm_gas_gas_cost_sel = - transcript->template receive_from_prover(commitment_labels.avm_gas_gas_cost_sel); - commitments.avm_gas_l2_gas_fixed_table = - transcript->template receive_from_prover(commitment_labels.avm_gas_l2_gas_fixed_table); - commitments.avm_keccakf1600_clk = - transcript->template receive_from_prover(commitment_labels.avm_keccakf1600_clk); - commitments.avm_keccakf1600_input = - transcript->template receive_from_prover(commitment_labels.avm_keccakf1600_input); - commitments.avm_keccakf1600_keccakf1600_sel = - transcript->template receive_from_prover(commitment_labels.avm_keccakf1600_keccakf1600_sel); - commitments.avm_keccakf1600_output = - transcript->template receive_from_prover(commitment_labels.avm_keccakf1600_output); - commitments.avm_kernel_emit_l2_to_l1_msg_write_offset = transcript->template receive_from_prover( - commitment_labels.avm_kernel_emit_l2_to_l1_msg_write_offset); - commitments.avm_kernel_emit_note_hash_write_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_emit_note_hash_write_offset); - commitments.avm_kernel_emit_nullifier_write_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_emit_nullifier_write_offset); - commitments.avm_kernel_emit_unencrypted_log_write_offset = transcript->template receive_from_prover( - commitment_labels.avm_kernel_emit_unencrypted_log_write_offset); - commitments.avm_kernel_kernel_in_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_in_offset); - commitments.avm_kernel_kernel_inputs = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_inputs); - commitments.avm_kernel_kernel_metadata_out = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_metadata_out); - commitments.avm_kernel_kernel_out_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_out_offset); - commitments.avm_kernel_kernel_side_effect_out = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_side_effect_out); - commitments.avm_kernel_kernel_value_out = - transcript->template receive_from_prover(commitment_labels.avm_kernel_kernel_value_out); - commitments.avm_kernel_l1_to_l2_msg_exists_write_offset = transcript->template receive_from_prover( - commitment_labels.avm_kernel_l1_to_l2_msg_exists_write_offset); - commitments.avm_kernel_note_hash_exist_write_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_note_hash_exist_write_offset); - commitments.avm_kernel_nullifier_exists_write_offset = transcript->template receive_from_prover( - commitment_labels.avm_kernel_nullifier_exists_write_offset); - commitments.avm_kernel_nullifier_non_exists_write_offset = transcript->template receive_from_prover( - commitment_labels.avm_kernel_nullifier_non_exists_write_offset); - commitments.avm_kernel_q_public_input_kernel_add_to_table = transcript->template receive_from_prover( - commitment_labels.avm_kernel_q_public_input_kernel_add_to_table); - commitments.avm_kernel_q_public_input_kernel_out_add_to_table = - transcript->template receive_from_prover( - commitment_labels.avm_kernel_q_public_input_kernel_out_add_to_table); - commitments.avm_kernel_side_effect_counter = - transcript->template receive_from_prover(commitment_labels.avm_kernel_side_effect_counter); - commitments.avm_kernel_sload_write_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_sload_write_offset); - commitments.avm_kernel_sstore_write_offset = - transcript->template receive_from_prover(commitment_labels.avm_kernel_sstore_write_offset); - commitments.avm_main_abs_da_rem_gas_hi = - transcript->template receive_from_prover(commitment_labels.avm_main_abs_da_rem_gas_hi); - commitments.avm_main_abs_da_rem_gas_lo = - transcript->template receive_from_prover(commitment_labels.avm_main_abs_da_rem_gas_lo); - commitments.avm_main_abs_l2_rem_gas_hi = - transcript->template receive_from_prover(commitment_labels.avm_main_abs_l2_rem_gas_hi); - commitments.avm_main_abs_l2_rem_gas_lo = - transcript->template receive_from_prover(commitment_labels.avm_main_abs_l2_rem_gas_lo); - commitments.avm_main_alu_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_main_alu_in_tag); - commitments.avm_main_alu_sel = - transcript->template receive_from_prover(commitment_labels.avm_main_alu_sel); - commitments.avm_main_bin_op_id = - transcript->template receive_from_prover(commitment_labels.avm_main_bin_op_id); - commitments.avm_main_bin_sel = - transcript->template receive_from_prover(commitment_labels.avm_main_bin_sel); - commitments.avm_main_call_ptr = - transcript->template receive_from_prover(commitment_labels.avm_main_call_ptr); - commitments.avm_main_da_gas_op = - transcript->template receive_from_prover(commitment_labels.avm_main_da_gas_op); - commitments.avm_main_da_gas_remaining = - transcript->template receive_from_prover(commitment_labels.avm_main_da_gas_remaining); - commitments.avm_main_da_out_of_gas = - transcript->template receive_from_prover(commitment_labels.avm_main_da_out_of_gas); - commitments.avm_main_gas_cost_active = - transcript->template receive_from_prover(commitment_labels.avm_main_gas_cost_active); - commitments.avm_main_ia = transcript->template receive_from_prover(commitment_labels.avm_main_ia); - commitments.avm_main_ib = transcript->template receive_from_prover(commitment_labels.avm_main_ib); - commitments.avm_main_ic = transcript->template receive_from_prover(commitment_labels.avm_main_ic); - commitments.avm_main_id = transcript->template receive_from_prover(commitment_labels.avm_main_id); - commitments.avm_main_id_zero = - transcript->template receive_from_prover(commitment_labels.avm_main_id_zero); - commitments.avm_main_ind_a = transcript->template receive_from_prover(commitment_labels.avm_main_ind_a); - commitments.avm_main_ind_b = transcript->template receive_from_prover(commitment_labels.avm_main_ind_b); - commitments.avm_main_ind_c = transcript->template receive_from_prover(commitment_labels.avm_main_ind_c); - commitments.avm_main_ind_d = transcript->template receive_from_prover(commitment_labels.avm_main_ind_d); - commitments.avm_main_ind_op_a = - transcript->template receive_from_prover(commitment_labels.avm_main_ind_op_a); - commitments.avm_main_ind_op_b = - transcript->template receive_from_prover(commitment_labels.avm_main_ind_op_b); - commitments.avm_main_ind_op_c = - transcript->template receive_from_prover(commitment_labels.avm_main_ind_op_c); - commitments.avm_main_ind_op_d = - transcript->template receive_from_prover(commitment_labels.avm_main_ind_op_d); - commitments.avm_main_internal_return_ptr = - transcript->template receive_from_prover(commitment_labels.avm_main_internal_return_ptr); - commitments.avm_main_inv = transcript->template receive_from_prover(commitment_labels.avm_main_inv); - commitments.avm_main_l2_gas_op = - transcript->template receive_from_prover(commitment_labels.avm_main_l2_gas_op); - commitments.avm_main_l2_gas_remaining = - transcript->template receive_from_prover(commitment_labels.avm_main_l2_gas_remaining); - commitments.avm_main_l2_out_of_gas = - transcript->template receive_from_prover(commitment_labels.avm_main_l2_out_of_gas); - commitments.avm_main_last = transcript->template receive_from_prover(commitment_labels.avm_main_last); - commitments.avm_main_mem_idx_a = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_idx_a); - commitments.avm_main_mem_idx_b = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_idx_b); - commitments.avm_main_mem_idx_c = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_idx_c); - commitments.avm_main_mem_idx_d = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_idx_d); - commitments.avm_main_mem_op_a = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_op_a); - commitments.avm_main_mem_op_activate_gas = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_op_activate_gas); - commitments.avm_main_mem_op_b = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_op_b); - commitments.avm_main_mem_op_c = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_op_c); - commitments.avm_main_mem_op_d = - transcript->template receive_from_prover(commitment_labels.avm_main_mem_op_d); - commitments.avm_main_op_err = - transcript->template receive_from_prover(commitment_labels.avm_main_op_err); - commitments.avm_main_opcode_val = - transcript->template receive_from_prover(commitment_labels.avm_main_opcode_val); - commitments.avm_main_pc = transcript->template receive_from_prover(commitment_labels.avm_main_pc); - commitments.avm_main_q_kernel_lookup = - transcript->template receive_from_prover(commitment_labels.avm_main_q_kernel_lookup); - commitments.avm_main_q_kernel_output_lookup = - transcript->template receive_from_prover(commitment_labels.avm_main_q_kernel_output_lookup); - commitments.avm_main_r_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_main_r_in_tag); - commitments.avm_main_rwa = transcript->template receive_from_prover(commitment_labels.avm_main_rwa); - commitments.avm_main_rwb = transcript->template receive_from_prover(commitment_labels.avm_main_rwb); - commitments.avm_main_rwc = transcript->template receive_from_prover(commitment_labels.avm_main_rwc); - commitments.avm_main_rwd = transcript->template receive_from_prover(commitment_labels.avm_main_rwd); - commitments.avm_main_sel_cmov = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_cmov); - commitments.avm_main_sel_external_call = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_external_call); - commitments.avm_main_sel_halt = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_halt); - commitments.avm_main_sel_internal_call = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_internal_call); - commitments.avm_main_sel_internal_return = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_internal_return); - commitments.avm_main_sel_jump = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_jump); - commitments.avm_main_sel_jumpi = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_jumpi); - commitments.avm_main_sel_mov = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_mov); - commitments.avm_main_sel_mov_a = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_mov_a); - commitments.avm_main_sel_mov_b = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_mov_b); - commitments.avm_main_sel_op_add = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_add); - commitments.avm_main_sel_op_address = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_address); - commitments.avm_main_sel_op_and = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_and); - commitments.avm_main_sel_op_block_number = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_block_number); - commitments.avm_main_sel_op_cast = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_cast); - commitments.avm_main_sel_op_chain_id = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_chain_id); - commitments.avm_main_sel_op_coinbase = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_coinbase); - commitments.avm_main_sel_op_dagasleft = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_dagasleft); - commitments.avm_main_sel_op_div = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_div); - commitments.avm_main_sel_op_emit_l2_to_l1_msg = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_emit_l2_to_l1_msg); - commitments.avm_main_sel_op_emit_note_hash = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_emit_note_hash); - commitments.avm_main_sel_op_emit_nullifier = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_emit_nullifier); - commitments.avm_main_sel_op_emit_unencrypted_log = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_emit_unencrypted_log); - commitments.avm_main_sel_op_eq = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_eq); - commitments.avm_main_sel_op_fdiv = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_fdiv); - commitments.avm_main_sel_op_fee_per_da_gas = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_fee_per_da_gas); - commitments.avm_main_sel_op_fee_per_l2_gas = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_fee_per_l2_gas); - commitments.avm_main_sel_op_get_contract_instance = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_get_contract_instance); - commitments.avm_main_sel_op_keccak = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_keccak); - commitments.avm_main_sel_op_l1_to_l2_msg_exists = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_l1_to_l2_msg_exists); - commitments.avm_main_sel_op_l2gasleft = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_l2gasleft); - commitments.avm_main_sel_op_lt = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_lt); - commitments.avm_main_sel_op_lte = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_lte); - commitments.avm_main_sel_op_mul = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_mul); - commitments.avm_main_sel_op_not = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_not); - commitments.avm_main_sel_op_note_hash_exists = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_note_hash_exists); - commitments.avm_main_sel_op_nullifier_exists = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_nullifier_exists); - commitments.avm_main_sel_op_or = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_or); - commitments.avm_main_sel_op_pedersen = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_pedersen); - commitments.avm_main_sel_op_poseidon2 = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_poseidon2); - commitments.avm_main_sel_op_radix_le = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_radix_le); - commitments.avm_main_sel_op_sender = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_sender); - commitments.avm_main_sel_op_sha256 = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_sha256); - commitments.avm_main_sel_op_shl = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_shl); - commitments.avm_main_sel_op_shr = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_shr); - commitments.avm_main_sel_op_sload = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_sload); - commitments.avm_main_sel_op_sstore = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_sstore); - commitments.avm_main_sel_op_storage_address = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_storage_address); - commitments.avm_main_sel_op_sub = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_sub); - commitments.avm_main_sel_op_timestamp = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_timestamp); - commitments.avm_main_sel_op_transaction_fee = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_transaction_fee); - commitments.avm_main_sel_op_version = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_version); - commitments.avm_main_sel_op_xor = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_op_xor); - commitments.avm_main_sel_rng_16 = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_rng_16); - commitments.avm_main_sel_rng_8 = - transcript->template receive_from_prover(commitment_labels.avm_main_sel_rng_8); - commitments.avm_main_space_id = - transcript->template receive_from_prover(commitment_labels.avm_main_space_id); - commitments.avm_main_table_pow_2 = - transcript->template receive_from_prover(commitment_labels.avm_main_table_pow_2); - commitments.avm_main_tag_err = - transcript->template receive_from_prover(commitment_labels.avm_main_tag_err); - commitments.avm_main_w_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_main_w_in_tag); - commitments.avm_mem_addr = transcript->template receive_from_prover(commitment_labels.avm_mem_addr); - commitments.avm_mem_clk = transcript->template receive_from_prover(commitment_labels.avm_mem_clk); - commitments.avm_mem_diff_hi = - transcript->template receive_from_prover(commitment_labels.avm_mem_diff_hi); - commitments.avm_mem_diff_lo = - transcript->template receive_from_prover(commitment_labels.avm_mem_diff_lo); - commitments.avm_mem_diff_mid = - transcript->template receive_from_prover(commitment_labels.avm_mem_diff_mid); - commitments.avm_mem_glob_addr = - transcript->template receive_from_prover(commitment_labels.avm_mem_glob_addr); - commitments.avm_mem_ind_op_a = - transcript->template receive_from_prover(commitment_labels.avm_mem_ind_op_a); - commitments.avm_mem_ind_op_b = - transcript->template receive_from_prover(commitment_labels.avm_mem_ind_op_b); - commitments.avm_mem_ind_op_c = - transcript->template receive_from_prover(commitment_labels.avm_mem_ind_op_c); - commitments.avm_mem_ind_op_d = - transcript->template receive_from_prover(commitment_labels.avm_mem_ind_op_d); - commitments.avm_mem_last = transcript->template receive_from_prover(commitment_labels.avm_mem_last); - commitments.avm_mem_lastAccess = - transcript->template receive_from_prover(commitment_labels.avm_mem_lastAccess); - commitments.avm_mem_mem_sel = - transcript->template receive_from_prover(commitment_labels.avm_mem_mem_sel); - commitments.avm_mem_one_min_inv = - transcript->template receive_from_prover(commitment_labels.avm_mem_one_min_inv); - commitments.avm_mem_op_a = transcript->template receive_from_prover(commitment_labels.avm_mem_op_a); - commitments.avm_mem_op_b = transcript->template receive_from_prover(commitment_labels.avm_mem_op_b); - commitments.avm_mem_op_c = transcript->template receive_from_prover(commitment_labels.avm_mem_op_c); - commitments.avm_mem_op_d = transcript->template receive_from_prover(commitment_labels.avm_mem_op_d); - commitments.avm_mem_r_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_mem_r_in_tag); - commitments.avm_mem_rng_chk_sel = - transcript->template receive_from_prover(commitment_labels.avm_mem_rng_chk_sel); - commitments.avm_mem_rw = transcript->template receive_from_prover(commitment_labels.avm_mem_rw); - commitments.avm_mem_sel_cmov = - transcript->template receive_from_prover(commitment_labels.avm_mem_sel_cmov); - commitments.avm_mem_sel_mov_a = - transcript->template receive_from_prover(commitment_labels.avm_mem_sel_mov_a); - commitments.avm_mem_sel_mov_b = - transcript->template receive_from_prover(commitment_labels.avm_mem_sel_mov_b); - commitments.avm_mem_skip_check_tag = - transcript->template receive_from_prover(commitment_labels.avm_mem_skip_check_tag); - commitments.avm_mem_space_id = - transcript->template receive_from_prover(commitment_labels.avm_mem_space_id); - commitments.avm_mem_tag = transcript->template receive_from_prover(commitment_labels.avm_mem_tag); - commitments.avm_mem_tag_err = - transcript->template receive_from_prover(commitment_labels.avm_mem_tag_err); - commitments.avm_mem_tsp = transcript->template receive_from_prover(commitment_labels.avm_mem_tsp); - commitments.avm_mem_val = transcript->template receive_from_prover(commitment_labels.avm_mem_val); - commitments.avm_mem_w_in_tag = - transcript->template receive_from_prover(commitment_labels.avm_mem_w_in_tag); - commitments.avm_pedersen_clk = - transcript->template receive_from_prover(commitment_labels.avm_pedersen_clk); - commitments.avm_pedersen_input = - transcript->template receive_from_prover(commitment_labels.avm_pedersen_input); - commitments.avm_pedersen_output = - transcript->template receive_from_prover(commitment_labels.avm_pedersen_output); - commitments.avm_pedersen_pedersen_sel = - transcript->template receive_from_prover(commitment_labels.avm_pedersen_pedersen_sel); - commitments.avm_poseidon2_clk = - transcript->template receive_from_prover(commitment_labels.avm_poseidon2_clk); - commitments.avm_poseidon2_input = - transcript->template receive_from_prover(commitment_labels.avm_poseidon2_input); - commitments.avm_poseidon2_output = - transcript->template receive_from_prover(commitment_labels.avm_poseidon2_output); - commitments.avm_poseidon2_poseidon_perm_sel = - transcript->template receive_from_prover(commitment_labels.avm_poseidon2_poseidon_perm_sel); - commitments.avm_sha256_clk = transcript->template receive_from_prover(commitment_labels.avm_sha256_clk); - commitments.avm_sha256_input = - transcript->template receive_from_prover(commitment_labels.avm_sha256_input); - commitments.avm_sha256_output = - transcript->template receive_from_prover(commitment_labels.avm_sha256_output); - commitments.avm_sha256_sha256_compression_sel = - transcript->template receive_from_prover(commitment_labels.avm_sha256_sha256_compression_sel); - commitments.avm_sha256_state = - transcript->template receive_from_prover(commitment_labels.avm_sha256_state); + commitments.alu_a_hi = transcript->template receive_from_prover(commitment_labels.alu_a_hi); + commitments.alu_a_lo = transcript->template receive_from_prover(commitment_labels.alu_a_lo); + commitments.alu_alu_sel = transcript->template receive_from_prover(commitment_labels.alu_alu_sel); + commitments.alu_b_hi = transcript->template receive_from_prover(commitment_labels.alu_b_hi); + commitments.alu_b_lo = transcript->template receive_from_prover(commitment_labels.alu_b_lo); + commitments.alu_borrow = transcript->template receive_from_prover(commitment_labels.alu_borrow); + commitments.alu_cf = transcript->template receive_from_prover(commitment_labels.alu_cf); + commitments.alu_clk = transcript->template receive_from_prover(commitment_labels.alu_clk); + commitments.alu_cmp_rng_ctr = + transcript->template receive_from_prover(commitment_labels.alu_cmp_rng_ctr); + commitments.alu_cmp_sel = transcript->template receive_from_prover(commitment_labels.alu_cmp_sel); + commitments.alu_div_rng_chk_selector = + transcript->template receive_from_prover(commitment_labels.alu_div_rng_chk_selector); + commitments.alu_div_u16_r0 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r0); + commitments.alu_div_u16_r1 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r1); + commitments.alu_div_u16_r2 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r2); + commitments.alu_div_u16_r3 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r3); + commitments.alu_div_u16_r4 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r4); + commitments.alu_div_u16_r5 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r5); + commitments.alu_div_u16_r6 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r6); + commitments.alu_div_u16_r7 = transcript->template receive_from_prover(commitment_labels.alu_div_u16_r7); + commitments.alu_divisor_hi = transcript->template receive_from_prover(commitment_labels.alu_divisor_hi); + commitments.alu_divisor_lo = transcript->template receive_from_prover(commitment_labels.alu_divisor_lo); + commitments.alu_ff_tag = transcript->template receive_from_prover(commitment_labels.alu_ff_tag); + commitments.alu_ia = transcript->template receive_from_prover(commitment_labels.alu_ia); + commitments.alu_ib = transcript->template receive_from_prover(commitment_labels.alu_ib); + commitments.alu_ic = transcript->template receive_from_prover(commitment_labels.alu_ic); + commitments.alu_in_tag = transcript->template receive_from_prover(commitment_labels.alu_in_tag); + commitments.alu_op_add = transcript->template receive_from_prover(commitment_labels.alu_op_add); + commitments.alu_op_cast = transcript->template receive_from_prover(commitment_labels.alu_op_cast); + commitments.alu_op_cast_prev = + transcript->template receive_from_prover(commitment_labels.alu_op_cast_prev); + commitments.alu_op_div = transcript->template receive_from_prover(commitment_labels.alu_op_div); + commitments.alu_op_div_a_lt_b = + transcript->template receive_from_prover(commitment_labels.alu_op_div_a_lt_b); + commitments.alu_op_div_std = transcript->template receive_from_prover(commitment_labels.alu_op_div_std); + commitments.alu_op_eq = transcript->template receive_from_prover(commitment_labels.alu_op_eq); + commitments.alu_op_eq_diff_inv = + transcript->template receive_from_prover(commitment_labels.alu_op_eq_diff_inv); + commitments.alu_op_lt = transcript->template receive_from_prover(commitment_labels.alu_op_lt); + commitments.alu_op_lte = transcript->template receive_from_prover(commitment_labels.alu_op_lte); + commitments.alu_op_mul = transcript->template receive_from_prover(commitment_labels.alu_op_mul); + commitments.alu_op_not = transcript->template receive_from_prover(commitment_labels.alu_op_not); + commitments.alu_op_shl = transcript->template receive_from_prover(commitment_labels.alu_op_shl); + commitments.alu_op_shr = transcript->template receive_from_prover(commitment_labels.alu_op_shr); + commitments.alu_op_sub = transcript->template receive_from_prover(commitment_labels.alu_op_sub); + commitments.alu_p_a_borrow = transcript->template receive_from_prover(commitment_labels.alu_p_a_borrow); + commitments.alu_p_b_borrow = transcript->template receive_from_prover(commitment_labels.alu_p_b_borrow); + commitments.alu_p_sub_a_hi = transcript->template receive_from_prover(commitment_labels.alu_p_sub_a_hi); + commitments.alu_p_sub_a_lo = transcript->template receive_from_prover(commitment_labels.alu_p_sub_a_lo); + commitments.alu_p_sub_b_hi = transcript->template receive_from_prover(commitment_labels.alu_p_sub_b_hi); + commitments.alu_p_sub_b_lo = transcript->template receive_from_prover(commitment_labels.alu_p_sub_b_lo); + commitments.alu_partial_prod_hi = + transcript->template receive_from_prover(commitment_labels.alu_partial_prod_hi); + commitments.alu_partial_prod_lo = + transcript->template receive_from_prover(commitment_labels.alu_partial_prod_lo); + commitments.alu_quotient_hi = + transcript->template receive_from_prover(commitment_labels.alu_quotient_hi); + commitments.alu_quotient_lo = + transcript->template receive_from_prover(commitment_labels.alu_quotient_lo); + commitments.alu_remainder = transcript->template receive_from_prover(commitment_labels.alu_remainder); + commitments.alu_res_hi = transcript->template receive_from_prover(commitment_labels.alu_res_hi); + commitments.alu_res_lo = transcript->template receive_from_prover(commitment_labels.alu_res_lo); + commitments.alu_rng_chk_lookup_selector = + transcript->template receive_from_prover(commitment_labels.alu_rng_chk_lookup_selector); + commitments.alu_rng_chk_sel = + transcript->template receive_from_prover(commitment_labels.alu_rng_chk_sel); + commitments.alu_shift_lt_bit_len = + transcript->template receive_from_prover(commitment_labels.alu_shift_lt_bit_len); + commitments.alu_shift_sel = transcript->template receive_from_prover(commitment_labels.alu_shift_sel); + commitments.alu_t_sub_s_bits = + transcript->template receive_from_prover(commitment_labels.alu_t_sub_s_bits); + commitments.alu_two_pow_s = transcript->template receive_from_prover(commitment_labels.alu_two_pow_s); + commitments.alu_two_pow_t_sub_s = + transcript->template receive_from_prover(commitment_labels.alu_two_pow_t_sub_s); + commitments.alu_u128_tag = transcript->template receive_from_prover(commitment_labels.alu_u128_tag); + commitments.alu_u16_r0 = transcript->template receive_from_prover(commitment_labels.alu_u16_r0); + commitments.alu_u16_r1 = transcript->template receive_from_prover(commitment_labels.alu_u16_r1); + commitments.alu_u16_r10 = transcript->template receive_from_prover(commitment_labels.alu_u16_r10); + commitments.alu_u16_r11 = transcript->template receive_from_prover(commitment_labels.alu_u16_r11); + commitments.alu_u16_r12 = transcript->template receive_from_prover(commitment_labels.alu_u16_r12); + commitments.alu_u16_r13 = transcript->template receive_from_prover(commitment_labels.alu_u16_r13); + commitments.alu_u16_r14 = transcript->template receive_from_prover(commitment_labels.alu_u16_r14); + commitments.alu_u16_r2 = transcript->template receive_from_prover(commitment_labels.alu_u16_r2); + commitments.alu_u16_r3 = transcript->template receive_from_prover(commitment_labels.alu_u16_r3); + commitments.alu_u16_r4 = transcript->template receive_from_prover(commitment_labels.alu_u16_r4); + commitments.alu_u16_r5 = transcript->template receive_from_prover(commitment_labels.alu_u16_r5); + commitments.alu_u16_r6 = transcript->template receive_from_prover(commitment_labels.alu_u16_r6); + commitments.alu_u16_r7 = transcript->template receive_from_prover(commitment_labels.alu_u16_r7); + commitments.alu_u16_r8 = transcript->template receive_from_prover(commitment_labels.alu_u16_r8); + commitments.alu_u16_r9 = transcript->template receive_from_prover(commitment_labels.alu_u16_r9); + commitments.alu_u16_tag = transcript->template receive_from_prover(commitment_labels.alu_u16_tag); + commitments.alu_u32_tag = transcript->template receive_from_prover(commitment_labels.alu_u32_tag); + commitments.alu_u64_tag = transcript->template receive_from_prover(commitment_labels.alu_u64_tag); + commitments.alu_u8_r0 = transcript->template receive_from_prover(commitment_labels.alu_u8_r0); + commitments.alu_u8_r1 = transcript->template receive_from_prover(commitment_labels.alu_u8_r1); + commitments.alu_u8_tag = transcript->template receive_from_prover(commitment_labels.alu_u8_tag); + commitments.binary_acc_ia = transcript->template receive_from_prover(commitment_labels.binary_acc_ia); + commitments.binary_acc_ib = transcript->template receive_from_prover(commitment_labels.binary_acc_ib); + commitments.binary_acc_ic = transcript->template receive_from_prover(commitment_labels.binary_acc_ic); + commitments.binary_bin_sel = transcript->template receive_from_prover(commitment_labels.binary_bin_sel); + commitments.binary_clk = transcript->template receive_from_prover(commitment_labels.binary_clk); + commitments.binary_ia_bytes = + transcript->template receive_from_prover(commitment_labels.binary_ia_bytes); + commitments.binary_ib_bytes = + transcript->template receive_from_prover(commitment_labels.binary_ib_bytes); + commitments.binary_ic_bytes = + transcript->template receive_from_prover(commitment_labels.binary_ic_bytes); + commitments.binary_in_tag = transcript->template receive_from_prover(commitment_labels.binary_in_tag); + commitments.binary_mem_tag_ctr = + transcript->template receive_from_prover(commitment_labels.binary_mem_tag_ctr); + commitments.binary_mem_tag_ctr_inv = + transcript->template receive_from_prover(commitment_labels.binary_mem_tag_ctr_inv); + commitments.binary_op_id = transcript->template receive_from_prover(commitment_labels.binary_op_id); + commitments.binary_start = transcript->template receive_from_prover(commitment_labels.binary_start); + commitments.byte_lookup_bin_sel = + transcript->template receive_from_prover(commitment_labels.byte_lookup_bin_sel); + commitments.byte_lookup_table_byte_lengths = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_byte_lengths); + commitments.byte_lookup_table_in_tags = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_in_tags); + commitments.byte_lookup_table_input_a = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_input_a); + commitments.byte_lookup_table_input_b = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_input_b); + commitments.byte_lookup_table_op_id = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_op_id); + commitments.byte_lookup_table_output = + transcript->template receive_from_prover(commitment_labels.byte_lookup_table_output); + commitments.conversion_clk = transcript->template receive_from_prover(commitment_labels.conversion_clk); + commitments.conversion_input = + transcript->template receive_from_prover(commitment_labels.conversion_input); + commitments.conversion_num_limbs = + transcript->template receive_from_prover(commitment_labels.conversion_num_limbs); + commitments.conversion_radix = + transcript->template receive_from_prover(commitment_labels.conversion_radix); + commitments.conversion_to_radix_le_sel = + transcript->template receive_from_prover(commitment_labels.conversion_to_radix_le_sel); + commitments.gas_da_gas_fixed_table = + transcript->template receive_from_prover(commitment_labels.gas_da_gas_fixed_table); + commitments.gas_gas_cost_sel = + transcript->template receive_from_prover(commitment_labels.gas_gas_cost_sel); + commitments.gas_l2_gas_fixed_table = + transcript->template receive_from_prover(commitment_labels.gas_l2_gas_fixed_table); + commitments.keccakf1600_clk = + transcript->template receive_from_prover(commitment_labels.keccakf1600_clk); + commitments.keccakf1600_input = + transcript->template receive_from_prover(commitment_labels.keccakf1600_input); + commitments.keccakf1600_keccakf1600_sel = + transcript->template receive_from_prover(commitment_labels.keccakf1600_keccakf1600_sel); + commitments.keccakf1600_output = + transcript->template receive_from_prover(commitment_labels.keccakf1600_output); + commitments.kernel_emit_l2_to_l1_msg_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_emit_l2_to_l1_msg_write_offset); + commitments.kernel_emit_note_hash_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_emit_note_hash_write_offset); + commitments.kernel_emit_nullifier_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_emit_nullifier_write_offset); + commitments.kernel_emit_unencrypted_log_write_offset = transcript->template receive_from_prover( + commitment_labels.kernel_emit_unencrypted_log_write_offset); + commitments.kernel_kernel_in_offset = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_in_offset); + commitments.kernel_kernel_inputs = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_inputs); + commitments.kernel_kernel_metadata_out = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_metadata_out); + commitments.kernel_kernel_out_offset = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_out_offset); + commitments.kernel_kernel_side_effect_out = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_side_effect_out); + commitments.kernel_kernel_value_out = + transcript->template receive_from_prover(commitment_labels.kernel_kernel_value_out); + commitments.kernel_l1_to_l2_msg_exists_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_l1_to_l2_msg_exists_write_offset); + commitments.kernel_note_hash_exist_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_note_hash_exist_write_offset); + commitments.kernel_nullifier_exists_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_nullifier_exists_write_offset); + commitments.kernel_nullifier_non_exists_write_offset = transcript->template receive_from_prover( + commitment_labels.kernel_nullifier_non_exists_write_offset); + commitments.kernel_q_public_input_kernel_add_to_table = transcript->template receive_from_prover( + commitment_labels.kernel_q_public_input_kernel_add_to_table); + commitments.kernel_q_public_input_kernel_out_add_to_table = transcript->template receive_from_prover( + commitment_labels.kernel_q_public_input_kernel_out_add_to_table); + commitments.kernel_side_effect_counter = + transcript->template receive_from_prover(commitment_labels.kernel_side_effect_counter); + commitments.kernel_sload_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_sload_write_offset); + commitments.kernel_sstore_write_offset = + transcript->template receive_from_prover(commitment_labels.kernel_sstore_write_offset); + commitments.main_abs_da_rem_gas_hi = + transcript->template receive_from_prover(commitment_labels.main_abs_da_rem_gas_hi); + commitments.main_abs_da_rem_gas_lo = + transcript->template receive_from_prover(commitment_labels.main_abs_da_rem_gas_lo); + commitments.main_abs_l2_rem_gas_hi = + transcript->template receive_from_prover(commitment_labels.main_abs_l2_rem_gas_hi); + commitments.main_abs_l2_rem_gas_lo = + transcript->template receive_from_prover(commitment_labels.main_abs_l2_rem_gas_lo); + commitments.main_alu_in_tag = + transcript->template receive_from_prover(commitment_labels.main_alu_in_tag); + commitments.main_alu_sel = transcript->template receive_from_prover(commitment_labels.main_alu_sel); + commitments.main_bin_op_id = transcript->template receive_from_prover(commitment_labels.main_bin_op_id); + commitments.main_bin_sel = transcript->template receive_from_prover(commitment_labels.main_bin_sel); + commitments.main_call_ptr = transcript->template receive_from_prover(commitment_labels.main_call_ptr); + commitments.main_da_gas_op = transcript->template receive_from_prover(commitment_labels.main_da_gas_op); + commitments.main_da_gas_remaining = + transcript->template receive_from_prover(commitment_labels.main_da_gas_remaining); + commitments.main_da_out_of_gas = + transcript->template receive_from_prover(commitment_labels.main_da_out_of_gas); + commitments.main_gas_cost_active = + transcript->template receive_from_prover(commitment_labels.main_gas_cost_active); + commitments.main_ia = transcript->template receive_from_prover(commitment_labels.main_ia); + commitments.main_ib = transcript->template receive_from_prover(commitment_labels.main_ib); + commitments.main_ic = transcript->template receive_from_prover(commitment_labels.main_ic); + commitments.main_id = transcript->template receive_from_prover(commitment_labels.main_id); + commitments.main_id_zero = transcript->template receive_from_prover(commitment_labels.main_id_zero); + commitments.main_ind_a = transcript->template receive_from_prover(commitment_labels.main_ind_a); + commitments.main_ind_b = transcript->template receive_from_prover(commitment_labels.main_ind_b); + commitments.main_ind_c = transcript->template receive_from_prover(commitment_labels.main_ind_c); + commitments.main_ind_d = transcript->template receive_from_prover(commitment_labels.main_ind_d); + commitments.main_ind_op_a = transcript->template receive_from_prover(commitment_labels.main_ind_op_a); + commitments.main_ind_op_b = transcript->template receive_from_prover(commitment_labels.main_ind_op_b); + commitments.main_ind_op_c = transcript->template receive_from_prover(commitment_labels.main_ind_op_c); + commitments.main_ind_op_d = transcript->template receive_from_prover(commitment_labels.main_ind_op_d); + commitments.main_internal_return_ptr = + transcript->template receive_from_prover(commitment_labels.main_internal_return_ptr); + commitments.main_inv = transcript->template receive_from_prover(commitment_labels.main_inv); + commitments.main_l2_gas_op = transcript->template receive_from_prover(commitment_labels.main_l2_gas_op); + commitments.main_l2_gas_remaining = + transcript->template receive_from_prover(commitment_labels.main_l2_gas_remaining); + commitments.main_l2_out_of_gas = + transcript->template receive_from_prover(commitment_labels.main_l2_out_of_gas); + commitments.main_last = transcript->template receive_from_prover(commitment_labels.main_last); + commitments.main_mem_idx_a = transcript->template receive_from_prover(commitment_labels.main_mem_idx_a); + commitments.main_mem_idx_b = transcript->template receive_from_prover(commitment_labels.main_mem_idx_b); + commitments.main_mem_idx_c = transcript->template receive_from_prover(commitment_labels.main_mem_idx_c); + commitments.main_mem_idx_d = transcript->template receive_from_prover(commitment_labels.main_mem_idx_d); + commitments.main_mem_op_a = transcript->template receive_from_prover(commitment_labels.main_mem_op_a); + commitments.main_mem_op_activate_gas = + transcript->template receive_from_prover(commitment_labels.main_mem_op_activate_gas); + commitments.main_mem_op_b = transcript->template receive_from_prover(commitment_labels.main_mem_op_b); + commitments.main_mem_op_c = transcript->template receive_from_prover(commitment_labels.main_mem_op_c); + commitments.main_mem_op_d = transcript->template receive_from_prover(commitment_labels.main_mem_op_d); + commitments.main_op_err = transcript->template receive_from_prover(commitment_labels.main_op_err); + commitments.main_opcode_val = + transcript->template receive_from_prover(commitment_labels.main_opcode_val); + commitments.main_pc = transcript->template receive_from_prover(commitment_labels.main_pc); + commitments.main_q_kernel_lookup = + transcript->template receive_from_prover(commitment_labels.main_q_kernel_lookup); + commitments.main_q_kernel_output_lookup = + transcript->template receive_from_prover(commitment_labels.main_q_kernel_output_lookup); + commitments.main_r_in_tag = transcript->template receive_from_prover(commitment_labels.main_r_in_tag); + commitments.main_rwa = transcript->template receive_from_prover(commitment_labels.main_rwa); + commitments.main_rwb = transcript->template receive_from_prover(commitment_labels.main_rwb); + commitments.main_rwc = transcript->template receive_from_prover(commitment_labels.main_rwc); + commitments.main_rwd = transcript->template receive_from_prover(commitment_labels.main_rwd); + commitments.main_sel_cmov = transcript->template receive_from_prover(commitment_labels.main_sel_cmov); + commitments.main_sel_external_call = + transcript->template receive_from_prover(commitment_labels.main_sel_external_call); + commitments.main_sel_halt = transcript->template receive_from_prover(commitment_labels.main_sel_halt); + commitments.main_sel_internal_call = + transcript->template receive_from_prover(commitment_labels.main_sel_internal_call); + commitments.main_sel_internal_return = + transcript->template receive_from_prover(commitment_labels.main_sel_internal_return); + commitments.main_sel_jump = transcript->template receive_from_prover(commitment_labels.main_sel_jump); + commitments.main_sel_jumpi = transcript->template receive_from_prover(commitment_labels.main_sel_jumpi); + commitments.main_sel_mov = transcript->template receive_from_prover(commitment_labels.main_sel_mov); + commitments.main_sel_mov_a = transcript->template receive_from_prover(commitment_labels.main_sel_mov_a); + commitments.main_sel_mov_b = transcript->template receive_from_prover(commitment_labels.main_sel_mov_b); + commitments.main_sel_op_add = + transcript->template receive_from_prover(commitment_labels.main_sel_op_add); + commitments.main_sel_op_address = + transcript->template receive_from_prover(commitment_labels.main_sel_op_address); + commitments.main_sel_op_and = + transcript->template receive_from_prover(commitment_labels.main_sel_op_and); + commitments.main_sel_op_block_number = + transcript->template receive_from_prover(commitment_labels.main_sel_op_block_number); + commitments.main_sel_op_cast = + transcript->template receive_from_prover(commitment_labels.main_sel_op_cast); + commitments.main_sel_op_chain_id = + transcript->template receive_from_prover(commitment_labels.main_sel_op_chain_id); + commitments.main_sel_op_coinbase = + transcript->template receive_from_prover(commitment_labels.main_sel_op_coinbase); + commitments.main_sel_op_dagasleft = + transcript->template receive_from_prover(commitment_labels.main_sel_op_dagasleft); + commitments.main_sel_op_div = + transcript->template receive_from_prover(commitment_labels.main_sel_op_div); + commitments.main_sel_op_emit_l2_to_l1_msg = + transcript->template receive_from_prover(commitment_labels.main_sel_op_emit_l2_to_l1_msg); + commitments.main_sel_op_emit_note_hash = + transcript->template receive_from_prover(commitment_labels.main_sel_op_emit_note_hash); + commitments.main_sel_op_emit_nullifier = + transcript->template receive_from_prover(commitment_labels.main_sel_op_emit_nullifier); + commitments.main_sel_op_emit_unencrypted_log = + transcript->template receive_from_prover(commitment_labels.main_sel_op_emit_unencrypted_log); + commitments.main_sel_op_eq = transcript->template receive_from_prover(commitment_labels.main_sel_op_eq); + commitments.main_sel_op_fdiv = + transcript->template receive_from_prover(commitment_labels.main_sel_op_fdiv); + commitments.main_sel_op_fee_per_da_gas = + transcript->template receive_from_prover(commitment_labels.main_sel_op_fee_per_da_gas); + commitments.main_sel_op_fee_per_l2_gas = + transcript->template receive_from_prover(commitment_labels.main_sel_op_fee_per_l2_gas); + commitments.main_sel_op_get_contract_instance = + transcript->template receive_from_prover(commitment_labels.main_sel_op_get_contract_instance); + commitments.main_sel_op_keccak = + transcript->template receive_from_prover(commitment_labels.main_sel_op_keccak); + commitments.main_sel_op_l1_to_l2_msg_exists = + transcript->template receive_from_prover(commitment_labels.main_sel_op_l1_to_l2_msg_exists); + commitments.main_sel_op_l2gasleft = + transcript->template receive_from_prover(commitment_labels.main_sel_op_l2gasleft); + commitments.main_sel_op_lt = transcript->template receive_from_prover(commitment_labels.main_sel_op_lt); + commitments.main_sel_op_lte = + transcript->template receive_from_prover(commitment_labels.main_sel_op_lte); + commitments.main_sel_op_mul = + transcript->template receive_from_prover(commitment_labels.main_sel_op_mul); + commitments.main_sel_op_not = + transcript->template receive_from_prover(commitment_labels.main_sel_op_not); + commitments.main_sel_op_note_hash_exists = + transcript->template receive_from_prover(commitment_labels.main_sel_op_note_hash_exists); + commitments.main_sel_op_nullifier_exists = + transcript->template receive_from_prover(commitment_labels.main_sel_op_nullifier_exists); + commitments.main_sel_op_or = transcript->template receive_from_prover(commitment_labels.main_sel_op_or); + commitments.main_sel_op_pedersen = + transcript->template receive_from_prover(commitment_labels.main_sel_op_pedersen); + commitments.main_sel_op_poseidon2 = + transcript->template receive_from_prover(commitment_labels.main_sel_op_poseidon2); + commitments.main_sel_op_radix_le = + transcript->template receive_from_prover(commitment_labels.main_sel_op_radix_le); + commitments.main_sel_op_sender = + transcript->template receive_from_prover(commitment_labels.main_sel_op_sender); + commitments.main_sel_op_sha256 = + transcript->template receive_from_prover(commitment_labels.main_sel_op_sha256); + commitments.main_sel_op_shl = + transcript->template receive_from_prover(commitment_labels.main_sel_op_shl); + commitments.main_sel_op_shr = + transcript->template receive_from_prover(commitment_labels.main_sel_op_shr); + commitments.main_sel_op_sload = + transcript->template receive_from_prover(commitment_labels.main_sel_op_sload); + commitments.main_sel_op_sstore = + transcript->template receive_from_prover(commitment_labels.main_sel_op_sstore); + commitments.main_sel_op_storage_address = + transcript->template receive_from_prover(commitment_labels.main_sel_op_storage_address); + commitments.main_sel_op_sub = + transcript->template receive_from_prover(commitment_labels.main_sel_op_sub); + commitments.main_sel_op_timestamp = + transcript->template receive_from_prover(commitment_labels.main_sel_op_timestamp); + commitments.main_sel_op_transaction_fee = + transcript->template receive_from_prover(commitment_labels.main_sel_op_transaction_fee); + commitments.main_sel_op_version = + transcript->template receive_from_prover(commitment_labels.main_sel_op_version); + commitments.main_sel_op_xor = + transcript->template receive_from_prover(commitment_labels.main_sel_op_xor); + commitments.main_sel_rng_16 = + transcript->template receive_from_prover(commitment_labels.main_sel_rng_16); + commitments.main_sel_rng_8 = transcript->template receive_from_prover(commitment_labels.main_sel_rng_8); + commitments.main_space_id = transcript->template receive_from_prover(commitment_labels.main_space_id); + commitments.main_table_pow_2 = + transcript->template receive_from_prover(commitment_labels.main_table_pow_2); + commitments.main_tag_err = transcript->template receive_from_prover(commitment_labels.main_tag_err); + commitments.main_w_in_tag = transcript->template receive_from_prover(commitment_labels.main_w_in_tag); + commitments.mem_addr = transcript->template receive_from_prover(commitment_labels.mem_addr); + commitments.mem_clk = transcript->template receive_from_prover(commitment_labels.mem_clk); + commitments.mem_diff_hi = transcript->template receive_from_prover(commitment_labels.mem_diff_hi); + commitments.mem_diff_lo = transcript->template receive_from_prover(commitment_labels.mem_diff_lo); + commitments.mem_diff_mid = transcript->template receive_from_prover(commitment_labels.mem_diff_mid); + commitments.mem_glob_addr = transcript->template receive_from_prover(commitment_labels.mem_glob_addr); + commitments.mem_ind_op_a = transcript->template receive_from_prover(commitment_labels.mem_ind_op_a); + commitments.mem_ind_op_b = transcript->template receive_from_prover(commitment_labels.mem_ind_op_b); + commitments.mem_ind_op_c = transcript->template receive_from_prover(commitment_labels.mem_ind_op_c); + commitments.mem_ind_op_d = transcript->template receive_from_prover(commitment_labels.mem_ind_op_d); + commitments.mem_last = transcript->template receive_from_prover(commitment_labels.mem_last); + commitments.mem_lastAccess = transcript->template receive_from_prover(commitment_labels.mem_lastAccess); + commitments.mem_mem_sel = transcript->template receive_from_prover(commitment_labels.mem_mem_sel); + commitments.mem_one_min_inv = + transcript->template receive_from_prover(commitment_labels.mem_one_min_inv); + commitments.mem_op_a = transcript->template receive_from_prover(commitment_labels.mem_op_a); + commitments.mem_op_b = transcript->template receive_from_prover(commitment_labels.mem_op_b); + commitments.mem_op_c = transcript->template receive_from_prover(commitment_labels.mem_op_c); + commitments.mem_op_d = transcript->template receive_from_prover(commitment_labels.mem_op_d); + commitments.mem_r_in_tag = transcript->template receive_from_prover(commitment_labels.mem_r_in_tag); + commitments.mem_rng_chk_sel = + transcript->template receive_from_prover(commitment_labels.mem_rng_chk_sel); + commitments.mem_rw = transcript->template receive_from_prover(commitment_labels.mem_rw); + commitments.mem_sel_cmov = transcript->template receive_from_prover(commitment_labels.mem_sel_cmov); + commitments.mem_sel_mov_a = transcript->template receive_from_prover(commitment_labels.mem_sel_mov_a); + commitments.mem_sel_mov_b = transcript->template receive_from_prover(commitment_labels.mem_sel_mov_b); + commitments.mem_skip_check_tag = + transcript->template receive_from_prover(commitment_labels.mem_skip_check_tag); + commitments.mem_space_id = transcript->template receive_from_prover(commitment_labels.mem_space_id); + commitments.mem_tag = transcript->template receive_from_prover(commitment_labels.mem_tag); + commitments.mem_tag_err = transcript->template receive_from_prover(commitment_labels.mem_tag_err); + commitments.mem_tsp = transcript->template receive_from_prover(commitment_labels.mem_tsp); + commitments.mem_val = transcript->template receive_from_prover(commitment_labels.mem_val); + commitments.mem_w_in_tag = transcript->template receive_from_prover(commitment_labels.mem_w_in_tag); + commitments.pedersen_clk = transcript->template receive_from_prover(commitment_labels.pedersen_clk); + commitments.pedersen_input = transcript->template receive_from_prover(commitment_labels.pedersen_input); + commitments.pedersen_output = + transcript->template receive_from_prover(commitment_labels.pedersen_output); + commitments.pedersen_pedersen_sel = + transcript->template receive_from_prover(commitment_labels.pedersen_pedersen_sel); + commitments.poseidon2_clk = transcript->template receive_from_prover(commitment_labels.poseidon2_clk); + commitments.poseidon2_input = + transcript->template receive_from_prover(commitment_labels.poseidon2_input); + commitments.poseidon2_output = + transcript->template receive_from_prover(commitment_labels.poseidon2_output); + commitments.poseidon2_poseidon_perm_sel = + transcript->template receive_from_prover(commitment_labels.poseidon2_poseidon_perm_sel); + commitments.sha256_clk = transcript->template receive_from_prover(commitment_labels.sha256_clk); + commitments.sha256_input = transcript->template receive_from_prover(commitment_labels.sha256_input); + commitments.sha256_output = transcript->template receive_from_prover(commitment_labels.sha256_output); + commitments.sha256_sha256_compression_sel = + transcript->template receive_from_prover(commitment_labels.sha256_sha256_compression_sel); + commitments.sha256_state = transcript->template receive_from_prover(commitment_labels.sha256_state); commitments.lookup_byte_lengths_counts = transcript->template receive_from_prover(commitment_labels.lookup_byte_lengths_counts); commitments.lookup_byte_operations_counts = @@ -779,27 +679,27 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, const std::vector Date: Wed, 19 Jun 2024 10:00:45 +0000 Subject: [PATCH 06/15] make gcc happy --- .../zeromorph/zeromorph.hpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index b7b427fac2b..c1734a41c2e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -442,7 +442,6 @@ template class ZeroMorphProver_ { template class ZeroMorphVerifier_ { using FF = typename Curve::ScalarField; using Commitment = typename Curve::AffineElement; - using OpeningClaim = OpeningClaim; public: /** @@ -638,7 +637,7 @@ template class ZeroMorphVerifier_ { * @param concatenated_evaluations * @return OpeningClaim */ - static OpeningClaim compute_univariate_evaluation_opening_claim( + static OpeningClaim compute_univariate_evaluation_opening_claim( RefSpan unshifted_commitments, RefSpan to_be_shifted_commitments, RefSpan unshifted_evaluations, @@ -724,15 +723,15 @@ template class ZeroMorphVerifier_ { * @param transcript * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated */ - static OpeningClaim verify(RefSpan unshifted_commitments, - RefSpan to_be_shifted_commitments, - RefSpan unshifted_evaluations, - RefSpan shifted_evaluations, - std::span multivariate_challenge, - Commitment first_g1, - auto& transcript, - const std::vector>& concatenation_group_commitments = {}, - RefSpan concatenated_evaluations = {}) + static OpeningClaim verify(RefSpan unshifted_commitments, + RefSpan to_be_shifted_commitments, + RefSpan unshifted_evaluations, + RefSpan shifted_evaluations, + std::span multivariate_challenge, + Commitment first_g1, + auto& transcript, + const std::vector>& concatenation_group_commitments = {}, + RefSpan concatenated_evaluations = {}) { return compute_univariate_evaluation_opening_claim(unshifted_commitments, to_be_shifted_commitments, From 4eea9e6ef1a4722948d4a77a9738454ff097bafe Mon Sep 17 00:00:00 2001 From: maramihali Date: Thu, 20 Jun 2024 09:32:30 +0000 Subject: [PATCH 07/15] recomment asserts and pass commitments as const ref --- .../commitment_schemes/zeromorph/zeromorph.hpp | 14 +++++++++----- .../verifier/ultra_recursive_verifier.cpp | 17 +++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index c1734a41c2e..de11a30a05e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -65,7 +65,8 @@ template class ZeroMorphProver_ { * @param u_challenge Multivariate challenge u = (u_0, ..., u_{d-1}) * @return std::vector The quotients q_k */ - static std::vector compute_multilinear_quotients(Polynomial polynomial, std::span u_challenge) + static std::vector compute_multilinear_quotients(Polynomial& polynomial, + std::span u_challenge) { size_t log_N = numeric::get_msb(polynomial.size()); // The size of the multilinear challenge must equal the log of the polynomial size @@ -456,7 +457,10 @@ template class ZeroMorphVerifier_ { * @param x_challenge * @return Commitment */ - static Commitment compute_C_zeta_x(Commitment C_q, std::vector& C_q_k, FF y_challenge, FF x_challenge) + static Commitment compute_C_zeta_x(const Commitment& C_q, + std::vector& C_q_k, + FF y_challenge, + FF x_challenge) { size_t log_N = C_q_k.size(); size_t N = 1 << log_N; @@ -519,7 +523,7 @@ template class ZeroMorphVerifier_ { * @param concatenation_groups_commitments * @return Commitment */ - static Commitment compute_C_Z_x(Commitment first_g1, + static Commitment compute_C_Z_x(const Commitment& first_g1, RefSpan f_commitments, RefSpan g_commitments, std::span C_q_k, @@ -643,7 +647,7 @@ template class ZeroMorphVerifier_ { RefSpan unshifted_evaluations, RefSpan shifted_evaluations, std::span multivariate_challenge, - Commitment first_g1, + const Commitment& first_g1, auto& transcript, const std::vector>& concatenation_group_commitments = {}, RefSpan concatenated_evaluations = {}) @@ -728,7 +732,7 @@ template class ZeroMorphVerifier_ { RefSpan unshifted_evaluations, RefSpan shifted_evaluations, std::span multivariate_challenge, - Commitment first_g1, + const Commitment& first_g1, auto& transcript, const std::vector>& concatenation_group_commitments = {}, RefSpan concatenated_evaluations = {}) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp index 60e2ecd9e36..a0cc18d3141 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp @@ -53,14 +53,15 @@ std::array UltraRecursiveVerifier_::ve VerifierCommitments commitments{ key }; CommitmentLabels commitment_labels; - const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - const auto public_input_size = transcript->template receive_from_prover("public_input_size"); - const auto pub_inputs_offset = transcript->template receive_from_prover("pub_inputs_offset"); - - // For debugging purposes only - ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); - ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); - ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); + transcript->template receive_from_prover("circuit_size"); + transcript->template receive_from_prover("public_input_size"); + transcript->template receive_from_prover("pub_inputs_offset"); + + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1032): Uncomment these once it doesn't cause issues + // with the flows + // ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); + // ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); + // ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); std::vector public_inputs; for (size_t i = 0; i < key->num_public_inputs; ++i) { From 8b481618f9be3342943f6cf51aa0f209b613cfcb Mon Sep 17 00:00:00 2001 From: maramihali Date: Thu, 20 Jun 2024 09:32:30 +0000 Subject: [PATCH 08/15] recomment asserts and pass commitments as const ref --- .../commitment_schemes/ipa/ipa.test.cpp | 4 ++-- .../commitment_schemes/kzg/kzg.test.cpp | 4 ++-- .../commitment_schemes/shplonk/shplonk.hpp | 16 ++++++++-------- .../commitment_schemes/shplonk/shplonk.test.cpp | 9 ++++----- .../commitment_schemes/zeromorph/zeromorph.hpp | 14 +++++++++----- .../verifier/ultra_recursive_verifier.cpp | 17 +++++++++-------- 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp index 4defedb4500..8c6a87010b9 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp @@ -307,10 +307,10 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto [shplonk_opening_pair, shplonk_witness] = ShplonkProver::compute_partially_evaluated_batched_quotient( + const auto [polynomial, opening_pair] = ShplonkProver::compute_partially_evaluated_batched_quotient( gemini_opening_pairs, gemini_witnesses, std::move(batched_quotient_Q), nu_challenge, z_challenge); - IPA::compute_opening_proof(this->ck(), shplonk_opening_pair, shplonk_witness, prover_transcript); + IPA::compute_opening_proof(this->ck(), opening_pair, polynomial, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp index 5271e92b890..2edacb1cfb9 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp @@ -145,12 +145,12 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto [shplonk_opening_pair, shplonk_witness] = ShplonkProver::compute_partially_evaluated_batched_quotient( + const auto opening_claim = ShplonkProver::compute_partially_evaluated_batched_quotient( gemini_opening_pairs, gemini_witnesses, std::move(batched_quotient_Q), nu_challenge, z_challenge); // KZG prover: // - Adds commitment [W] to transcript - KZG::compute_opening_proof(this->ck(), shplonk_opening_pair, shplonk_witness, prover_transcript); + KZG::compute_opening_proof(this->ck(), opening_claim.opening_pair, opening_claim.polynomial, prover_transcript); // Run the full verifier PCS protocol with genuine opening claims (genuine commitment, genuine evaluation) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index 74b3b500e79..73f5622fa8d 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -25,7 +25,7 @@ namespace bb { * * @tparam Curve EC parameters */ -template using OutputWitness = bb::Polynomial; +// template using OutputWitness = bb::Polynomial; /** * @brief Prover output (claim=([G], r, 0), witness = G(X), proof = [Q]) @@ -33,10 +33,10 @@ template using OutputWitness = bb::Polynomial struct ShplonkProverOutput { - OpeningPair opening_pair; // single opening pair (challenge, evaluation) - OutputWitness witness; // single polynomial G(X) -}; +// template struct ShplonkProverOutput { +// OpeningPair opening_pair; // single opening pair (challenge, evaluation) +// OutputWitness witness; // single polynomial G(X) +// }; /** * @brief Shplonk Prover @@ -97,7 +97,7 @@ template class ShplonkProver_ { * @param z_challenge * @return Output{OpeningPair, Polynomial} */ - static ShplonkProverOutput compute_partially_evaluated_batched_quotient( + static ProverOpeningClaim compute_partially_evaluated_batched_quotient( std::span> opening_pairs, std::span witness_polynomials, Polynomial&& batched_quotient_Q, @@ -116,7 +116,7 @@ template class ShplonkProver_ { // G(X) = Q(X) - Q_z(X) = Q(X) - ∑ⱼ ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( r − xⱼ ), // s.t. G(r) = 0 - Polynomial G(std::move(batched_quotient_Q)); // G(X) = Q(X) + Polynomial G(batched_quotient_Q); // G(X) = Q(X) // G₀ = ∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ) Fr current_nu = Fr::one(); @@ -137,7 +137,7 @@ template class ShplonkProver_ { } // Return opening pair (z, 0) and polynomial G(X) = Q(X) - Q_z(X) - return { .opening_pair = { .challenge = z_challenge, .evaluation = Fr::zero() }, .witness = std::move(G) }; + return { .polynomial = G, .opening_pair = { .challenge = z_challenge, .evaluation = Fr::zero() } }; }; }; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp index 35976616526..1bf8de8d8bb 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp @@ -52,12 +52,11 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto [prover_opening_pair, shplonk_prover_witness] = - ShplonkProver::compute_partially_evaluated_batched_quotient( - opening_pairs, polynomials, std::move(batched_quotient_Q), nu_challenge, z_challenge); + const auto opening_claim = ShplonkProver::compute_partially_evaluated_batched_quotient( + opening_pairs, polynomials, std::move(batched_quotient_Q), nu_challenge, z_challenge); // An intermediate check to confirm the opening of the shplonk prover witness Q - this->verify_opening_pair(prover_opening_pair, shplonk_prover_witness); + this->verify_opening_pair(opening_claim.opening_pair, opening_claim.polynomial); // Aggregate polynomial commitments and their opening pairs std::vector opening_claims; @@ -69,6 +68,6 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) // Execute the shplonk verifier functionality const auto verifier_claim = ShplonkVerifier::reduce_verification(this->vk(), opening_claims, verifier_transcript); - this->verify_opening_claim(verifier_claim, shplonk_prover_witness); + this->verify_opening_claim(verifier_claim, opening_claim.polynomial); } } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index c1734a41c2e..de11a30a05e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -65,7 +65,8 @@ template class ZeroMorphProver_ { * @param u_challenge Multivariate challenge u = (u_0, ..., u_{d-1}) * @return std::vector The quotients q_k */ - static std::vector compute_multilinear_quotients(Polynomial polynomial, std::span u_challenge) + static std::vector compute_multilinear_quotients(Polynomial& polynomial, + std::span u_challenge) { size_t log_N = numeric::get_msb(polynomial.size()); // The size of the multilinear challenge must equal the log of the polynomial size @@ -456,7 +457,10 @@ template class ZeroMorphVerifier_ { * @param x_challenge * @return Commitment */ - static Commitment compute_C_zeta_x(Commitment C_q, std::vector& C_q_k, FF y_challenge, FF x_challenge) + static Commitment compute_C_zeta_x(const Commitment& C_q, + std::vector& C_q_k, + FF y_challenge, + FF x_challenge) { size_t log_N = C_q_k.size(); size_t N = 1 << log_N; @@ -519,7 +523,7 @@ template class ZeroMorphVerifier_ { * @param concatenation_groups_commitments * @return Commitment */ - static Commitment compute_C_Z_x(Commitment first_g1, + static Commitment compute_C_Z_x(const Commitment& first_g1, RefSpan f_commitments, RefSpan g_commitments, std::span C_q_k, @@ -643,7 +647,7 @@ template class ZeroMorphVerifier_ { RefSpan unshifted_evaluations, RefSpan shifted_evaluations, std::span multivariate_challenge, - Commitment first_g1, + const Commitment& first_g1, auto& transcript, const std::vector>& concatenation_group_commitments = {}, RefSpan concatenated_evaluations = {}) @@ -728,7 +732,7 @@ template class ZeroMorphVerifier_ { RefSpan unshifted_evaluations, RefSpan shifted_evaluations, std::span multivariate_challenge, - Commitment first_g1, + const Commitment& first_g1, auto& transcript, const std::vector>& concatenation_group_commitments = {}, RefSpan concatenated_evaluations = {}) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp index 60e2ecd9e36..a0cc18d3141 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/ultra_recursive_verifier.cpp @@ -53,14 +53,15 @@ std::array UltraRecursiveVerifier_::ve VerifierCommitments commitments{ key }; CommitmentLabels commitment_labels; - const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - const auto public_input_size = transcript->template receive_from_prover("public_input_size"); - const auto pub_inputs_offset = transcript->template receive_from_prover("pub_inputs_offset"); - - // For debugging purposes only - ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); - ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); - ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); + transcript->template receive_from_prover("circuit_size"); + transcript->template receive_from_prover("public_input_size"); + transcript->template receive_from_prover("pub_inputs_offset"); + + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1032): Uncomment these once it doesn't cause issues + // with the flows + // ASSERT(static_cast(circuit_size.get_value()) == key->circuit_size); + // ASSERT(static_cast(public_input_size.get_value()) == key->num_public_inputs); + // ASSERT(static_cast(pub_inputs_offset.get_value()) == key->pub_inputs_offset); std::vector public_inputs; for (size_t i = 0; i < key->num_public_inputs; ++i) { From 2ffa927bf3951521b09adb09bae82353a4d824f8 Mon Sep 17 00:00:00 2001 From: maramihali Date: Fri, 21 Jun 2024 12:55:26 +0000 Subject: [PATCH 09/15] resolve review comments --- .../commitment_schemes/shplonk/shplonk.hpp | 2 +- .../commitment_schemes/verification_key.hpp | 4 +- .../zeromorph/zeromorph.hpp | 81 ++++-------- .../zeromorph/zeromorph.test.cpp | 119 ++++++++++-------- .../src/barretenberg/eccvm/eccvm_verifier.cpp | 2 +- .../eccvm_recursive_verifier.cpp | 24 ++-- .../verifier_commitment_key.hpp | 6 +- .../verifier_commitment_key.test.cpp | 2 +- .../srs/factories/crs_factory.hpp | 4 +- .../srs/factories/file_crs_factory.cpp | 4 +- .../srs/factories/file_crs_factory.hpp | 8 +- .../srs/factories/mem_bn254_crs_factory.cpp | 4 +- .../srs/factories/mem_crs_factory.test.cpp | 2 +- .../factories/mem_grumpkin_crs_factory.cpp | 2 +- 14 files changed, 123 insertions(+), 141 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index 74b3b500e79..1dbca1cd296 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -264,7 +264,7 @@ template class ShplonkVerifier_ { } // [G] += G₀⋅[1] = [G] + (∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ))⋅[1] - G_commitment += vk->get_first_g1() * G_commitment_constant; + G_commitment += vk->get_g1_identity() * G_commitment_constant; } // Return opening pair (z, 0) and commitment [G] diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/verification_key.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/verification_key.hpp index 42fac7a1fab..23fb76a9502 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/verification_key.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/verification_key.hpp @@ -40,7 +40,7 @@ template <> class VerifierCommitmentKey { srs = srs::get_crs_factory()->get_verifier_crs(); }; - Commitment get_first_g1() { return srs->get_first_g1(); } + Commitment get_g1_identity() { return srs->get_g1_identity(); } /** * @brief verifies a pairing equation over 2 points using the verifier SRS @@ -93,7 +93,7 @@ template <> class VerifierCommitmentKey { srs = srs::get_crs_factory()->get_verifier_crs(num_points); } - Commitment get_first_g1() { return srs->get_first_g1(); } + Commitment get_g1_identity() { return srs->get_g1_identity(); } Commitment* get_monomial_points() { return srs->get_monomial_points(); } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index de11a30a05e..f6a77ba302c 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -311,8 +311,8 @@ template class ZeroMorphProver_ { } /** - * @brief Returns a univariate opening claim about a set of multilinear evaluation claims for unshifted polynomials - * f_i and to-be-shifted polynomials g_i to be subsequently proved with a univariate PCS + * @brief * @brief Returns a univariate opening claim equivalent to a set of multilinear evaluation claims for + * unshifted polynomials f_i and to-be-shifted polynomials g_i to be subsequently proved with a univariate PCS * * @param f_polynomials Unshifted polynomials * @param g_polynomials To-be-shifted polynomials (of which the shifts h_i were evaluated by sumcheck) @@ -320,6 +320,8 @@ template class ZeroMorphProver_ { * @param multilinear_challenge Multilinear challenge point u * @param commitment_key * @param transcript + * + * @todo https://github.com/AztecProtocol/barretenberg/issues/1030: document concatenation trick */ static OpeningClaim prove(RefSpan f_polynomials, RefSpan g_polynomials, @@ -512,7 +514,7 @@ template class ZeroMorphVerifier_ { * * @note The concatenation term arises from an implementation detail in the Translator and is not part of the * conventional ZM protocol - * @param first_g1 first element in the SRS + * @param g1_identity first element in the SRS * @param f_commitments Commitments to unshifted polynomials [f_i] * @param g_commitments Commitments to to-be-shifted polynomials [g_i] * @param C_q_k Commitments to q_k @@ -523,7 +525,7 @@ template class ZeroMorphVerifier_ { * @param concatenation_groups_commitments * @return Commitment */ - static Commitment compute_C_Z_x(const Commitment& first_g1, + static Commitment compute_C_Z_x(const Commitment& g1_identity, RefSpan f_commitments, RefSpan g_commitments, std::span C_q_k, @@ -546,7 +548,7 @@ template class ZeroMorphVerifier_ { // Add contribution: -v * x * \Phi_n(x) * [1]_1 scalars.emplace_back(FF(-1) * batched_evaluation * x_challenge * phi_n_x); - commitments.emplace_back(first_g1); + commitments.emplace_back(g1_identity); // Add contribution: x * \sum_{i=0}^{m-1} \rho^i*[f_i] auto rho_pow = FF(1); @@ -627,30 +629,24 @@ template class ZeroMorphVerifier_ { } /** - * @brief Compute the univariate opening claim used to verify the univariate PCS - * evaluation. + * @brief Return the univariate opening claim used to verify, in a subsequent PCS, a set of multilinear evaluation + * claims for unshifted polynomials f_i and to-be-shifted polynomials g_i * - * @param unshifted_commitments - * @param to_be_shifted_commitments - * @param unshifted_evaluations - * @param shifted_evaluations - * @param multivariate_challenge - * @param first_g1 + * @param commitments Commitments to polynomials f_i and g_i (unshifted and to-be-shifted) + * @param claimed_evaluations Claimed evaluations v_i = f_i(u) and w_i = h_i(u) = g_i_shifted(u) + * @param multivariate_challenge Challenge point u * @param transcript - * @param concatenation_group_commitments - * @param concatenated_evaluations - * @return OpeningClaim + * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated */ - static OpeningClaim compute_univariate_evaluation_opening_claim( - RefSpan unshifted_commitments, - RefSpan to_be_shifted_commitments, - RefSpan unshifted_evaluations, - RefSpan shifted_evaluations, - std::span multivariate_challenge, - const Commitment& first_g1, - auto& transcript, - const std::vector>& concatenation_group_commitments = {}, - RefSpan concatenated_evaluations = {}) + static OpeningClaim verify(RefSpan unshifted_commitments, + RefSpan to_be_shifted_commitments, + RefSpan unshifted_evaluations, + RefSpan shifted_evaluations, + std::span multivariate_challenge, + const Commitment& g1_identity, + auto& transcript, + const std::vector>& concatenation_group_commitments = {}, + RefSpan concatenated_evaluations = {}) { size_t log_N = multivariate_challenge.size(); FF rho = transcript->template get_challenge("rho"); @@ -691,7 +687,7 @@ template class ZeroMorphVerifier_ { auto C_zeta_x = compute_C_zeta_x(C_q, C_q_k, y_challenge, x_challenge); // Compute commitment C_{Z_x} - Commitment C_Z_x = compute_C_Z_x(first_g1, + Commitment C_Z_x = compute_C_Z_x(g1_identity, unshifted_commitments, to_be_shifted_commitments, C_q_k, @@ -716,37 +712,6 @@ template class ZeroMorphVerifier_ { return { .opening_pair = { .challenge = x_challenge, .evaluation = FF(0) }, .commitment = C_zeta_Z }; } - - /** - * @brief Return the univariate opening claim used to verify, in a subsequent PCS, a set of multilinear evaluation - * claims for unshifted polynomials f_i and to-be-shifted polynomials g_i - * - * @param commitments Commitments to polynomials f_i and g_i (unshifted and to-be-shifted) - * @param claimed_evaluations Claimed evaluations v_i = f_i(u) and w_i = h_i(u) = g_i_shifted(u) - * @param multivariate_challenge Challenge point u - * @param transcript - * @return VerifierAccumulator Inputs to the final PCS verification check that will be accumulated - */ - static OpeningClaim verify(RefSpan unshifted_commitments, - RefSpan to_be_shifted_commitments, - RefSpan unshifted_evaluations, - RefSpan shifted_evaluations, - std::span multivariate_challenge, - const Commitment& first_g1, - auto& transcript, - const std::vector>& concatenation_group_commitments = {}, - RefSpan concatenated_evaluations = {}) - { - return compute_univariate_evaluation_opening_claim(unshifted_commitments, - to_be_shifted_commitments, - unshifted_evaluations, - shifted_evaluations, - multivariate_challenge, - first_g1, - transcript, - concatenation_group_commitments, - concatenated_evaluations); - } }; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index 65722270e55..3ce54297fba 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -18,14 +18,36 @@ template class ZeroMorphTest : public CommitmentTest; using ZeroMorphVerifier = ZeroMorphVerifier_; - using TupleOfPolynomialsEvaluationsCommitments = - std::tuple, std::vector, std::vector>; using TupleOfConcatenationInputs = std::tuple>, std::vector, std::vector, std::vector>>; + /** + * @brief Data structure for encapsulating a set of multilinear polynomials used to test the protocol, their + * evaluations at the point that we want to create an evaluation proof for and + * their commitments. Alternatively, the polynomials and commitments can be the ones to-be-shifted, while the + * evaluations are for their shifted version. + * + */ + struct PolynomialsEvaluationsCommitments { + std::vector polynomials; + std::vector evaluations; + std::vector commitments; + }; + + /** + * @brief Data structure used to test the protocol's alternative for Goblin Translator. + * + */ + struct ConcatenationInputs { + std::vector> concatenation_groups; + std::vector concatenated_polynomials; + std::vector c_evaluations; + std::vector> concatenation_groups_commitments; + }; + /** * @brief Evaluate Phi_k(x) = \sum_{i=0}^k x^i using the direct inefficent formula * @@ -58,18 +80,19 @@ template class ZeroMorphTest : public CommitmentTest u_challenge = this->random_evaluation_point(log_N); // Construct some random multilinear polynomials f_i, their commitments and their evaluations v_i = f_i(u) - auto unshifted_tuple = polynomials_comms_and_evaluations(u_challenge, NUM_UNSHIFTED); + PolynomialsEvaluationsCommitments unshifted_input = + polynomials_comms_and_evaluations(u_challenge, NUM_UNSHIFTED); // Construct polynomials and commitments from f_i that are to be shifted and compute their shifted evaluations - auto shifted_tuple = - to_be_shifted_polynomials_and_comms_and_shifted_evaluations(unshifted_tuple, u_challenge, NUM_SHIFTED); + PolynomialsEvaluationsCommitments shifted_input = + to_be_shifted_polynomials_and_comms_and_shifted_evaluations(unshifted_input, u_challenge, NUM_SHIFTED); bool verified = false; if (NUM_CONCATENATED == 0) { - verified = prove_and_verify(unshifted_tuple, shifted_tuple, u_challenge); + verified = prove_and_verify(unshifted_input, shifted_input, u_challenge); } else { verified = - prove_and_verify_with_concatenation(unshifted_tuple, shifted_tuple, u_challenge, NUM_CONCATENATED); + prove_and_verify_with_concatenation(unshifted_input, shifted_input, u_challenge, NUM_CONCATENATED); } return verified; @@ -79,8 +102,8 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, - size_t NUM_UNSHIFTED) + PolynomialsEvaluationsCommitments polynomials_comms_and_evaluations(std::vector u_challenge, + size_t NUM_UNSHIFTED) { // Construct some random multilinear polynomials f_i and their evaluations v_i = f_i(u) std::vector f_polynomials; // unshifted polynomials @@ -100,11 +123,11 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_SHIFTED) + PolynomialsEvaluationsCommitments to_be_shifted_polynomials_and_comms_and_shifted_evaluations( + PolynomialsEvaluationsCommitments unshifted_inputs, std::vector u_challenge, size_t NUM_SHIFTED) { - std::vector f_polynomials = std::get<0>(unshifted_input); - std::vector f_commitments = std::get<2>(unshifted_input); + std::vector f_polynomials = unshifted_inputs.polynomials; + std::vector f_commitments = unshifted_inputs.commitments; std::vector g_polynomials; // to-be-shifted polynomials std::vector h_polynomials; // shifts of the to-be-shifted polynomials @@ -125,7 +148,7 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_CONCATENATED) + ConcatenationInputs concatenation_inputs(std::vector u_challenge, size_t NUM_CONCATENATED) { size_t concatenation_index = 2; @@ -182,19 +205,17 @@ template class ZeroMorphTest : public CommitmentTest u_challenge) { - auto [f_polynomials, v_evaluations, f_commitments] = unshifted; - auto [g_polynomials, w_evaluations, g_commitments] = shifted; auto prover_transcript = NativeTranscript::prover_init_empty(); // Execute Prover protocol - auto prover_opening_claim = ZeroMorphProver::prove(RefVector(f_polynomials), - RefVector(g_polynomials), - RefVector(v_evaluations), - RefVector(w_evaluations), + auto prover_opening_claim = ZeroMorphProver::prove(RefVector(unshifted.polynomials), // unshifted + RefVector(shifted.polynomials), // to-be shifted + RefVector(unshifted.evaluations), // unshifted + RefVector(shifted.evaluations), // shifted u_challenge, this->commitment_key, prover_transcript); @@ -206,12 +227,12 @@ template class ZeroMorphTest : public CommitmentTestvk()->get_first_g1(), + this->vk()->get_g1_identity(), verifier_transcript); VerifierAccumulator result; @@ -232,29 +253,27 @@ template class ZeroMorphTest : public CommitmentTest u_challenge, size_t NUM_CONCATENATED) { - auto [f_polynomials, v_evaluations, f_commitments] = unshifted_input; - auto [g_polynomials, w_evaluations, g_commitments] = shifted_input; - auto [concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments] = - concatenation_inputs(u_challenge, NUM_CONCATENATED); + ConcatenationInputs concatenation = concatenation_inputs(u_challenge, NUM_CONCATENATED); auto prover_transcript = NativeTranscript::prover_init_empty(); // Execute Prover protocol - auto prover_opening_claim = ZeroMorphProver::prove(RefVector(f_polynomials), // unshifted - RefVector(g_polynomials), // to-be-shifted - RefVector(v_evaluations), // unshifted - RefVector(w_evaluations), // shifted - u_challenge, - this->commitment_key, - prover_transcript, - RefVector(concatenated_polynomials), - RefVector(c_evaluations), - to_vector_of_ref_vectors(concatenation_groups)); + auto prover_opening_claim = + ZeroMorphProver::prove(RefVector(unshifted.polynomials), // unshifted + RefVector(shifted.polynomials), // to-be-shifted + RefVector(unshifted.evaluations), // unshifted + RefVector(shifted.evaluations), // shifted + u_challenge, + this->commitment_key, + prover_transcript, + RefVector(concatenation.concatenated_polynomials), + RefVector(concatenation.c_evaluations), + to_vector_of_ref_vectors(concatenation.concatenation_groups)); PCS::compute_opening_proof(this->commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, @@ -263,15 +282,15 @@ template class ZeroMorphTest : public CommitmentTestvk()->get_first_g1(), + this->vk()->get_g1_identity(), verifier_transcript, - to_vector_of_ref_vectors(concatenation_groups_commitments), - RefVector(c_evaluations)); + to_vector_of_ref_vectors(concatenation.concatenation_groups_commitments), + RefVector(concatenation.c_evaluations)); VerifierAccumulator result; bool verified = false; diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp index 07fddd18119..b6bf6e75187 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp @@ -63,7 +63,7 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) claimed_evaluations.get_unshifted(), claimed_evaluations.get_shifted(), multivariate_challenge, - key->pcs_verification_key->get_first_g1(), + key->pcs_verification_key->get_g1_identity(), transcript); bool multivariate_opening_verified = PCS::reduce_verify(key->pcs_verification_key, multivariate_opening_claim, transcript); diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index d5542781aa6..e2598508e2b 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -72,15 +72,14 @@ template void ECCVMRecursiveVerifier_::verify_proof(co auto [multivariate_challenge, claimed_evaluations, sumcheck_verified] = sumcheck.verify(relation_parameters, alpha, gate_challenges); - auto multivariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - key->pcs_verification_key->get_first_g1(), - transcript); - auto multivariate_opening_verified = - PCS::reduce_verify(key->pcs_verification_key, multivariate_opening_claim, transcript); + auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + key->pcs_verification_key->get_g1_identity(), + transcript); + auto multivariate_opening_verified = PCS::reduce_verify(key->pcs_verification_key, opening_claim, transcript); // Execute transcript consistency univariate opening round // TODO(#768): Find a better way to do this. See issue for details. @@ -119,10 +118,9 @@ template void ECCVMRecursiveVerifier_::verify_proof(co } // Construct and verify batched opening claim - OpeningClaim batched_univariate_claim = { { evaluation_challenge_x, batched_transcript_eval }, - batched_commitment }; - univariate_opening_verified = - PCS::reduce_verify(key->pcs_verification_key, batched_univariate_claim, transcript); + OpeningClaim batched_opening_claim = { { evaluation_challenge_x, batched_transcript_eval }, + batched_commitment }; + univariate_opening_verified = PCS::reduce_verify(key->pcs_verification_key, batched_opening_claim, transcript); } ASSERT(sumcheck_verified && multivariate_opening_verified && univariate_opening_verified); } diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.hpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.hpp index 8b2011d792f..5dcb13ffacb 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.hpp @@ -25,7 +25,7 @@ template class VerifierCommitmentKey { VerifierCommitmentKey([[maybe_unused]] Builder* builder, size_t num_points, std::shared_ptr>& native_pcs_verification_key) - : first_g1(Commitment(native_pcs_verification_key->get_first_g1())) + : g1_identity(Commitment(native_pcs_verification_key->get_g1_identity())) { auto* native_points = native_pcs_verification_key->get_monomial_points(); @@ -34,11 +34,11 @@ template class VerifierCommitmentKey { } } - Commitment get_first_g1() { return first_g1; } + Commitment get_g1_identity() { return g1_identity; } std::vector get_monomial_points() { return monomial_points; } private: - Commitment first_g1; + Commitment g1_identity; std::vector monomial_points; }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.test.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.test.cpp index 66dc19302ea..b9496e39ca4 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.test.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/verifier_commitment_key.test.cpp @@ -25,7 +25,7 @@ template class RecursiveVeriferCommitmentKeyTest : public testi Builder builder; auto native_vk = std::make_shared(num_points); auto recursive_vk = std::make_shared(&builder, num_points, native_vk); - EXPECT_EQ(native_vk->get_first_g1(), recursive_vk->get_first_g1().get_value()); + EXPECT_EQ(native_vk->get_g1_identity(), recursive_vk->get_g1_identity().get_value()); auto* native_monomial_points = native_vk->get_monomial_points(); auto recursive_monomial_points = recursive_vk->get_monomial_points(); diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/crs_factory.hpp b/barretenberg/cpp/src/barretenberg/srs/factories/crs_factory.hpp index 66e5e55f27d..635bc3c0f5f 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/crs_factory.hpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/crs_factory.hpp @@ -45,7 +45,7 @@ template <> class VerifierCrs { * @brief Returns the first G_1 element from the CRS, used by the Shplonk verifier to compute the final * commtiment. */ - virtual Curve::AffineElement get_first_g1() const = 0; + virtual Curve::AffineElement get_g1_identity() const = 0; }; template <> class VerifierCrs { @@ -62,7 +62,7 @@ template <> class VerifierCrs { * @brief Returns the first G_1 element from the CRS, used by the Shplonk verifier to compute the final * commtiment. */ - virtual Curve::AffineElement get_first_g1() const = 0; + virtual Curve::AffineElement get_g1_identity() const = 0; }; /** diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.cpp b/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.cpp index f082700e32f..967e4e3612a 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.cpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.cpp @@ -18,7 +18,7 @@ FileVerifierCrs::FileVerifierCrs(std::string const& path, const si srs::IO::read_transcript_g2(g2_x, path); bb::pairing::precompute_miller_lines(bb::g2::one, precomputed_g2_lines[0]); bb::pairing::precompute_miller_lines(g2_x, precomputed_g2_lines[1]); - first_g1 = point_buf[0]; + g1_identity = point_buf[0]; } FileVerifierCrs::~FileVerifierCrs() @@ -33,7 +33,7 @@ FileVerifierCrs::FileVerifierCrs(std::string const& path, const monomials_ = scalar_multiplication::point_table_alloc(num_points); srs::IO::read_transcript_g1(monomials_.get(), num_points, path); scalar_multiplication::generate_pippenger_point_table(monomials_.get(), monomials_.get(), num_points); - first_g1 = monomials_[0]; + g1_identity = monomials_[0]; }; curve::Grumpkin::AffineElement* FileVerifierCrs::get_monomial_points() const diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.hpp b/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.hpp index 09dad29a1cb..149d9794098 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.hpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/file_crs_factory.hpp @@ -62,10 +62,10 @@ template <> class FileVerifierCrs : public VerifierCrs class FileVerifierCrs : public VerifierCrs monomials_; }; diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/mem_bn254_crs_factory.cpp b/barretenberg/cpp/src/barretenberg/srs/factories/mem_bn254_crs_factory.cpp index 0c9767328a0..42ce7e2c30e 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/mem_bn254_crs_factory.cpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/mem_bn254_crs_factory.cpp @@ -28,10 +28,10 @@ class MemVerifierCrs : public VerifierCrs { g2::affine_element get_g2x() const { return g2_x; } pairing::miller_lines const* get_precomputed_g2_lines() const { return precomputed_g2_lines; } - g1::affine_element get_first_g1() const { return first_g1x; }; + g1::affine_element get_g1_identity() const { return g1_identityx; }; private: - g1::affine_element first_g1x; + g1::affine_element g1_identityx; g2::affine_element g2_x; pairing::miller_lines* precomputed_g2_lines; }; diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/mem_crs_factory.test.cpp b/barretenberg/cpp/src/barretenberg/srs/factories/mem_crs_factory.test.cpp index 190fa75cef1..df243d73785 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/mem_crs_factory.test.cpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/mem_crs_factory.test.cpp @@ -68,7 +68,7 @@ TEST(reference_string, DISABLED_mem_grumpkin_file_consistency) auto file_verifier_crs = file_crs.get_verifier_crs(); auto mem_verifier_crs = file_crs.get_verifier_crs(); - EXPECT_EQ(mem_verifier_crs->get_first_g1(), file_verifier_crs->get_first_g1()); + EXPECT_EQ(mem_verifier_crs->get_g1_identity(), file_verifier_crs->get_g1_identity()); EXPECT_EQ(memcmp(file_verifier_crs->get_monomial_points(), mem_verifier_crs->get_monomial_points(), sizeof(Grumpkin::AffineElement) * 1024 * 2), diff --git a/barretenberg/cpp/src/barretenberg/srs/factories/mem_grumpkin_crs_factory.cpp b/barretenberg/cpp/src/barretenberg/srs/factories/mem_grumpkin_crs_factory.cpp index 1001c9519a4..bbec0dccf0d 100644 --- a/barretenberg/cpp/src/barretenberg/srs/factories/mem_grumpkin_crs_factory.cpp +++ b/barretenberg/cpp/src/barretenberg/srs/factories/mem_grumpkin_crs_factory.cpp @@ -26,7 +26,7 @@ class MemVerifierCrs : public VerifierCrs { virtual ~MemVerifierCrs() = default; Grumpkin::AffineElement* get_monomial_points() const override { return monomials_.get(); } size_t get_monomial_size() const override { return num_points; } - Grumpkin::AffineElement get_first_g1() const override { return monomials_[0]; }; + Grumpkin::AffineElement get_g1_identity() const override { return monomials_[0]; }; private: size_t num_points; From 88f1e342769ed1c251ea5d07680412bf3d88a3a8 Mon Sep 17 00:00:00 2001 From: maramihali Date: Mon, 24 Jun 2024 09:27:44 +0000 Subject: [PATCH 10/15] Shplonk refactor and ECCVM + Shplonk integration --- .../commitment_schemes/ipa/ipa.test.cpp | 18 ++- .../commitment_schemes/kzg/kzg.test.cpp | 14 +-- .../commitment_schemes/shplonk/shplonk.hpp | 72 ++++++------ .../shplonk/shplonk.test.cpp | 22 +--- .../eccvm/eccvm_composer.test.cpp | 6 +- .../src/barretenberg/eccvm/eccvm_flavor.hpp | 60 ++++------ .../src/barretenberg/eccvm/eccvm_prover.cpp | 85 +++++++------- .../eccvm/eccvm_transcript.test.cpp | 24 ++-- .../src/barretenberg/eccvm/eccvm_verifier.cpp | 101 ++++++++--------- .../eccvm_recursive_verifier.cpp | 104 +++++++++--------- .../benchmarks/bench_sha256/Prover.toml | 1 - .../benchmarks/bench_sha256/src/main.nr | 5 - 12 files changed, 242 insertions(+), 270 deletions(-) delete mode 100644 noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml delete mode 100644 noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp index 8c6a87010b9..738edf40758 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp @@ -295,22 +295,18 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( mle_opening_point, std::move(gemini_polynomials), r_challenge); + std::vector> opening_claims; + for (size_t l = 0; l < log_n; ++l) { std::string label = "Gemini:a_" + std::to_string(l); const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; prover_transcript->send_to_verifier(label, evaluation); + opening_claims.emplace_back(gemini_witnesses[l], gemini_opening_pairs[l]); } + opening_claims.emplace_back(gemini_witnesses[log_n], gemini_opening_pairs[log_n]); - const Fr nu_challenge = prover_transcript->template get_challenge("Shplonk:nu"); - auto batched_quotient_Q = - ShplonkProver::compute_batched_quotient(gemini_opening_pairs, gemini_witnesses, nu_challenge); - prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); - - const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto [polynomial, opening_pair] = ShplonkProver::compute_partially_evaluated_batched_quotient( - gemini_opening_pairs, gemini_witnesses, std::move(batched_quotient_Q), nu_challenge, z_challenge); - - IPA::compute_opening_proof(this->ck(), opening_pair, polynomial, prover_transcript); + const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); + IPA::compute_opening_proof(this->ck(), opening_claim.opening_pair, opening_claim.polynomial, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); @@ -321,7 +317,7 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) verifier_transcript); const auto shplonk_verifier_claim = - ShplonkVerifier::reduce_verification(this->vk(), gemini_verifier_claim, verifier_transcript); + ShplonkVerifier::reduce_verification(this->vk()->get_g1_identity(), gemini_verifier_claim, verifier_transcript); auto result = IPA::reduce_verify(this->vk(), shplonk_verifier_claim, verifier_transcript); EXPECT_EQ(result, true); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp index 2edacb1cfb9..72cf6ac6ab6 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp @@ -130,23 +130,19 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( mle_opening_point, std::move(gemini_polynomials), r_challenge); + std::vector> opening_claims; for (size_t l = 0; l < log_n; ++l) { std::string label = "Gemini:a_" + std::to_string(l); const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; prover_transcript->send_to_verifier(label, evaluation); + opening_claims.emplace_back(gemini_witnesses[l], gemini_opening_pairs[l]); } + opening_claims.emplace_back(gemini_witnesses[log_n], gemini_opening_pairs[log_n]); // Shplonk prover output: // - opening pair: (z_challenge, 0) // - witness: polynomial Q - Q_z - const Fr nu_challenge = prover_transcript->template get_challenge("Shplonk:nu"); - auto batched_quotient_Q = - ShplonkProver::compute_batched_quotient(gemini_opening_pairs, gemini_witnesses, nu_challenge); - prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); - - const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto opening_claim = ShplonkProver::compute_partially_evaluated_batched_quotient( - gemini_opening_pairs, gemini_witnesses, std::move(batched_quotient_Q), nu_challenge, z_challenge); + const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); // KZG prover: // - Adds commitment [W] to transcript @@ -166,7 +162,7 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) // Shplonk verifier claim: commitment [Q] - [Q_z], opening point (z_challenge, 0) const auto shplonk_verifier_claim = - ShplonkVerifier::reduce_verification(this->vk(), gemini_verifier_claim, verifier_transcript); + ShplonkVerifier::reduce_verification(this->vk()->get_g1_identity(), gemini_verifier_claim, verifier_transcript); // KZG verifier: // aggregates inputs [Q] - [Q_z] and [W] into an 'accumulator' (can perform pairing check on result) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index ee05d036d2c..fcde8ed5bf0 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -51,34 +51,32 @@ template class ShplonkProver_ { /** * @brief Compute batched quotient polynomial Q(X) = ∑ⱼ ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( X − xⱼ ) * - * @param opening_pairs list of opening pairs (xⱼ, vⱼ) for a witness polynomial fⱼ(X), s.t. fⱼ(xⱼ) = vⱼ. - * @param witness_polynomials list of polynomials fⱼ(X). - * @param nu + * @param opening_claims list of prover opening claims {fⱼ(X), (xⱼ, vⱼ)} for a witness polynomial fⱼ(X), s.t. fⱼ(xⱼ) + * = vⱼ. + * @param nu batching challenge * @return Polynomial Q(X) */ - static Polynomial compute_batched_quotient(std::span> opening_pairs, - std::span witness_polynomials, - const Fr& nu) + static Polynomial compute_batched_quotient(std::span> opening_claims, const Fr& nu) { // Find n, the maximum size of all polynomials fⱼ(X) + // WORKTODO: the sizes will alwas be the same so do we want this generality? size_t max_poly_size{ 0 }; - for (const auto& poly : witness_polynomials) { - max_poly_size = std::max(max_poly_size, poly.size()); + for (const auto& claim : opening_claims) { + max_poly_size = std::max(max_poly_size, claim.polynomial.size()); } // Q(X) = ∑ⱼ ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( X − xⱼ ) Polynomial Q(max_poly_size); Polynomial tmp(max_poly_size); Fr current_nu = Fr::one(); - for (size_t j = 0; j < opening_pairs.size(); ++j) { - // (Cⱼ, xⱼ, vⱼ) - const auto& [challenge, evaluation] = opening_pairs[j]; + for (const auto& claim : opening_claims) { - // tmp = ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( X − xⱼ ) - tmp = witness_polynomials[j]; - tmp[0] -= evaluation; - tmp.factor_roots(challenge); + // Compute individual claim quotient tmp = ( fⱼ(X) − vⱼ) / ( X − xⱼ ) + tmp = claim.polynomial; + tmp[0] -= claim.opening_pair.evaluation; + tmp.factor_roots(claim.opening_pair.challenge); + // Add the claim quotient to the batched quotient polynomial Q.add_scaled(tmp, current_nu); current_nu *= nu; } @@ -98,19 +96,18 @@ template class ShplonkProver_ { * @return Output{OpeningPair, Polynomial} */ static ProverOpeningClaim compute_partially_evaluated_batched_quotient( - std::span> opening_pairs, - std::span witness_polynomials, - Polynomial&& batched_quotient_Q, + std::span> opening_claims, + Polynomial& batched_quotient_Q, const Fr& nu_challenge, const Fr& z_challenge) { - const size_t num_opening_pairs = opening_pairs.size(); + const size_t num_opening_claims = opening_claims.size(); // {ẑⱼ(r)}ⱼ , where ẑⱼ(r) = 1/zⱼ(r) = 1/(r - xⱼ) std::vector inverse_vanishing_evals; - inverse_vanishing_evals.reserve(num_opening_pairs); - for (const auto& pair : opening_pairs) { - inverse_vanishing_evals.emplace_back(z_challenge - pair.challenge); + inverse_vanishing_evals.reserve(num_opening_claims); + for (const auto& claim : opening_claims) { + inverse_vanishing_evals.emplace_back(z_challenge - claim.opening_pair.challenge); } Fr::batch_invert(inverse_vanishing_evals); @@ -121,24 +118,35 @@ template class ShplonkProver_ { // G₀ = ∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ) Fr current_nu = Fr::one(); Polynomial tmp(G.size()); - for (size_t j = 0; j < num_opening_pairs; ++j) { - // (Cⱼ, xⱼ, vⱼ) - const auto& [challenge, evaluation] = opening_pairs[j]; - + size_t idx = 0; + for (const auto& claim : opening_claims) { // tmp = ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( r − xⱼ ) - tmp = witness_polynomials[j]; - tmp[0] -= evaluation; - Fr scaling_factor = current_nu * inverse_vanishing_evals[j]; // = ρʲ / ( r − xⱼ ) + tmp = claim.polynomial; + tmp[0] -= claim.opening_pair.evaluation; + Fr scaling_factor = current_nu * inverse_vanishing_evals[idx]; // = ρʲ / ( r − xⱼ ) // G -= ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( r − xⱼ ) G.add_scaled(tmp, -scaling_factor); current_nu *= nu_challenge; + idx++; } // Return opening pair (z, 0) and polynomial G(X) = Q(X) - Q_z(X) return { .polynomial = G, .opening_pair = { .challenge = z_challenge, .evaluation = Fr::zero() } }; }; + + static ProverOpeningClaim prove(const std::shared_ptr>& commitment_key, + std::span> opening_claims, + auto& transcript) + { + const Fr nu = transcript->template get_challenge("Shplonk:nu"); + auto batched_quotient = compute_batched_quotient(opening_claims, nu); + auto batched_quotient_commitment = commitment_key->commit(batched_quotient); + transcript->send_to_verifier("Shplonk:Q", batched_quotient_commitment); + const Fr z = transcript->template get_challenge("Shplonk:z"); + return compute_partially_evaluated_batched_quotient(opening_claims, batched_quotient, nu, z); + } }; /** @@ -161,7 +169,7 @@ template class ShplonkVerifier_ { * @param transcript * @return OpeningClaim */ - static OpeningClaim reduce_verification(std::shared_ptr vk, + static OpeningClaim reduce_verification(Commitment g1_identity, std::span> claims, auto& transcript) { @@ -227,7 +235,7 @@ template class ShplonkVerifier_ { scalars.emplace_back(-scaling_factor); } - commitments.emplace_back(GroupElement::one(builder)); + commitments.emplace_back(g1_identity); scalars.emplace_back(G_commitment_constant); // [G] += G₀⋅[1] = [G] + (∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ))⋅[1] @@ -264,7 +272,7 @@ template class ShplonkVerifier_ { } // [G] += G₀⋅[1] = [G] + (∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ))⋅[1] - G_commitment += vk->get_g1_identity() * G_commitment_constant; + G_commitment += g1_identity * G_commitment_constant; } // Return opening pair (z, 0) and commitment [G] diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp index 1bf8de8d8bb..90c187cb542 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp @@ -22,8 +22,6 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) using ShplonkProver = ShplonkProver_; using ShplonkVerifier = ShplonkVerifier_; using Fr = typename TypeParam::ScalarField; - using Polynomial = typename bb::Polynomial; - using OpeningPair = bb::OpeningPair; using OpeningClaim = OpeningClaim; const size_t n = 16; @@ -43,30 +41,22 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) const auto commitment2 = this->commit(poly2); // Aggregate polynomials and their opening pairs - std::vector opening_pairs = { { r1, eval1 }, { r2, eval2 } }; - std::vector polynomials = { poly1.share(), poly2.share() }; + std::vector> prover_opening_claims = { { poly1, { r1, eval1 } }, + { poly2, { r2, eval2 } } }; // Execute the shplonk prover functionality - const Fr nu_challenge = prover_transcript->template get_challenge("Shplonk:nu"); - auto batched_quotient_Q = ShplonkProver::compute_batched_quotient(opening_pairs, polynomials, nu_challenge); - prover_transcript->send_to_verifier("Shplonk:Q", this->ck()->commit(batched_quotient_Q)); - - const Fr z_challenge = prover_transcript->template get_challenge("Shplonk:z"); - const auto opening_claim = ShplonkProver::compute_partially_evaluated_batched_quotient( - opening_pairs, polynomials, std::move(batched_quotient_Q), nu_challenge, z_challenge); - + const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); // An intermediate check to confirm the opening of the shplonk prover witness Q this->verify_opening_pair(opening_claim.opening_pair, opening_claim.polynomial); // Aggregate polynomial commitments and their opening pairs - std::vector opening_claims; - opening_claims.emplace_back(OpeningClaim{ opening_pairs[0], commitment1 }); - opening_claims.emplace_back(OpeningClaim{ opening_pairs[1], commitment2 }); + std::vector opening_claims = { { { r1, eval1 }, commitment1 }, { { r2, eval2 }, commitment2 } }; auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); // Execute the shplonk verifier functionality - const auto verifier_claim = ShplonkVerifier::reduce_verification(this->vk(), opening_claims, verifier_transcript); + const auto verifier_claim = + ShplonkVerifier::reduce_verification(this->vk()->get_g1_identity(), opening_claims, verifier_transcript); this->verify_opening_claim(verifier_claim, opening_claim.polynomial); } diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.test.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.test.cpp index cd2db6b7124..c3ae908ff71 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.test.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.test.cpp @@ -15,7 +15,7 @@ using namespace bb; -class ECCVMComposerTests : public ::testing::Test { +class ECCVMTests : public ::testing::Test { protected: void SetUp() override { srs::init_grumpkin_crs_factory("../srs_db/grumpkin"); }; }; @@ -60,7 +60,7 @@ ECCVMCircuitBuilder generate_circuit(numeric::RNG* engine = nullptr) return builder; } -TEST_F(ECCVMComposerTests, BaseCase) +TEST_F(ECCVMTests, BaseCase) { ECCVMCircuitBuilder builder = generate_circuit(&engine); ECCVMProver prover(builder); @@ -71,7 +71,7 @@ TEST_F(ECCVMComposerTests, BaseCase) ASSERT_TRUE(verified); } -TEST_F(ECCVMComposerTests, EqFails) +TEST_F(ECCVMTests, EqFails) { auto builder = generate_circuit(&engine); // Tamper with the eq op such that the expected value is incorect diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp index 821de070780..4a87e300d09 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp @@ -911,10 +911,6 @@ class ECCVMFlavor { std::array sumcheck_evaluations; std::vector zm_cq_comms; Commitment zm_cq_comm; - uint32_t ipa_poly_degree; - std::vector ipa_l_comms; - std::vector ipa_r_comms; - FF ipa_a_0_eval; Commitment translation_hack_comm; FF translation_eval_op; FF translation_eval_px; @@ -922,10 +918,11 @@ class ECCVMFlavor { FF translation_eval_z1; FF translation_eval_z2; FF hack_eval; - uint32_t translation_ipa_poly_degree; - std::vector translation_ipa_l_comms; - std::vector translation_ipa_r_comms; - FF translation_ipa_a_0_eval; + Commitment shplonk_q_comm; + uint32_t ipa_poly_degree; + std::vector ipa_l_comms; + std::vector ipa_r_comms; + FF ipa_a_0_eval; Transcript() = default; @@ -1129,17 +1126,6 @@ class ECCVMFlavor { } zm_cq_comm = NativeTranscript::template deserialize_from_buffer(proof_data, num_frs_read); - ipa_poly_degree = NativeTranscript::template deserialize_from_buffer(NativeTranscript::proof_data, - num_frs_read); - auto log_poly_degree = static_cast(numeric::get_msb(ipa_poly_degree)); - for (size_t i = 0; i < log_poly_degree; ++i) { - ipa_l_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( - NativeTranscript::proof_data, num_frs_read)); - ipa_r_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( - NativeTranscript::proof_data, num_frs_read)); - } - ipa_a_0_eval = - NativeTranscript::template deserialize_from_buffer(NativeTranscript::proof_data, num_frs_read); translation_hack_comm = NativeTranscript::template deserialize_from_buffer( NativeTranscript::proof_data, num_frs_read); translation_eval_op = @@ -1155,17 +1141,20 @@ class ECCVMFlavor { hack_eval = NativeTranscript::template deserialize_from_buffer(NativeTranscript::proof_data, num_frs_read); - translation_ipa_poly_degree = NativeTranscript::template deserialize_from_buffer( - NativeTranscript::proof_data, num_frs_read); + shplonk_q_comm = NativeTranscript::template deserialize_from_buffer(proof_data, num_frs_read); + ipa_poly_degree = NativeTranscript::template deserialize_from_buffer(NativeTranscript::proof_data, + num_frs_read); + + auto log_poly_degree = static_cast(numeric::get_msb(ipa_poly_degree)); for (size_t i = 0; i < log_poly_degree; ++i) { - translation_ipa_l_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( + ipa_l_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( NativeTranscript::proof_data, num_frs_read)); - translation_ipa_r_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( + ipa_r_comms.emplace_back(NativeTranscript::template deserialize_from_buffer( NativeTranscript::proof_data, num_frs_read)); } - translation_ipa_a_0_eval = + ipa_a_0_eval = NativeTranscript::template deserialize_from_buffer(NativeTranscript::proof_data, num_frs_read); } @@ -1284,15 +1273,6 @@ class ECCVMFlavor { } NativeTranscript::template serialize_to_buffer(zm_cq_comm, NativeTranscript::proof_data); - NativeTranscript::template serialize_to_buffer(ipa_poly_degree, NativeTranscript::proof_data); - - auto log_poly_degree = static_cast(numeric::get_msb(ipa_poly_degree)); - for (size_t i = 0; i < log_poly_degree; ++i) { - NativeTranscript::template serialize_to_buffer(ipa_l_comms[i], NativeTranscript::proof_data); - NativeTranscript::template serialize_to_buffer(ipa_r_comms[i], NativeTranscript::proof_data); - } - - NativeTranscript::template serialize_to_buffer(ipa_a_0_eval, NativeTranscript::proof_data); NativeTranscript::template serialize_to_buffer(translation_hack_comm, NativeTranscript::proof_data); NativeTranscript::template serialize_to_buffer(translation_eval_op, NativeTranscript::proof_data); NativeTranscript::template serialize_to_buffer(translation_eval_px, NativeTranscript::proof_data); @@ -1301,16 +1281,16 @@ class ECCVMFlavor { NativeTranscript::template serialize_to_buffer(translation_eval_z2, NativeTranscript::proof_data); NativeTranscript::template serialize_to_buffer(hack_eval, NativeTranscript::proof_data); - NativeTranscript::template serialize_to_buffer(translation_ipa_poly_degree, NativeTranscript::proof_data); - log_poly_degree = static_cast(numeric::get_msb(translation_ipa_poly_degree)); + NativeTranscript::template serialize_to_buffer(shplonk_q_comm, NativeTranscript::proof_data); + + NativeTranscript::template serialize_to_buffer(ipa_poly_degree, NativeTranscript::proof_data); + auto log_poly_degree = static_cast(numeric::get_msb(ipa_poly_degree)); for (size_t i = 0; i < log_poly_degree; ++i) { - NativeTranscript::template serialize_to_buffer(translation_ipa_l_comms[i], - NativeTranscript::proof_data); - NativeTranscript::template serialize_to_buffer(translation_ipa_r_comms[i], - NativeTranscript::proof_data); + NativeTranscript::template serialize_to_buffer(ipa_l_comms[i], NativeTranscript::proof_data); + NativeTranscript::template serialize_to_buffer(ipa_r_comms[i], NativeTranscript::proof_data); } - serialize_to_buffer(translation_ipa_a_0_eval, proof_data); + serialize_to_buffer(ipa_a_0_eval, proof_data); ASSERT(NativeTranscript::proof_data.size() == old_proof_length); } diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index b752a861a90..59a56382d1c 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -1,6 +1,7 @@ #include "eccvm_prover.hpp" #include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/commitment_schemes/commitment_key.hpp" +#include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" #include "barretenberg/common/ref_array.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" #include "barretenberg/honk/proof_system/permutation_library.hpp" @@ -104,72 +105,74 @@ void ECCVMProver::execute_relation_check_rounds() } /** - * @brief Execute the ZeroMorph protocol to produce an opening claim for the multilinear evaluations produced by - * Sumcheck and then produce an opening proof with a univariate PCS - * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. + * @brief Produce a univariate opening claim from the sumcheck multivariate evalutions and a batched univariate claim + * for the transcript polynomials that serves for the Translator consistency check. Reduce the two opening claims to one + * via Shplonk and produce an opening proof with the univariate PCS (IPA when operation on Grumpkin). + * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled ZeroMorph + * protocol. * - * */ + */ void ECCVMProver::execute_pcs_rounds() { using Curve = typename Flavor::Curve; using ZeroMorph = ZeroMorphProver_; - auto prover_opening_claim = ZeroMorph::prove(key->polynomials.get_unshifted(), - key->polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); - PCS::compute_opening_proof( - commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); -} + using Shplonk = ShplonkProver_; + using OpeningClaim = ProverOpeningClaim; + + // Execute the ZeroMorph protocol to produce a univariate opening claim for the multilinear evaluations produced by + // Sumcheck + auto multivariate_to_univariate_opening_claim = + ZeroMorph::prove(key->polynomials.get_unshifted(), + key->polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + + // Batch open the transcript polynomials as univariates for Translator consistency check. Since IPA cannot + // currently handle polynomials for which the latter half of the coefficients are 0, we hackily + // batch the constant polynomial 1 in with the 5 transcript polynomials. -/** - * @brief Batch open the transcript polynomials as univariates for Translator consistency check - * TODO(#768): Find a better way to do this. See issue for details. - * - * @tparam Flavor - */ -void ECCVMProver::execute_transcript_consistency_univariate_opening_round() -{ - // Since IPA cannot currently handle polynomials for which the latter half of the coefficients are 0, we hackily - // batch the constant polynomial 1 in with the 5 transcript polynomials. See issue #768 for more details. Polynomial hack(key->circuit_size); for (size_t idx = 0; idx < key->circuit_size; idx++) { hack[idx] = 1; } transcript->send_to_verifier("Translation:hack_commitment", commitment_key->commit(hack)); - // Get the challenge at which we evaluate the polynomials as univariates + // Get the challenge at which we evaluate all the polynomials as univariates evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); + // Evaluation the transcript polynomials at the challenge translation_evaluations.op = key->polynomials.transcript_op.evaluate(evaluation_challenge_x); translation_evaluations.Px = key->polynomials.transcript_Px.evaluate(evaluation_challenge_x); translation_evaluations.Py = key->polynomials.transcript_Py.evaluate(evaluation_challenge_x); translation_evaluations.z1 = key->polynomials.transcript_z1.evaluate(evaluation_challenge_x); translation_evaluations.z2 = key->polynomials.transcript_z2.evaluate(evaluation_challenge_x); - // Add the univariate evaluations to the transcript + // Add the univariate evaluations to the transcript so the verifier can reconstruct the batched evaluation transcript->send_to_verifier("Translation:op", translation_evaluations.op); transcript->send_to_verifier("Translation:Px", translation_evaluations.Px); transcript->send_to_verifier("Translation:Py", translation_evaluations.Py); transcript->send_to_verifier("Translation:z1", translation_evaluations.z1); transcript->send_to_verifier("Translation:z2", translation_evaluations.z2); - transcript->send_to_verifier("Translation:hack_evaluation", hack.evaluate(evaluation_challenge_x)); - // Get another challenge for batching the univariate claims + FF hack_evaluation = hack.evaluate(evaluation_challenge_x); + transcript->send_to_verifier("Translation:hack_evaluation", hack_evaluation); + + // Get another challenge for batching the univariates FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); // Collect the polynomials and evaluations to be batched RefArray univariate_polynomials{ key->polynomials.transcript_op, key->polynomials.transcript_Px, key->polynomials.transcript_Py, key->polynomials.transcript_z1, key->polynomials.transcript_z2, hack }; - std::array univariate_evaluations; - for (auto [eval, polynomial] : zip_view(univariate_evaluations, univariate_polynomials)) { - eval = polynomial.evaluate(evaluation_challenge_x); - } + std::array univariate_evaluations{ + translation_evaluations.op, translation_evaluations.Px, translation_evaluations.Py, + translation_evaluations.z1, translation_evaluations.z2, hack_evaluation + }; - // Construct the batched polynomial and batched evaluation + // Construct the batched polynomial and batched evaluation to produce the batched opening claim Polynomial batched_univariate{ key->circuit_size }; FF batched_evaluation{ 0 }; auto batching_scalar = FF(1); @@ -179,12 +182,18 @@ void ECCVMProver::execute_transcript_consistency_univariate_opening_round() batching_scalar *= ipa_batching_challenge; } - // TODO(https://github.com/AztecProtocol/barretenberg/issues/922): We are doing another round of IPA here with - // exactly the same labels and no domain separation so if/when labels are going to matter we are clashing. + std::array opening_claims = { multivariate_to_univariate_opening_claim, + { .polynomial = batched_univariate, + .opening_pair = { evaluation_challenge_x, batched_evaluation } } }; + + // Reduce the opening claims to a single opening claim via Shplonk + const OpeningClaim batched_opening_claim = Shplonk::prove(commitment_key, opening_claims, transcript); + + // Compute the opening proof for the batched opening claim with the univariate PCS PCS::compute_opening_proof( - commitment_key, { evaluation_challenge_x, batched_evaluation }, batched_univariate, transcript); + commitment_key, batched_opening_claim.opening_pair, batched_opening_claim.polynomial, transcript); - // Get another challenge for batching the univariate claims + // Produce another challenge for batching the univariate claims in the translator verifier translation_batching_challenge_v = transcript->template get_challenge("Translation:batching_challenge"); } @@ -210,8 +219,6 @@ HonkProof ECCVMProver::construct_proof() execute_pcs_rounds(); - execute_transcript_consistency_univariate_opening_round(); - return export_proof(); } } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp index 0b2e13a7850..5531786a007 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp @@ -164,20 +164,6 @@ class ECCVMTranscriptTests : public ::testing::Test { manifest_expected.add_challenge(round, "ZM:x", "ZM:z"); round++; - manifest_expected.add_entry(round, "IPA:poly_degree_plus_1", frs_per_uint32); - manifest_expected.add_challenge(round, "IPA:generator_challenge"); - - for (size_t i = 0; i < log_n; ++i) { - round++; - std::string idx = std::to_string(log_n - i - 1); - manifest_expected.add_entry(round, "IPA:L_" + idx, frs_per_G); - manifest_expected.add_entry(round, "IPA:R_" + idx, frs_per_G); - std::string label = "IPA:round_challenge_" + idx; - manifest_expected.add_challenge(round, label); - } - - round++; - manifest_expected.add_entry(round, "IPA:a_0", frs_per_Fr); manifest_expected.add_entry(round, "Translation:hack_commitment", frs_per_G); manifest_expected.add_challenge(round, "Translation:evaluation_challenge_x"); @@ -190,6 +176,13 @@ class ECCVMTranscriptTests : public ::testing::Test { manifest_expected.add_entry(round, "Translation:hack_evaluation", frs_per_Fr); manifest_expected.add_challenge(round, "Translation:ipa_batching_challenge"); + round++; + manifest_expected.add_challenge(round, "Shplonk:nu"); + + round++; + manifest_expected.add_entry(round, "Shplonk:Q", frs_per_G); + manifest_expected.add_challenge(round, "Shplonk:z"); + round++; manifest_expected.add_entry(round, "IPA:poly_degree_plus_1", frs_per_uint32); manifest_expected.add_challenge(round, "IPA:generator_challenge"); @@ -209,6 +202,7 @@ class ECCVMTranscriptTests : public ::testing::Test { return manifest_expected; } + ECCVMCircuitBuilder generate_trace(numeric::RNG* engine = nullptr) { std::shared_ptr op_queue = std::make_shared(); @@ -262,6 +256,8 @@ TEST_F(ECCVMTranscriptTests, ProverManifestConsistency) this->construct_eccvm_honk_manifest(prover.key->circuit_size, prover.sumcheck_output.challenge.size()); auto prover_manifest = prover.transcript->get_manifest(); // Note: a manifest can be printed using manifest.print() + prover_manifest.print(); + manifest_expected.print(); for (size_t round = 0; round < manifest_expected.size(); ++round) { ASSERT_EQ(prover_manifest[round], manifest_expected[round]) << "Prover manifest discrepency in round " << round; } diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp index b6bf6e75187..83f9ddb3690 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp @@ -1,4 +1,5 @@ #include "./eccvm_verifier.hpp" +#include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" @@ -11,6 +12,7 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) { using Curve = typename Flavor::Curve; using ZeroMorph = ZeroMorphVerifier_; + using Shplonk = ShplonkVerifier_; RelationParameters relation_parameters; transcript = std::make_shared(proof); @@ -58,59 +60,58 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) return false; } - auto multivariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - key->pcs_verification_key->get_g1_identity(), - transcript); - bool multivariate_opening_verified = - PCS::reduce_verify(key->pcs_verification_key, multivariate_opening_claim, transcript); + // Reduce + auto multivariate_to_univariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + key->pcs_verification_key->get_g1_identity(), + transcript); // Execute transcript consistency univariate opening round - // TODO(#768): Find a better way to do this. See issue for details. - bool univariate_opening_verified = false; - { - auto hack_commitment = transcript->template receive_from_prover("Translation:hack_commitment"); - - FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - - // Construct arrays of commitments and evaluations to be batched - const size_t NUM_UNIVARIATES = 6; - std::array transcript_commitments = { - commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, - commitments.transcript_z1, commitments.transcript_z2, hack_commitment - }; - std::array transcript_evaluations = { - transcript->template receive_from_prover("Translation:op"), - transcript->template receive_from_prover("Translation:Px"), - transcript->template receive_from_prover("Translation:Py"), - transcript->template receive_from_prover("Translation:z1"), - transcript->template receive_from_prover("Translation:z2"), - transcript->template receive_from_prover("Translation:hack_evaluation") - }; - - // Get another challenge for batching the univariate claims - FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); - - // Construct batched commitment and batched evaluation - auto batched_commitment = transcript_commitments[0]; - auto batched_transcript_eval = transcript_evaluations[0]; - auto batching_scalar = ipa_batching_challenge; - for (size_t idx = 1; idx < transcript_commitments.size(); ++idx) { - batched_commitment = batched_commitment + transcript_commitments[idx] * batching_scalar; - batched_transcript_eval += batching_scalar * transcript_evaluations[idx]; - batching_scalar *= ipa_batching_challenge; - } - - // Construct and verify batched opening claim - OpeningClaim batched_univariate_claim = { { evaluation_challenge_x, batched_transcript_eval }, - batched_commitment }; - univariate_opening_verified = - PCS::reduce_verify(key->pcs_verification_key, batched_univariate_claim, transcript); + auto hack_commitment = transcript->template receive_from_prover("Translation:hack_commitment"); + + FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); + + // Construct arrays of commitments and evaluations to be batched, with the evaluations received from the prover + const size_t NUM_UNIVARIATES = 6; + std::array transcript_commitments = { + commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, + commitments.transcript_z1, commitments.transcript_z2, hack_commitment + }; + std::array transcript_evaluations = { + transcript->template receive_from_prover("Translation:op"), + transcript->template receive_from_prover("Translation:Px"), + transcript->template receive_from_prover("Translation:Py"), + transcript->template receive_from_prover("Translation:z1"), + transcript->template receive_from_prover("Translation:z2"), + transcript->template receive_from_prover("Translation:hack_evaluation") + }; + + // Get another challenge for batching the univariate claims + FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); + + // Construct the batched commitment and batched evaluation + auto batched_commitment = transcript_commitments[0]; + auto batched_transcript_eval = transcript_evaluations[0]; + auto batching_scalar = ipa_batching_challenge; + for (size_t idx = 1; idx < transcript_commitments.size(); ++idx) { + batched_commitment = batched_commitment + transcript_commitments[idx] * batching_scalar; + batched_transcript_eval += batching_scalar * transcript_evaluations[idx]; + batching_scalar *= ipa_batching_challenge; } - return sumcheck_verified.value() && multivariate_opening_verified && univariate_opening_verified; + std::array, 2> opening_claims = { multivariate_to_univariate_opening_claim, + { { evaluation_challenge_x, batched_transcript_eval }, + batched_commitment } }; + + // Construct and verify batched opening claim + auto batched_opening_claim = + Shplonk::reduce_verification(key->pcs_verification_key->get_g1_identity(), opening_claims, transcript); + + bool batched_opening_verified = PCS::reduce_verify(key->pcs_verification_key, batched_opening_claim, transcript); + + return sumcheck_verified.value() && batched_opening_verified; } } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index e2598508e2b..1c65973c94c 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -1,4 +1,5 @@ #include "./eccvm_recursive_verifier.hpp" +#include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" #include "barretenberg/transcript/transcript.hpp" @@ -20,6 +21,8 @@ template void ECCVMRecursiveVerifier_::verify_proof(co { using Curve = typename Flavor::Curve; using ZeroMorph = ZeroMorphVerifier_; + using Shplonk = ShplonkVerifier_; + RelationParameters relation_parameters; StdlibProof stdlib_proof = bb::convert_proof_to_witness(builder, proof); @@ -72,57 +75,58 @@ template void ECCVMRecursiveVerifier_::verify_proof(co auto [multivariate_challenge, claimed_evaluations, sumcheck_verified] = sumcheck.verify(relation_parameters, alpha, gate_challenges); - auto opening_claim = ZeroMorph::verify(commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - key->pcs_verification_key->get_g1_identity(), - transcript); - auto multivariate_opening_verified = PCS::reduce_verify(key->pcs_verification_key, opening_claim, transcript); - - // Execute transcript consistency univariate opening round - // TODO(#768): Find a better way to do this. See issue for details. - bool univariate_opening_verified = false; - { - auto hack_commitment = transcript->template receive_from_prover("Translation:hack_commitment"); - - FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - - // Construct arrays of commitments and evaluations to be batched - const size_t NUM_UNIVARIATES = 6; - std::array transcript_commitments = { - commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, - commitments.transcript_z1, commitments.transcript_z2, hack_commitment - }; - std::array transcript_evaluations = { - transcript->template receive_from_prover("Translation:op"), - transcript->template receive_from_prover("Translation:Px"), - transcript->template receive_from_prover("Translation:Py"), - transcript->template receive_from_prover("Translation:z1"), - transcript->template receive_from_prover("Translation:z2"), - transcript->template receive_from_prover("Translation:hack_evaluation") - }; - - // Get another challenge for batching the univariate claims - FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); - - // Construct batched commitment and batched evaluation - auto batched_commitment = transcript_commitments[0]; - auto batched_transcript_eval = transcript_evaluations[0]; - auto batching_scalar = ipa_batching_challenge; - for (size_t idx = 1; idx < transcript_commitments.size(); ++idx) { - batched_commitment = batched_commitment + transcript_commitments[idx] * batching_scalar; - batched_transcript_eval += batching_scalar * transcript_evaluations[idx]; - batching_scalar *= ipa_batching_challenge; - } - - // Construct and verify batched opening claim - OpeningClaim batched_opening_claim = { { evaluation_challenge_x, batched_transcript_eval }, - batched_commitment }; - univariate_opening_verified = PCS::reduce_verify(key->pcs_verification_key, batched_opening_claim, transcript); + auto multivariate_to_univariate_opening_claim = ZeroMorph::verify(commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + key->pcs_verification_key->get_g1_identity(), + transcript); + auto hack_commitment = transcript->template receive_from_prover("Translation:hack_commitment"); + + FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); + + // Construct arrays of commitments and evaluations to be batched + std::vector transcript_commitments = { commitments.transcript_op, commitments.transcript_Px, + commitments.transcript_Py, commitments.transcript_z1, + commitments.transcript_z2, hack_commitment }; + + std::vector transcript_evaluations = { transcript->template receive_from_prover("Translation:op"), + transcript->template receive_from_prover("Translation:Px"), + transcript->template receive_from_prover("Translation:Py"), + transcript->template receive_from_prover("Translation:z1"), + transcript->template receive_from_prover("Translation:z2"), + transcript->template receive_from_prover( + "Translation:hack_evaluation") }; + + // Get another challenge for batching the univariate claims + FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); + + // Construct batched commitment and batched evaluation + auto batched_transcript_eval = transcript_evaluations[0]; + auto batching_scalar = ipa_batching_challenge; + + std::vector batching_challenges = { FF::one() }; + for (size_t idx = 1; idx < transcript_commitments.size(); ++idx) { + batched_transcript_eval += batching_scalar * transcript_evaluations[idx]; + batching_challenges.emplace_back(batching_scalar); + batching_scalar *= ipa_batching_challenge; } - ASSERT(sumcheck_verified && multivariate_opening_verified && univariate_opening_verified); + auto batched_commitment = Commitment::batch_mul(transcript_commitments, batching_challenges); + + // Construct and verify the batched opening claim + OpeningClaim batched_univariate_claim = { { evaluation_challenge_x, batched_transcript_eval }, + batched_commitment }; + + std::array, 2> opening_claims = { multivariate_to_univariate_opening_claim, + batched_univariate_claim }; + + auto batched_opening_claim = + Shplonk::reduce_verification(key->pcs_verification_key->get_g1_identity(), opening_claims, transcript); + + auto batched_opening_verified = PCS::reduce_verify(key->pcs_verification_key, batched_opening_claim, transcript); + + ASSERT(sumcheck_verified && batched_opening_verified); } template class ECCVMRecursiveVerifier_>; diff --git a/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml b/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml deleted file mode 100644 index 66779dea9d7..00000000000 --- a/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -input = [1,2] diff --git a/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr b/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr deleted file mode 100644 index fc873fb4afb..00000000000 --- a/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -use dep::std; - -fn main(input: [u8; 2]) -> pub [u8; 32] { - std::hash::sha256(input) -} \ No newline at end of file From 704436e629f7d1ff650bab19b5d40c3f8b102465 Mon Sep 17 00:00:00 2001 From: maramihali Date: Mon, 24 Jun 2024 11:41:26 +0000 Subject: [PATCH 11/15] remove stale files and restore deleted files --- .../benchmarks/bench_sha256/Prover.toml | 1 + .../benchmarks/bench_sha256/src/main.nr | 5 + yarn-project/end-to-end/src/e2e_prover/file | 1774 ----------------- .../end-to-end/src/e2e_prover/full_test | 0 yarn-project/end-to-end/src/e2e_prover/output | 0 5 files changed, 6 insertions(+), 1774 deletions(-) create mode 100644 noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml create mode 100644 noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr delete mode 100644 yarn-project/end-to-end/src/e2e_prover/file delete mode 100644 yarn-project/end-to-end/src/e2e_prover/full_test delete mode 100644 yarn-project/end-to-end/src/e2e_prover/output diff --git a/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml b/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml new file mode 100644 index 00000000000..66779dea9d7 --- /dev/null +++ b/noir/noir-repo/test_programs/benchmarks/bench_sha256/Prover.toml @@ -0,0 +1 @@ +input = [1,2] diff --git a/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr b/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr new file mode 100644 index 00000000000..fc873fb4afb --- /dev/null +++ b/noir/noir-repo/test_programs/benchmarks/bench_sha256/src/main.nr @@ -0,0 +1,5 @@ +use dep::std; + +fn main(input: [u8; 2]) -> pub [u8; 32] { + std::hash::sha256(input) +} \ No newline at end of file diff --git a/yarn-project/end-to-end/src/e2e_prover/file b/yarn-project/end-to-end/src/e2e_prover/file deleted file mode 100644 index 1897d069d18..00000000000 --- a/yarn-project/end-to-end/src/e2e_prover/file +++ /dev/null @@ -1,1774 +0,0 @@ - aztec:randomness_singleton VERBOSE Using true randomness +0ms - aztec:snapshot_manager:full_prover_integration/full_prover WARN No data path given, will not persist any snapshots. +0ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Initializing state... +2ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x1214bb6ae7ac56b18962dc64f67b06920afacb194443464b4a87f8e12079cd2b privateFunctionRoot=0x1af69ef2f0674a521bcc78528b1a79600d00630b15abfe9b65054f670c581401 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x27ddfc0d24e907815b646ad54369f9d21af18a04ef974a1ff2b2f7f076d2fefa +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x04507e155d76bc5ff98f32c3d300bf35060e0d7b56d64000128372b7810b1b32 privateFunctionRoot=0x1af69ef2f0674a521bcc78528b1a79600d00630b15abfe9b65054f670c581401 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x1c6a1d2392b91620f6fd3cc99f53f02099dbc6fcb8580cf7eb2e75cc113a9040 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x1037e22363eef87b679f7c3715a1fefc8cb4ceef840a8ddadee967c06aa11c2b privateFunctionRoot=0x124459e2ad30ba38047e747c6be74188b20a8f7785c76c3fdf77a1d96805e02e unconstrainedFunctionRoot=0x2633a12f4f0aa49c888fa78c5b39c71fcf6429238e57349a1f1b76b21d7f8078 metadataHash=0x19ed4a1b5f639769757ebad8c5b46956ac2f8b62ea4b4d2aa4aad1c4ab963d44 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0c1f640066713e534ae1b548840f3882efe58df2b246deb17a5e959545e8e9a2 privateFunctionRoot=0x177da50529f66c051392d4eb101a082473b3e3704f855065f209918978b1c42d unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x29b235823e83758a5e0ade90ccf05ae046703bdc1ec377b44b8cf853484bad6a +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0c1f640066713e534ae1b548840f3882efe58df2b246deb17a5e959545e8e9a2 privateFunctionRoot=0x177da50529f66c051392d4eb101a082473b3e3704f855065f209918978b1c42d unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x29b235823e83758a5e0ade90ccf05ae046703bdc1ec377b44b8cf853484bad6a +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0c1f640066713e534ae1b548840f3882efe58df2b246deb17a5e959545e8e9a2 privateFunctionRoot=0x177da50529f66c051392d4eb101a082473b3e3704f855065f209918978b1c42d unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x29b235823e83758a5e0ade90ccf05ae046703bdc1ec377b44b8cf853484bad6a +0ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Starting anvil... +93ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Deploying L1 contracts... +126ms - aztec:snapshot_manager:full_prover_integration/full_prover Deploying contracts... +102ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Deployed Registry at 0x5fbdb2315678afecb367f032d93f642f64180aa3 +77ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Deployed AvailabilityOracle at 0xe7f1725e7734ce288f8367e1bb143e90bb3f0512 +27ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Deployed Gas Token at 0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0 +14ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Deployed Rollup at 0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 +27ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Inbox available at 0x6d544390eb535d61e196c87d6b9c80dcd8628acd +4ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Outbox available at 0xb1ede3f5ac8654124cb5124adf0fd3885cbdd1f7 +2ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Deployed Gas Portal at 0x5fc8d32690cc91d4c39d9d3abcbd16989f875707 +26ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Initialized Gas Portal at 0x5fc8d32690cc91d4c39d9d3abcbd16989f875707 to bridge between L1 0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0 to L2 0x06fc7badd50bb8ee32439b52e8874b5a16ddd2aa1d5647ec46b2a0f51356f889 +14ms - aztec:snapshot_manager:full_prover_integration/full_prover INFO Funded rollup contract with gas tokens +15ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Using native ACVM binary at ../../noir/noir-repo/target/release/acvm with working directory /tmp/c35c28f2/acvm +1ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Creating and synching an aztec node... +1ms - aztec:node:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:archiver INFO Performing initial chain sync... +0ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=10.057469844818115 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=16 hashDuration=0.601792 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:p2p Moved to state RUNNING +0ms - aztec:world_state Moved to state RUNNING +0ms - aztec:world_state Next block 1 already beyond latest block at 0 +0ms - aztec:world_state INFO Started block downloader from block 1 +0ms - aztec:p2p VERBOSE Next block 1 already beyond latest block at 0 +0ms - aztec:p2p VERBOSE Started block downloader from block 1 +0ms - aztec:node INFO Using native ACVM at ../../noir/noir-repo/target/release/acvm and working directory /tmp/c35c28f2/acvm +0ms - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +0ms - aztec:prover-client:prover-pool:queue INFO Proving queue started +0ms - aztec:prover-client:prover-agent INFO Agent started with concurrency=1 +0ms - aztec:sequencer VERBOSE Initialized sequencer with 1-32 txs per block. +0ms - aztec:sequencer INFO Sequencer started +0ms - aztec:node INFO Started Aztec Node against chain 0x7a69 with contracts - - aztec:node Rollup: 0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 - aztec:node Registry: 0x5fbdb2315678afecb367f032d93f642f64180aa3 - aztec:node Inbox: 0x6d544390eb535d61e196c87d6b9c80dcd8628acd - aztec:node Outbox: 0xb1ede3f5ac8654124cb5124adf0fd3885cbdd1f7 - aztec:node Availability Oracle: 0xe7f1725e7734ce288f8367e1bb143e90bb3f0512 +6ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Creating pxe... +619ms - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +29ms - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:pxe_service INFO Added contract ContractClassRegisterer at 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:pxe_service INFO Added contract ContractInstanceDeployer at 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934 +16ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:pxe_service INFO Added contract MultiCallEntrypoint at 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b +22ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:pxe_service INFO Added contract GasToken at 0x06fc7badd50bb8ee32439b52e8874b5a16ddd2aa1d5647ec46b2a0f51356f889 +28ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:pxe_service INFO Added contract KeyRegistry at 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 +11ms - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +195ms - aztec:node Using committed db for block latest, world state synced upto 0 +220ms - aztec:pxe_synchronizer INFO Initial sync complete +0ms - aztec:pxe_synchronizer Started loop +1ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:pxe_service INFO Started PXE connected to chain 31337 version 1 +64ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Deploying key registry... +282ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:js:contract_interaction Sent deployment tx of KeyRegistry contract with deployment address 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 +0ms - aztec:pxe_service INFO Added contract KeyRegistry at 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 +32ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:js:contract_interaction INFO Creating request for registering contract class 0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46 as part of deployment for 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 +10ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:pxe_service Executing simulator... +349ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d(MultiCallEntrypoint:entrypoint) +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +0ms - aztec:simulator:client_execution_context Calling private function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x98bc6593 from 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593(ContractClassRegisterer:register) +0ms - aztec:simulator:acvm Oracle callback popCapsule +0ms - aztec:simulator:acvm Oracle callback debugLog +191ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractClassRegistered: 0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46,0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9,0x15d28cad4c0736decea8997cb324cf0a0e0602f4d74472cd977bce2c8dd9923f,0x0000000000000000000000000000000000000000000000000000000000000005 +0ms - aztec:simulator:acvm Oracle callback emitContractClassUnencryptedLog +35ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log from ContractClassRegisterer: "UnencryptedL2Log(contractAddress: 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417..." +74ms - aztec:simulator:secret_execution Ran external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 circuitName=app-circuit duration=435.2373013496399 eventName=circuit-witness-generation inputSize=1344 outputSize=9944 appCircuitName=ContractClassRegisterer:register +439ms - aztec:simulator:secret_execution Returning from call to 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +655ms - aztec:simulator:client_execution_context Calling private function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x7ebd3690 from 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b +655ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690(ContractInstanceDeployer:deploy) +0ms - aztec:simulator:acvm Oracle callback debugLog +0ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractInstanceDeployed: 0x0000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631,0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351,0x0000000000000000000000000000000000000000000000000000000000000001,0x0000000000000000000000000000000000000000000000000000000000000001,0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46,0x0000000000000000000000000000000000000000000000000000000000000000,0x0000000000000000000000000000000000000000000000000000000000000000,0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:simulator:acvm Oracle callback emitUnencryptedLog +4ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log: "UnencryptedL2Log(contractAddress: 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934..." +4ms - aztec:simulator:secret_execution Ran external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 circuitName=app-circuit duration=39.8083610534668 eventName=circuit-witness-generation inputSize=1408 outputSize=9944 appCircuitName=ContractInstanceDeployer:deploy +42ms - aztec:simulator:secret_execution Returning from call to 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 +0ms - aztec:simulator:secret_execution Ran external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d circuitName=app-circuit duration=1272.0701427459717 eventName=circuit-witness-generation inputSize=1920 outputSize=9944 appCircuitName=MultiCallEntrypoint:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d +1ms - aztec:pxe_service VERBOSE Simulation completed for 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=165.87734413146973 inputSize=29786 outputSize=65142 +0ms - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=413.125253200531 inputSize=110646 outputSize=65142 +436ms - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=394.6250042915344 inputSize=110646 outputSize=65142 +416ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=355.4185218811035 inputSize=105713 outputSize=9907 +366ms - aztec:node INFO Simulating tx 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +3s - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +3s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000001 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000001 timestamp=0x0000000000000000000000000000000000000000000000000000000000000000 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +0ms - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +9ms - aztec:node Simulated tx 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 succeeds +141ms - aztec:pxe_service INFO Sending transaction 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +2s - aztec:node INFO Received tx 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +1ms - aztec:tx_pool INFO Adding tx with id 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 eventName=tx-added-to-pool txHash=0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 noteEncryptedLogCount=0 encryptedLogCount=0 unencryptedLogCount=2 noteEncryptedLogSize=8 encryptedLogSize=8 unencryptedLogSize=640512 newCommitmentCount=0 newNullifierCount=3 proofSize=42 size=650697 feePaymentMethod=none classRegisteredCount=1 +0ms - aztec:archiver:block_store VERBOSE Clamping start block 0 to 1 +995ms - aztec:sequencer Retrieved 1 txs from P2P pool +4s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000001 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000001 timestamp=0x0000000000000000000000000000000000000000000000000000000000000000 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.26680898666381836 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.30601024627685547 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.33190298080444336 operation=get-nullifier-index +0ms - aztec:sequencer:contracts-data-source Adding class 0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46 to public execution contract cache +0ms - aztec:sequencer:contracts-data-source Adding instance 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 with class 0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46 to public execution contract cache +2ms - aztec:sequencer:tx_validator:tx_phases Tx 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 does not contain enqueued public functions. Skipping phases validation. +0ms - aztec:sequencer INFO Building block 1 with 1 transactions +154ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 1 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +0ms - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=16.114116191864014 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=31 hashDuration=0.5044397419354839 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.13423967361450195 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.28455018997192383 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.31574058532714844 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +58ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=49.99255132675171 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.513818947368421 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=53.63053035736084 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=103 hashDuration=0.49660147572815533 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=82.92344236373901 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=143 hashDuration=0.5235253706293707 hashInputsCount=6 hashInputsDuration=0.7288533333333334 +0ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 0 +196ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +37ms - aztec:prover-client:prover-pool:queue Adding id=257c6449 type=BASE_PARITY proving job to queue depth=0 +5s - aztec:prover-client:prover-agent Picked up proving job id=257c6449 type=BASE_PARITY +5s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.910583972930908 +0ms - aztec:prover-client:prover-agent Processed proving job id=257c6449 type=BASE_PARITY duration=6.683639049530029ms +7ms - aztec:prover-client:prover-pool:queue Adding id=bf767ac6 type=BASE_PARITY proving job to queue depth=0 +8ms - aztec:prover-client:prover-pool:queue Adding id=0f04c8e9 type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=0f510b88 type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=950e43ff type=BASE_ROLLUP proving job to queue depth=3 +0ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +16ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=48.1961989402771 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=96 hashDuration=0.4906526666666667 hashInputsCount=0 hashInputsDuration=NaN +247ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=53.634830951690674 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=105 hashDuration=0.4952246857142857 hashInputsCount=0 hashInputsDuration=NaN +246ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=41.14600372314453 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=85 hashDuration=0.46934437647058824 hashInputsCount=0 hashInputsDuration=NaN +204ms - aztec:prover:proving-orchestrator Enqueuing deferred proving for padding txs to enqueue 1 paddings +151ms - aztec:prover-client:prover-pool:queue Adding id=eade06c8 type=PRIVATE_KERNEL_EMPTY proving job to queue depth=4 +156ms - aztec:prover-client:prover-agent Picked up proving job id=bf767ac6 type=BASE_PARITY +157ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.495136260986328 +163ms - aztec:prover-client:prover-agent Processed proving job id=bf767ac6 type=BASE_PARITY duration=6.399849891662598ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=0f04c8e9 type=BASE_PARITY +98ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.573282241821289 +106ms - aztec:prover-client:prover-agent Processed proving job id=0f04c8e9 type=BASE_PARITY duration=6.29210090637207ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=0f510b88 type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.525568008422852 +106ms - aztec:prover-client:prover-agent Processed proving job id=0f510b88 type=BASE_PARITY duration=6.474103927612305ms +7ms - aztec:prover-client:prover-pool:queue Adding id=fd38c347 type=ROOT_PARITY proving job to queue depth=2 +218ms - aztec:prover-client:prover-agent Picked up proving job id=950e43ff type=BASE_ROLLUP +100ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-155wf1 --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +0ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=359.35707330703735 +470ms - aztec:prover-client:prover-agent Processed proving job id=950e43ff type=BASE_ROLLUP duration=334.0017828941345ms +372ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0d0ee9cb9290c7a515e06d3b905c3cb9dc7aa4cc822b8536cc2b66392f14dda3 +690ms - aztec:prover-client:prover-agent Picked up proving job id=eade06c8 type=PRIVATE_KERNEL_EMPTY +68ms - aztec:prover-client:prover-agent Processed proving job id=eade06c8 type=PRIVATE_KERNEL_EMPTY duration=35.56637001037598ms +40ms - aztec:prover:proving-orchestrator Completed proof for padding tx, now enqueuing 1 padding txs +108ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +1ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=b28e9c6a type=BASE_ROLLUP proving job to queue depth=1 +581ms - aztec:prover-client:prover-agent Picked up proving job id=fd38c347 type=ROOT_PARITY +92ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=108.51530694961548 +312ms - aztec:prover-client:prover-agent Processed proving job id=fd38c347 type=ROOT_PARITY duration=98.65904140472412ms +110ms - aztec:prover:proving-orchestrator Not ready for root rollup +202ms - aztec:prover-client:prover-agent Picked up proving job id=b28e9c6a type=BASE_ROLLUP +81ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-pRTLgV --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +755ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=314.1569209098816 +400ms - aztec:prover-client:prover-agent Processed proving job id=b28e9c6a type=BASE_ROLLUP duration=289.9355888366699ms +320ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +400ms - aztec:prover-client:prover-pool:queue Adding id=6c47b2a8 type=ROOT_ROLLUP proving job to queue depth=0 +603ms - aztec:prover-client:prover-agent Picked up proving job id=6c47b2a8 type=ROOT_ROLLUP +10ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=153.17560338974 +166ms - aztec:prover-client:prover-agent Processed proving job id=6c47b2a8 type=ROOT_ROLLUP duration=145.44269180297852ms +155ms - aztec:prover:proving-orchestrator Updating and validating root trees +170ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=10.178109169006348 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=17 hashDuration=0.5809317647058824 hashInputsCount=0 hashInputsDuration=NaN +7s - aztec:prover:proving-orchestrator INFO Successfully proven block 1! +54ms - aztec:sequencer VERBOSE Assembled block 1 eventName=l2-block-built duration=2247.3060960769653 publicProcessDuration=274.584135055542 rollupCircuitsDuration=2089.7706236839294 txCount=1 blockNumber=1 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640512 +2s - aztec:sequencer:publisher INFO TxEffects size=640761 bytes +0ms - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x004976fe69443f1de648d1ea59f3096c41d9cdbd3453ccc39a0e07a91d25fa8b +678ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1344888747 gasUsed=634691 transactionHash=0x7b7e61509ad693df67b23a50468a6e23a116612aecf4c80453c399cb933a9e8d calldataGas=9404 calldataSize=1412 txCount=1 blockNumber=1 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640512 eventName=rollup-published-to-l1 +31ms - aztec:sequencer INFO Submitted rollup block 1 with 1 transactions +752ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 1 and 10. +9s - aztec:archiver VERBOSE Registering contract class 0x1afb9c08e7dcf4658982e5144b970d2603a497fcc566a52761d8243fd61a4b46 +66ms - aztec:archiver VERBOSE Storing contract instance at 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 +2ms - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.33649301528930664 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.025578 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 1 is ours, committing world state +0ms - aztec:p2p Synched to block 1 +8s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 256 root 0x0e78e90f2a2a986255e5433f72e9624cc31a18a5c47ed597a5fa0ea4333ee2c4 +29ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 128 root 0x16642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 256 root 0x021a6cc64c830b4914600d0296c3968c5d28c1b00c5c4b0b33d1f39d948edbd4 +0ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 16 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 2 root 0x04ab15fad927ef0c4c21bb75b1ac1bc1ca5725698b2b42550baabf3a58c398c9 +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=93.88243293762207 isBlockOurs=true txCount=1 blockNumber=1 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640512 +8s - aztec:pxe_synchronizer Forwarding 1 blocks to 0 note processors +9s - aztec:js:deploy_sent_tx INFO Contract 0x04c2d010f88e8c238882fbbcbce5c81fdc1dc8ece85e8dbf3f602b4d81ec0351 successfully deployed. +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Applying state transition for 2_accounts... +9s - aztec:full_prover_test:full_prover VERBOSE Simulating account deployment... +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:pxe_service INFO Registered account 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +5s - aztec:pxe_service Registered account - aztec:pxe_service  Address: 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 - aztec:pxe_service Master Nullifier Public Key: 0x0a02716031b489c7891bfe7ba8a388be5e1bafa5858811d5df1d46c791ca8fd10b70b3ecad2f4aa8444a919d1a810b0c05d79f239058a7879f833d72bcb4d5ab - aztec:pxe_service Master Incoming Viewing Public Key: 0x1eb5727cb8dd1c49573f4429664241a0e2593aeed230157197c7216efdfebf64171ebb44aaf91f5255ee7f5127687c420c2c36cc28fafad4b5032d9276e0f087 - aztec:pxe_service Master Outgoing Viewing Public Key: 0x0f30b62226f74a0cf9040e104af18b52c9374b407086902b9cc073533a2b18c11b2cf9b024a5e1b0c1b914a8437f537b3fd2bad7f5f1cf660c2280ab8b9dfb13 - aztec:pxe_service Master Tagging Public Key: 0x05e1bcf25b870744099abbcaae21043f84e3e8ff96686d0756318ce9f6ccc4ea0d2a3b20397a6b5077c42c46a6160c77634c5bb831e866cf155940534b9eea4b - aztec:pxe_service Partial Address: 0x2c9adf098ac3cc11658c75017e0f97360baaf65fc3845cd258aa1428fccaec06 - aztec:pxe_service  +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:sequencer Block has been synced +2s - aztec:pxe_service INFO Added contract SchnorrAccount at 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +486ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +234ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d(MultiCallEntrypoint:entrypoint) +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +0ms - aztec:simulator:client_execution_context Calling private function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0xaf9f8c44 from 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0xaf9f8c44(SchnorrAccount:constructor) +0ms - aztec:simulator:acvm Oracle callback getContractInstance +0ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +7ms - aztec:node Using committed db for block 1, world state synced upto 1 +7s - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +14ms - aztec:node Using committed db for block 1, world state synced upto 1 +64ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +13ms - aztec:node Using committed db for block 1, world state synced upto 1 +63ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +49ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +50ms - aztec:simulator:acvm Oracle callback notifyCreatedNote +13ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +1ms - aztec:simulator:acvm Oracle callback getRandomField +3ms - aztec:simulator:acvm Oracle callback emitEncryptedNoteLog +13ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0xaf9f8c44 circuitName=app-circuit duration=1417.5458388328552 eventName=circuit-witness-generation inputSize=1312 outputSize=9944 appCircuitName=SchnorrAccount:constructor +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0xaf9f8c44 +0ms - aztec:simulator:secret_execution Ran external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d circuitName=app-circuit duration=2370.6473321914673 eventName=circuit-witness-generation inputSize=1920 outputSize=9944 appCircuitName=MultiCallEntrypoint:entrypoint +2s - aztec:simulator:secret_execution Returning from call to 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:entrypoint +2s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=134.83319282531738 inputSize=29786 outputSize=65142 +9s - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=404.2142119407654 inputSize=110646 outputSize=65142 +426ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=544.0181879997253 inputSize=129905 outputSize=65142 +557ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=355.7629156112671 inputSize=105713 outputSize=9907 +365ms - aztec:node INFO Simulating tx 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +2s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000002 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000002 timestamp=0x000000000000000000000000000000000000000000000000000000006672b76f coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +10s - aztec:node Simulated tx 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 succeeds +98ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:pxe_synchronizer Catching up note processor 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 by processing 1 blocks +5s - aztec:note_processor Synched block 1 +0ms - aztec:pxe_synchronizer Note processor for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 has caught up eventName=note-processor-caught-up account=0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 duration=4734.5769739151 dbSize=448 seen=0 decryptedIncoming=0 decryptedOutgoing=0 deferred=0 failed=0 blocks=1 txs=1 +6ms - aztec:pxe_service INFO Registered account 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 +2s - aztec:pxe_service Registered account - aztec:pxe_service  Address: 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 - aztec:pxe_service Master Nullifier Public Key: 0x247e44e7610a81bd345492e9900ab9cb74c1e4be3319ff2f003a2076c9670f752c9c11735985896eb99f7e5ec05e34960b5b3bc35254ee31c6e75bcd0a1a92ba - aztec:pxe_service Master Incoming Viewing Public Key: 0x244cec02d62cdf213eea4d0b815b858f9db2f275cbf890cc59e609ff06e97a1d019899abe62ba4fa3e4686fd09c53111909c8a75340004dd3c65f8fbaa8feaad - aztec:pxe_service Master Outgoing Viewing Public Key: 0x0f3578f83b2cecf824356aa43ef8be1318a09175e1903e95478dde2ca5dec2321d8ce6a4286cb249ea023713514b3cfffe42c0992679b2dbadf1551f68e33972 - aztec:pxe_service Master Tagging Public Key: 0x13178d76243ffa723547fcfba344f89e5de726fca9fd0aeed1149fa5d5cc62700f5d7fe1ef1d8ac1abde67c4fb867fce2d9f07aabbd4bd635244aeb228fe286c - aztec:pxe_service Partial Address: 0x0f1e35f8ceb09fba4ebd058c16c6abf491fd088ef735d99801500b2c5dedb572 - aztec:pxe_service  +1ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:pxe_service INFO Added contract SchnorrAccount at 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 +425ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +200ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d(MultiCallEntrypoint:entrypoint) +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +0ms - aztec:simulator:client_execution_context Calling private function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0xaf9f8c44 from 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b +0ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8:0xaf9f8c44(SchnorrAccount:constructor) +0ms - aztec:simulator:acvm Oracle callback getContractInstance +0ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +8ms - aztec:node Using committed db for block 1, world state synced upto 1 +1s - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +27ms - aztec:node Using committed db for block 1, world state synced upto 1 +77ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +13ms - aztec:node Using committed db for block 1, world state synced upto 1 +63ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +50ms - aztec:node Using committed db for block 1, world state synced upto 1 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +50ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 1, world state synced upto 1 +52ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +51ms - aztec:simulator:acvm Oracle callback notifyCreatedNote +13ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +1ms - aztec:simulator:acvm Oracle callback getRandomField +3ms - aztec:simulator:acvm Oracle callback emitEncryptedNoteLog +12ms - aztec:simulator:secret_execution Ran external function 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8:0xaf9f8c44 circuitName=app-circuit duration=1442.0889830589294 eventName=circuit-witness-generation inputSize=1312 outputSize=9944 appCircuitName=SchnorrAccount:constructor +1s - aztec:simulator:secret_execution Returning from call to 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8:0xaf9f8c44 +1ms - aztec:simulator:secret_execution Ran external function 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d circuitName=app-circuit duration=2376.056704044342 eventName=circuit-witness-generation inputSize=1920 outputSize=9944 appCircuitName=MultiCallEntrypoint:entrypoint +2s - aztec:simulator:secret_execution Returning from call to 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:0x60dc069d +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x05425591680496cbc66f87c6e2a7669f253c205e4487e2046e72a6d8a74aa73b:entrypoint +2s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=135.3283977508545 inputSize=29786 outputSize=65142 +3s - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=404.01352882385254 inputSize=110646 outputSize=65142 +420ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=528.7569003105164 inputSize=129905 outputSize=65142 +541ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=354.3704319000244 inputSize=105713 outputSize=9907 +365ms - aztec:node INFO Simulating tx 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +2s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000002 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000002 timestamp=0x000000000000000000000000000000000000000000000000000000006672b76f coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +5s - aztec:node Simulated tx 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 succeeds +92ms - aztec:pxe_synchronizer Catching up note processor 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 by processing 1 blocks +5s - aztec:full_prover_test:full_prover VERBOSE Deploying accounts... +9s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:js:contract_interaction Sent deployment tx of SchnorrAccount contract with deployment address 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +0ms - aztec:js:contract_interaction Sent deployment tx of SchnorrAccount contract with deployment address 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 +0ms - aztec:pxe_service INFO Sending transaction 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +2s - aztec:node INFO Received tx 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +120ms - aztec:pxe_service INFO Sending transaction 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +0ms - aztec:node INFO Received tx 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +0ms - aztec:tx_pool INFO Adding tx with id 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 eventName=tx-added-to-pool txHash=191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 noteEncryptedLogCount=1 encryptedLogCount=0 unencryptedLogCount=0 noteEncryptedLogSize=588 encryptedLogSize=8 unencryptedLogSize=8 newCommitmentCount=1 newNullifierCount=3 proofSize=42 size=10773 feePaymentMethod=none classRegisteredCount=0 +15s - aztec:tx_pool INFO Adding tx with id 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 eventName=tx-added-to-pool txHash=2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 noteEncryptedLogCount=1 encryptedLogCount=0 unencryptedLogCount=0 noteEncryptedLogSize=588 encryptedLogSize=8 unencryptedLogSize=8 newCommitmentCount=1 newNullifierCount=3 proofSize=42 size=10773 feePaymentMethod=none classRegisteredCount=0 +1ms - aztec:note_processor Synched block 1 +0ms - aztec:pxe_synchronizer Note processor for 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 has caught up eventName=note-processor-caught-up account=0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 duration=4695.202922821045 dbSize=576 seen=0 decryptedIncoming=0 decryptedOutgoing=0 deferred=0 failed=0 blocks=1 txs=1 +126ms - aztec:sequencer Retrieved 2 txs from P2P pool +10s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000002 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000002 timestamp=0x000000000000000000000000000000000000000000000000000000006672b76f coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +15s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.10707664489746094 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.3342428207397461 operation=get-nullifier-index +1ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.39435815811157227 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.06839513778686523 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.11733770370483398 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.15155982971191406 operation=get-nullifier-index +0ms - aztec:sequencer:tx_validator:tx_phases Tx 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 does not contain enqueued public functions. Skipping phases validation. +0ms - aztec:sequencer:tx_validator:tx_phases Tx 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 does not contain enqueued public functions. Skipping phases validation. +0ms - aztec:sequencer INFO Building block 2 with 2 transactions +7ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 2 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +13s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=16.49015235900879 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=32 hashDuration=0.503024 hashInputsCount=0 hashInputsDuration=NaN +15s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.04992389678955078 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.12967872619628906 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.1677412986755371 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +19ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.70367622375488 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.4814672842105263 hashInputsCount=0 hashInputsDuration=NaN +14s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=51.02001094818115 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=103 hashDuration=0.48163976699029126 hashInputsCount=0 hashInputsDuration=NaN +14s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=80.91308403015137 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=143 hashDuration=0.5189764475524475 hashInputsCount=6 hashInputsDuration=0.715712 +14s - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 0 +188ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.14316034317016602 operation=get-nullifier-index +189ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.2206859588623047 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.2561178207397461 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +1ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.78286170959473 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=97 hashDuration=0.47406713402061856 hashInputsCount=0 hashInputsDuration=NaN +188ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=54.54271411895752 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=104 hashDuration=0.48450646153846155 hashInputsCount=0 hashInputsDuration=NaN +192ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=80.66886711120605 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=144 hashDuration=0.5148808888888888 hashInputsCount=6 hashInputsDuration=0.7164373333333334 +192ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +191ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +0ms - aztec:prover-client:prover-pool:queue Adding id=4b6dae8d type=BASE_PARITY proving job to queue depth=0 +13s - aztec:prover-client:prover-agent Picked up proving job id=4b6dae8d type=BASE_PARITY +13s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.400780200958252 +13s - aztec:prover-client:prover-agent Processed proving job id=4b6dae8d type=BASE_PARITY duration=6.268599987030029ms +7ms - aztec:prover-client:prover-pool:queue Adding id=0b562fae type=BASE_PARITY proving job to queue depth=0 +7ms - aztec:prover-client:prover-pool:queue Adding id=85baffec type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=195190eb type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=73244ae0 type=BASE_ROLLUP proving job to queue depth=3 +0ms - aztec:prover-client:prover-pool:queue Adding id=2d4143d3 type=BASE_ROLLUP proving job to queue depth=4 +0ms - aztec:prover-client:prover-agent Picked up proving job id=0b562fae type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.513056755065918 +105ms - aztec:prover-client:prover-agent Processed proving job id=0b562fae type=BASE_PARITY duration=6.442651748657227ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=85baffec type=BASE_PARITY +105ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.816357612609863 +113ms - aztec:prover-client:prover-agent Processed proving job id=85baffec type=BASE_PARITY duration=6.395978927612305ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=195190eb type=BASE_PARITY +100ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.969668388366699 +107ms - aztec:prover-client:prover-agent Processed proving job id=195190eb type=BASE_PARITY duration=6.699820041656494ms +7ms - aztec:prover-client:prover-pool:queue Adding id=0d5237e9 type=ROOT_PARITY proving job to queue depth=2 +326ms - aztec:prover-client:prover-agent Picked up proving job id=73244ae0 type=BASE_ROLLUP +99ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-66WmTh --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +14s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=348.97394037246704 +453ms - aztec:prover-client:prover-agent Processed proving job id=73244ae0 type=BASE_ROLLUP duration=325.95972204208374ms +356ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 191829410e16ed0bee99ecacee752de1dba0f22ef171bcb080d7877d3a546768 +788ms - aztec:prover-client:prover-agent Picked up proving job id=2d4143d3 type=BASE_ROLLUP +75ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-BuJySy --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +427ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=357.65587615966797 +439ms - aztec:prover-client:prover-agent Processed proving job id=2d4143d3 type=BASE_ROLLUP duration=333.99364280700684ms +363ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 2806af30795e0e7aba8d539cbfd719c5b07a53e1cac4177aa4f34e4c504cf448 +438ms - aztec:prover:proving-orchestrator Not ready for root rollup +1ms - aztec:prover-client:prover-agent Picked up proving job id=0d5237e9 type=ROOT_PARITY +75ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=109.01426315307617 +186ms - aztec:prover-client:prover-agent Processed proving job id=0d5237e9 type=ROOT_PARITY duration=100.24219989776611ms +111ms - aztec:prover-client:prover-pool:queue Adding id=54647fec type=ROOT_ROLLUP proving job to queue depth=0 +1s - aztec:prover-client:prover-agent Picked up proving job id=54647fec type=ROOT_ROLLUP +79ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=157.63014888763428 +240ms - aztec:prover-client:prover-agent Processed proving job id=54647fec type=ROOT_ROLLUP duration=151.52544021606445ms +162ms - aztec:prover:proving-orchestrator Updating and validating root trees +432ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=9.776890754699707 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=16 hashDuration=0.589736 hashInputsCount=0 hashInputsDuration=NaN +15s - aztec:prover:proving-orchestrator INFO Successfully proven block 2! +16ms - aztec:sequencer VERBOSE Assembled block 2 eventName=l2-block-built duration=2088.6153869628906 publicProcessDuration=382.0271587371826 rollupCircuitsDuration=2081.53910112381 txCount=2 blockNumber=2 noteEncryptedLogLength=1176 noteEncryptedLogCount=2 encryptedLogLength=16 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=16 +2s - aztec:sequencer:publisher INFO TxEffects size=1734 bytes +14s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x00457368ee092b77729f309f86f1929c0f1044d9f1e8734c05cb712cf822413c +55ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1266496516 gasUsed=610285 transactionHash=0xc86dad19535ec9b3a9687a816dca9625c7c0ca4dfb5688306f757c0a85af9e70 calldataGas=9464 calldataSize=1412 txCount=2 blockNumber=2 noteEncryptedLogLength=1176 noteEncryptedLogCount=2 encryptedLogLength=16 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=16 eventName=rollup-published-to-l1 +27ms - aztec:sequencer INFO Submitted rollup block 2 with 2 transactions +89ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 11 and 12. +13s - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.28233909606933594 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.023848 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 2 is ours, committing world state +13s - aztec:p2p Synched to block 2 +13s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 384 root 0x1f8c3c3262dd7197af861efd8d7ee790d103ed10f5533d7fcd7edc0f374a882e +32ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 256 root 0x0480ad96a1256ba02bb51406a5205c3fbffac153c8a600f73b333bdc64f2ef6d +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 384 root 0x021a6cc64c830b4914600d0296c3968c5d28c1b00c5c4b0b33d1f39d948edbd4 +0ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 32 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 3 root 0x13052bb6a4d9e964d57e630c57c59a353e530e771d93c28c32d267bf5d7cf41f +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=70.96263074874878 isBlockOurs=true txCount=2 blockNumber=2 noteEncryptedLogLength=1176 noteEncryptedLogCount=2 encryptedLogLength=16 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=16 +13s - aztec:sequencer Block has been synced +1s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +4s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +0ms - aztec:note_processor VERBOSE Added incoming note for contract 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at slot 0x0000000000000000000000000000000000000000000000000000000000000001 with nullifier 0x2006e0c98f4ee17fd79bcc0ce30855e962dde036745b3a3240253c1c12e4fe64 +9s - aztec:note_processor Synched block 2 +2ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +0ms - aztec:note_processor VERBOSE Added incoming note for contract 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 at slot 0x0000000000000000000000000000000000000000000000000000000000000001 with nullifier 0x17a1afba169f1ea3a9cd5771b0bae464431ed9a0946887ee4a646d10e31354ca +4s - aztec:note_processor Synched block 2 +2ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE State transition for 2_accounts complete. +14s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x12dccab71eecb86f9ea86de821a208ee8157e571e097590b6c363d350961ef75 privateFunctionRoot=0x2e664b1dc18550ddd145449fdbe43e36e461c7b026b053120fbcc2137da24c62 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x05673320bae385ce380e1cc3e5257c2ac43e485d9594598542636c4f3665173c +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x23e2d15ea4a2510192615125560d92335d7f0d0db9d6d96edb2d4aca282ed6a9 privateFunctionRoot=0x0000000000000000000000000000000000000000000000000000000000000000 unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x167ce9a988be4506264df26007a319f3ca8b23a9d201d1557a7ea4a8946868e7 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x03968b924940b05b313a5f28785205f44e7a12de90de76e1be6e9c48192d760b privateFunctionRoot=0x0952f1194c11fc9f5de1b26a4a2ea8af148c37dcc7cefd24a129aec304418e3a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x07b0c21bc0ea6e039ebeaf4f74ce64669c90840b0a6ec64628c054c027f95681 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:full_prover_test:full_prover VERBOSE Wallet 0 address: 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +5s - aztec:full_prover_test:full_prover VERBOSE Wallet 1 address: 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 +0ms - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Applying state transition for client_prover_integration... +159ms - aztec:full_prover_test:full_prover VERBOSE Public deploy accounts... +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53 privateFunctionRoot=0x10456f35241c48dee42800c03282f0133112f9742ee1a614466a29a7f51e7d73 unconstrainedFunctionRoot=0x21e3016a3b9074625a17f8ea13a396a643969c755e4addfe638e4f6113d364d3 metadataHash=0x09eae8b9013408132200f865ae282c253c4f17cca1f47c2034ec67a234575732 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +5s - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +317ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +325ms - aztec:simulator:acvm Oracle callback getNotes +8ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +9ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback callPrivateFunction +90ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x98bc6593 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +98ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593(ContractClassRegisterer:register) +0ms - aztec:simulator:acvm Oracle callback popCapsule +0ms - aztec:simulator:acvm Oracle callback debugLog +169ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractClassRegistered: 0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd,0x030166903f4a01160ab08a2d4bcc1d3d79c3df03bbe36340c1ea977472505a53,0x2e8cc6fa55ddb080752ad6ca01538b0d7f88de4122227bd9cbe9be9e771864f3,0x0000000000000000000000000000000000000000000000000000000000000005 +0ms - aztec:simulator:acvm Oracle callback emitContractClassUnencryptedLog +31ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log from ContractClassRegisterer: "UnencryptedL2Log(contractAddress: 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417..." +66ms - aztec:simulator:secret_execution Ran external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 circuitName=app-circuit duration=399.96015977859497 eventName=circuit-witness-generation inputSize=1344 outputSize=9944 appCircuitName=ContractClassRegisterer:register +402ms - aztec:simulator:secret_execution Returning from call to 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +597ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x7ebd3690 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +598ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690(ContractInstanceDeployer:deploy) +0ms - aztec:simulator:acvm Oracle callback debugLog +0ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractInstanceDeployed: 0x0000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631,0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2,0x0000000000000000000000000000000000000000000000000000000000000001,0x0000000000000000000000000000000000000000000000000000000000000001,0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd,0x1eb07d0383a3fd5075e137207c2acdaa1e82be0fd84cb54c59e968476eb0ef29,0x017e24b9383b4d5d4d0dbcf3d5d76a40fb938ba9d59bef3c0f20cba329725f03,0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:simulator:acvm Oracle callback emitUnencryptedLog +4ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log: "UnencryptedL2Log(contractAddress: 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934..." +4ms - aztec:simulator:secret_execution Ran external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 circuitName=app-circuit duration=42.709940910339355 eventName=circuit-witness-generation inputSize=1408 outputSize=9944 appCircuitName=ContractInstanceDeployer:deploy +45ms - aztec:simulator:secret_execution Returning from call to 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +242ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x7ebd3690 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +241ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690(ContractInstanceDeployer:deploy) +0ms - aztec:simulator:acvm Oracle callback debugLog +0ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractInstanceDeployed: 0x0000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631,0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8,0x0000000000000000000000000000000000000000000000000000000000000001,0x0000000000000000000000000000000000000000000000000000000000000001,0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd,0x17fc12ef8873c508983a3d452a5a9e2d27bc5bea52830370358e5e9980280dd4,0x2f9e0e8e65f14e9c40f2eb19b582fdf24de087baf86d52c05efe4d6c263d4e81,0x0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:simulator:acvm Oracle callback emitUnencryptedLog +4ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log: "UnencryptedL2Log(contractAddress: 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934..." +4ms - aztec:simulator:secret_execution Ran external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 circuitName=app-circuit duration=40.50528001785278 eventName=circuit-witness-generation inputSize=1408 outputSize=9944 appCircuitName=ContractInstanceDeployer:deploy +42ms - aztec:simulator:secret_execution Returning from call to 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 +0ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1656.9470915794373 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +2s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +1ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +2s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=136.74058485031128 inputSize=29786 outputSize=65142 +7s - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=411.37086296081543 inputSize=110646 outputSize=65142 +430ms - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=403.0376009941101 inputSize=110646 outputSize=65142 +419ms - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=394.08181715011597 inputSize=110646 outputSize=65142 +412ms - aztec:node Using committed db for block latest, world state synced upto 2 +8s - aztec:node Using committed db for block latest, world state synced upto 2 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=599.4395809173584 inputSize=129905 outputSize=65142 +613ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=361.4398169517517 inputSize=105713 outputSize=9907 +369ms - aztec:node INFO Simulating tx 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +980ms - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000003 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000003 timestamp=0x000000000000000000000000000000000000000000000000000000006672b77c coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +9s - aztec:node Simulated tx 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 succeeds +131ms - aztec:pxe_service INFO Sending transaction 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +3s - aztec:node INFO Received tx 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +1ms - aztec:tx_pool INFO Adding tx with id 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 eventName=tx-added-to-pool txHash=090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 noteEncryptedLogCount=0 encryptedLogCount=0 unencryptedLogCount=3 noteEncryptedLogSize=8 encryptedLogSize=8 unencryptedLogSize=640812 newCommitmentCount=0 newNullifierCount=4 proofSize=42 size=650997 feePaymentMethod=none classRegisteredCount=1 +9s - aztec:sequencer Retrieved 1 txs from P2P pool +6s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000003 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000003 timestamp=0x000000000000000000000000000000000000000000000000000000006672b77c coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +9s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.09418582916259766 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.1616811752319336 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.21026372909545898 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.23242568969726562 operation=get-nullifier-index +0ms - aztec:sequencer:contracts-data-source Adding class 0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd to public execution contract cache +0ms - aztec:sequencer:contracts-data-source Adding instance 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 with class 0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd to public execution contract cache +1ms - aztec:sequencer:contracts-data-source Adding instance 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 with class 0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd to public execution contract cache +0ms - aztec:sequencer:tx_validator:tx_phases Tx 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 does not contain enqueued public functions. Skipping phases validation. +0ms - aztec:sequencer INFO Building block 3 with 1 transactions +125ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 3 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +7s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=16.021658897399902 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=31 hashDuration=0.5030090322580646 hashInputsCount=0 hashInputsDuration=NaN +9s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.10379695892333984 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.26109790802001953 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.30276012420654297 operation=get-nullifier-index +1ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.32656192779541016 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +59ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=49.81492900848389 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.511488 hashInputsCount=0 hashInputsDuration=NaN +9s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=53.28774690628052 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=103 hashDuration=0.49527176699029124 hashInputsCount=0 hashInputsDuration=NaN +9s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=97.06660175323486 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=163 hashDuration=0.536400490797546 hashInputsCount=8 hashInputsDuration=0.753744 +9s - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 0 +210ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +41ms - aztec:prover-client:prover-pool:queue Adding id=68203794 type=BASE_PARITY proving job to queue depth=0 +8s - aztec:prover-client:prover-pool:queue Adding id=6e2c7faa type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=f3a69f24 type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=2f713705 type=BASE_PARITY proving job to queue depth=3 +0ms - aztec:prover-client:prover-pool:queue Adding id=6df04318 type=BASE_ROLLUP proving job to queue depth=4 +1ms - aztec:prover-client:prover-agent Picked up proving job id=68203794 type=BASE_PARITY +8s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.778025150299072 +8s - aztec:prover-client:prover-agent Processed proving job id=68203794 type=BASE_PARITY duration=6.416780948638916ms +7ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +12ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=52.98612594604492 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=96 hashDuration=0.5355686666666666 hashInputsCount=0 hashInputsDuration=NaN +267ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=54.95284175872803 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=106 hashDuration=0.49648724528301885 hashInputsCount=0 hashInputsDuration=NaN +269ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=48.00293493270874 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=86 hashDuration=0.5413953488372093 hashInputsCount=0 hashInputsDuration=NaN +219ms - aztec:prover:proving-orchestrator Enqueuing 1 padding transactions using existing padding tx +164ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +0ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=4477bdc9 type=BASE_ROLLUP proving job to queue depth=4 +173ms - aztec:prover-client:prover-agent Picked up proving job id=6e2c7faa type=BASE_PARITY +166ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.5328192710876465 +173ms - aztec:prover-client:prover-agent Processed proving job id=6e2c7faa type=BASE_PARITY duration=6.377928256988525ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=f3a69f24 type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=8.098395824432373 +107ms - aztec:prover-client:prover-agent Processed proving job id=f3a69f24 type=BASE_PARITY duration=8.010540008544922ms +8ms - aztec:prover-client:prover-agent Picked up proving job id=2f713705 type=BASE_PARITY +98ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=8.129077911376953 +106ms - aztec:prover-client:prover-agent Processed proving job id=2f713705 type=BASE_PARITY duration=7.950046062469482ms +8ms - aztec:prover-client:prover-pool:queue Adding id=ad7c2813 type=ROOT_PARITY proving job to queue depth=2 +220ms - aztec:prover-client:prover-agent Picked up proving job id=6df04318 type=BASE_ROLLUP +99ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-2XgTc2 --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +9s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=369.46113777160645 +474ms - aztec:prover-client:prover-agent Processed proving job id=6df04318 type=BASE_ROLLUP duration=337.93632411956787ms +376ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 090bed4e9dff513cb4387f2b58aeb25cd23d0ebc76164662745028d223084f56 +695ms - aztec:prover-client:prover-agent Picked up proving job id=4477bdc9 type=BASE_ROLLUP +64ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-URdJHK --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +433ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=320.0988597869873 +390ms - aztec:prover-client:prover-agent Processed proving job id=4477bdc9 type=BASE_ROLLUP duration=296.4399561882019ms +327ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +391ms - aztec:prover:proving-orchestrator Not ready for root rollup +0ms - aztec:prover-client:prover-agent Picked up proving job id=ad7c2813 type=ROOT_PARITY +3ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=108.37665796279907 +115ms - aztec:prover-client:prover-agent Processed proving job id=ad7c2813 type=ROOT_PARITY duration=99.2778730392456ms +110ms - aztec:prover-client:prover-pool:queue Adding id=9340e8dd type=ROOT_ROLLUP proving job to queue depth=0 +980ms - aztec:prover-client:prover-agent Picked up proving job id=9340e8dd type=ROOT_ROLLUP +81ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=153.55319833755493 +236ms - aztec:prover-client:prover-agent Processed proving job id=9340e8dd type=ROOT_ROLLUP duration=146.47372341156006ms +156ms - aztec:prover:proving-orchestrator Updating and validating root trees +355ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=10.724095821380615 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=18 hashDuration=0.5785564444444445 hashInputsCount=0 hashInputsDuration=NaN +9s - aztec:prover:proving-orchestrator INFO Successfully proven block 3! +53ms - aztec:sequencer VERBOSE Assembled block 3 eventName=l2-block-built duration=2111.724054813385 publicProcessDuration=293.15835094451904 rollupCircuitsDuration=1986.07639169693 txCount=1 blockNumber=3 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=3 unencryptedLogSize=640812 +2s - aztec:sequencer:publisher INFO TxEffects size=641093 bytes +9s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x0018455cefce3bb1f3c34f3305124f1e3db8f24fa1519fe7373f6cc28e675aca +666ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1220445101 gasUsed=610273 transactionHash=0x63322a97c9225139272cee0894c7312b4520da10a7d56d4ebc27f46362b19145 calldataGas=9452 calldataSize=1412 txCount=1 blockNumber=3 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=3 unencryptedLogSize=640812 eventName=rollup-published-to-l1 +26ms - aztec:sequencer INFO Submitted rollup block 3 with 1 transactions +735ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 13 and 14. +10s - aztec:archiver VERBOSE Registering contract class 0x0caa1ca31426605bdf50a98447c0dd3d68f0551248d4ae6286f35eb52f8ed4cd +54ms - aztec:archiver VERBOSE Storing contract instance at 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +2ms - aztec:archiver VERBOSE Storing contract instance at 0x18fb1f316902a57d638fafe547ae545d0724d6f47692da293cf7664b70d263d8 +0ms - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.2331557273864746 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.014777 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 3 is ours, committing world state +10s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +9s - aztec:note_processor Synched block 3 +9s - aztec:note_processor Synched block 3 +9s - aztec:p2p Synched to block 3 +10s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 512 root 0x1cf3a23c3b3ebc56690a9ae451d909ed751a48d7857c261e94eca67daf6d454c +32ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 384 root 0x0480ad96a1256ba02bb51406a5205c3fbffac153c8a600f73b333bdc64f2ef6d +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 512 root 0x021a6cc64c830b4914600d0296c3968c5d28c1b00c5c4b0b33d1f39d948edbd4 +0ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 48 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 4 root 0x12b586025e1fc543097477c0b8d6ca57c0255111e4fbf2912d5d054073d205b1 +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=70.35268878936768 isBlockOurs=true txCount=1 blockNumber=3 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=3 unencryptedLogSize=640812 +10s - aztec:sequencer Block has been synced +1s - aztec:full_prover_test:full_prover VERBOSE Deploying TokenContract... +10s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:js:contract_interaction Sent deployment tx of Token contract with deployment address 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +0ms - aztec:pxe_service INFO Added contract Token at 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +6s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:js:contract_interaction INFO Creating request for registering contract class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 as part of deployment for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +234ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x070209dfa8c4bc981b1ad891407f4d2f7aa27e69a0825892904d5759e3c50956 privateFunctionRoot=0x2e2855366babfb5e2b6829ca549fd1d38ff95620d7bd93ae6a18ecdbecbb9b1a unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x01647d53f1f8b165b3796c2b471d5f5dd9a349c0d254b1814b2fb37e9c1172ab +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x010c3eeadbbbe3b035338ce62eda3800fde1f6f3068ab50a273b13bd7c58eddd privateFunctionRoot=0x044355b307b7053651f988c645f94d9b5076e3ee1bea2cc4d049c837446f63df unconstrainedFunctionRoot=0x1910d228835f36d81ee677c7c728c78e0bc40aa596569aad14431457c2156d2d metadataHash=0x105a0320ac085b91602605c166d2feeca80befd0106edc719daf5a8a7ff6b385 +0ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +410ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +316ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +326ms - aztec:simulator:acvm Oracle callback getNotes +9ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +8ms - aztec:simulator:acvm Oracle callback getAuthWitness +8ms - aztec:simulator:acvm Oracle callback callPrivateFunction +90ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x98bc6593 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +98ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593(ContractClassRegisterer:register) +0ms - aztec:simulator:acvm Oracle callback popCapsule +0ms - aztec:simulator:acvm Oracle callback debugLog +170ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractClassRegistered: 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751,0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4,0x0488114b880887348c50fbaeebde008bfca23238238be04c262ea0fd4d050bf8,0x0000000000000000000000000000000000000000000000000000000000000005 +0ms - aztec:simulator:acvm Oracle callback emitContractClassUnencryptedLog +28ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log from ContractClassRegisterer: "UnencryptedL2Log(contractAddress: 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417..." +64ms - aztec:simulator:secret_execution Ran external function 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 circuitName=app-circuit duration=396.01865005493164 eventName=circuit-witness-generation inputSize=1344 outputSize=9944 appCircuitName=ContractClassRegisterer:register +398ms - aztec:simulator:secret_execution Returning from call to 0x302da9b6000a76691341b250565ca5c67723261fa99af1435ffe5178ccb21417:0x98bc6593 +0ms - aztec:simulator:acvm Oracle callback callPrivateFunction +594ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x7ebd3690 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +594ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690(ContractInstanceDeployer:deploy) +0ms - aztec:simulator:acvm Oracle callback debugLog +0ms - aztec:simulator:client_execution_context VERBOSE debug_log ContractInstanceDeployed: 0x0000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631,0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509,0x0000000000000000000000000000000000000000000000000000000000000001,0x19007c301c5820162fb325a79c806ef86d45ff02e7f9d785abfc30317c4ff97c,0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751,0x0be31579c4b856db870c31206cb5412f42737f7897100c7da3d653a6d1d65a04,0x0000000000000000000000000000000000000000000000000000000000000000,0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +0ms - aztec:simulator:acvm Oracle callback emitUnencryptedLog +4ms - aztec:simulator:client_execution_context VERBOSE Emitted unencrypted log: "UnencryptedL2Log(contractAddress: 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934..." +4ms - aztec:simulator:secret_execution Ran external function 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 circuitName=app-circuit duration=43.903522968292236 eventName=circuit-witness-generation inputSize=1408 outputSize=9944 appCircuitName=ContractInstanceDeployer:deploy +45ms - aztec:simulator:secret_execution Returning from call to 0x2b231c13768709b1ba51c1f86275b47e38dfac16e3d7f242cb578d92a4e2d934:0x7ebd3690 +0ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +159ms - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [12] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x9a397c37(constructor) +237ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1654.3342037200928 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +2s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +2s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=136.6584987640381 inputSize=29786 outputSize=65142 +8s - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=392.767617225647 inputSize=110646 outputSize=65142 +411ms - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=392.56452322006226 inputSize=110646 outputSize=65142 +409ms - aztec:node Using committed db for block latest, world state synced upto 3 +9s - aztec:node Using committed db for block latest, world state synced upto 3 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=596.6539011001587 inputSize=129905 outputSize=65142 +610ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=393.8285608291626 inputSize=105713 outputSize=91287 +405ms - aztec:node INFO Simulating tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +1s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000004 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000004 timestamp=0x000000000000000000000000000000000000000000000000000000006672b786 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +10s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:sequencer:contracts-data-source Adding class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +0ms - aztec:sequencer:contracts-data-source Adding instance 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 with class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +2ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:constructor. +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.057134151458740234 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:constructor returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:constructor duration=67.54213619232178 +68ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x9a397c37 +238ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=557.8162560462952 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1472.3229417800903 inputSize=421222 outputSize=10014 +2s - aztec:node Simulated tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a succeeds +3s - aztec:pxe_service INFO Sending transaction 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +5s - aztec:node INFO Received tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +1ms - aztec:tx_pool INFO Adding tx with id 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a eventName=tx-added-to-pool txHash=19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a noteEncryptedLogCount=0 encryptedLogCount=0 unencryptedLogCount=2 noteEncryptedLogSize=8 encryptedLogSize=8 unencryptedLogSize=640512 newCommitmentCount=0 newNullifierCount=3 proofSize=42 size=734313 feePaymentMethod=none classRegisteredCount=1 +13s - aztec:sequencer Retrieved 1 txs from P2P pool +9s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000004 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000004 timestamp=0x000000000000000000000000000000000000000000000000000000006672b786 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +13s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.09276580810546875 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.15336036682128906 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.2012643814086914 operation=get-nullifier-index +0ms - aztec:sequencer:contracts-data-source Adding class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +0ms - aztec:sequencer:contracts-data-source Adding instance 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 with class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +1ms - aztec:sequencer INFO Building block 4 with 1 transactions +155ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 4 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +11s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=16.95405387878418 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=33 hashDuration=0.5009997575757575 hashInputsCount=0 hashInputsDuration=NaN +13s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:sequencer:contracts-data-source Adding class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +0ms - aztec:sequencer:contracts-data-source Adding instance 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 with class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 to public execution contract cache +1ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:constructor. +4s - aztec:prover-client:prover-pool:queue Adding id=919993e4 type=BASE_PARITY proving job to queue depth=0 +11s - aztec:prover-client:prover-agent Picked up proving job id=919993e4 type=BASE_PARITY +11s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.468264102935791 +11s - aztec:prover-client:prover-agent Processed proving job id=919993e4 type=BASE_PARITY duration=6.323133945465088ms +7ms - aztec:prover-client:prover-pool:queue Adding id=b699e0c7 type=BASE_PARITY proving job to queue depth=0 +7ms - aztec:prover-client:prover-pool:queue Adding id=27aecbd7 type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=385a1033 type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.042822837829589844 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:constructor returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:constructor duration=55.93062925338745 +56ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x9a397c37 +175ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=555.8846831321716 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1410.479028224945 inputSize=421222 outputSize=10014 +2s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.10203695297241211 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.25627708435058594 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.29531002044677734 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.3159818649291992 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +3s - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=45.61457014083862 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.47133642105263157 hashInputsCount=0 hashInputsDuration=NaN +15s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=259.3408303260803 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=423 hashDuration=0.5635324066193853 hashInputsCount=16 hashInputsDuration=0.828704 +15s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=93.950927734375 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=163 hashDuration=0.5206694478527607 hashInputsCount=8 hashInputsDuration=0.761984 +15s - aztec:prover:proving-orchestrator Enqueueing public VM 0 for tx 0 +409ms - aztec:prover:proving-orchestrator Enqueueing public VM 1 for tx 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=3d7809df type=PUBLIC_VM proving job to queue depth=3 +3s - aztec:prover-client:prover-agent Picked up proving job id=b699e0c7 type=BASE_PARITY +3s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.325414180755615 +3s - aztec:prover-client:prover-agent Processed proving job id=b699e0c7 type=BASE_PARITY duration=6.173933982849121ms +7ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +15ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.83189392089844 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=98 hashDuration=0.46971624489795916 hashInputsCount=0 hashInputsDuration=NaN +425ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=51.21275472640991 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=104 hashDuration=0.479 hashInputsCount=0 hashInputsDuration=NaN +216ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=38.40583562850952 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=84 hashDuration=0.4458323809523809 hashInputsCount=0 hashInputsDuration=NaN +160ms - aztec:prover:proving-orchestrator Enqueuing 1 padding transactions using existing padding tx +143ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +0ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=ff2ee130 type=BASE_ROLLUP proving job to queue depth=3 +155ms - aztec:prover-client:prover-agent Picked up proving job id=27aecbd7 type=BASE_PARITY +147ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.262629985809326 +154ms - aztec:prover-client:prover-agent Processed proving job id=27aecbd7 type=BASE_PARITY duration=6.173092842102051ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=385a1033 type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.38117790222168 +106ms - aztec:prover-client:prover-agent Processed proving job id=385a1033 type=BASE_PARITY duration=6.289241790771484ms +7ms - aztec:prover-client:prover-pool:queue Adding id=b3c6d9ee type=ROOT_PARITY proving job to queue depth=2 +113ms - aztec:prover-client:prover-agent Picked up proving job id=3d7809df type=PUBLIC_VM +99ms - aztec:test-prover Skipping AVM simulation in TestCircuitProver. +100ms - aztec:prover-client:prover-agent Processed proving job id=3d7809df type=PUBLIC_VM duration=0.003680706024169922ms +1ms - aztec:prover:proving-orchestrator Proven VM for function index 0 of tx index 0 +213ms - aztec:prover:proving-orchestrator Enqueuing kernel from VM for tx 0, function 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=051200b9 type=PUBLIC_KERNEL_NON_TAIL proving job to queue depth=2 +101ms - aztec:prover-client:prover-agent Picked up proving job id=ff2ee130 type=BASE_ROLLUP +100ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-aXzM15 --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +15s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=318.7710690498352 +424ms - aztec:prover-client:prover-agent Processed proving job id=ff2ee130 type=BASE_ROLLUP duration=295.6849341392517ms +325ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +425ms - aztec:prover-client:prover-agent Picked up proving job id=b3c6d9ee type=ROOT_PARITY +5ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=109.48924541473389 +118ms - aztec:prover-client:prover-agent Processed proving job id=b3c6d9ee type=ROOT_PARITY duration=98.56273412704468ms +112ms - aztec:prover:proving-orchestrator Not ready for root rollup +117ms - aztec:prover-client:prover-agent Picked up proving job id=051200b9 type=PUBLIC_KERNEL_NON_TAIL +80ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-app-logic inputSize=121961 outputSize=91286 duration=656.1731567382812 +745ms - aztec:prover-client:prover-agent Processed proving job id=051200b9 type=PUBLIC_KERNEL_NON_TAIL duration=616.2109036445618ms +667ms - aztec:prover-client:prover-pool:queue Adding id=f069d359 type=PUBLIC_KERNEL_TAIL proving job to queue depth=0 +1s - aztec:prover-client:prover-agent Picked up proving job id=f069d359 type=PUBLIC_KERNEL_TAIL +51ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-tail inputSize=421222 outputSize=10014 duration=1551.8450908660889 +2s - aztec:prover-client:prover-agent Processed proving job id=f069d359 type=PUBLIC_KERNEL_TAIL duration=1452.2267241477966ms +2s - aztec:prover:proving-orchestrator Public functions completed for tx 0 enqueueing base rollup +2s - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +38ms - aztec:prover-client:prover-pool:queue Adding id=206f79da type=BASE_ROLLUP proving job to queue depth=0 +2s - aztec:prover-client:prover-agent Picked up proving job id=206f79da type=BASE_ROLLUP +44ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-EAYWvw --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +3s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=534.4847240447998 +585ms - aztec:prover-client:prover-agent Processed proving job id=206f79da type=BASE_ROLLUP duration=511.01679277420044ms +541ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 19a4a73378fb0fbe4420a03257a3a27c75d59d63c465585db33cb65678aa236a +547ms - aztec:prover-client:prover-pool:queue Adding id=0058b7d9 type=ROOT_ROLLUP proving job to queue depth=0 +541ms - aztec:prover-client:prover-agent Picked up proving job id=0058b7d9 type=ROOT_ROLLUP +0ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=152.40126991271973 +155ms - aztec:prover-client:prover-agent Processed proving job id=0058b7d9 type=ROOT_ROLLUP duration=145.25525999069214ms +155ms - aztec:prover:proving-orchestrator Updating and validating root trees +160ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=9.566086292266846 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=16 hashDuration=0.578744 hashInputsCount=0 hashInputsDuration=NaN +18s - aztec:prover:proving-orchestrator INFO Successfully proven block 4! +51ms - aztec:sequencer VERBOSE Assembled block 4 eventName=l2-block-built duration=7172.14598941803 publicProcessDuration=2914.2644691467285 rollupCircuitsDuration=7013.99889421463 txCount=1 blockNumber=4 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640516 +7s - aztec:sequencer:publisher INFO TxEffects size=641309 bytes +17s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x00766bbc3e9435c7fbc838ebd6827b9a54122bf90636a1bc9ccf443aef1071a5 +659ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1183011527 gasUsed=610261 transactionHash=0xab6cfed119564956a0d8072f9a21f12a6e419598523e7a6ea0c484b70b6e3da1 calldataGas=9440 calldataSize=1412 txCount=1 blockNumber=4 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640516 eventName=rollup-published-to-l1 +25ms - aztec:sequencer INFO Submitted rollup block 4 with 1 transactions +726ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 15 and 16. +18s - aztec:archiver VERBOSE Registering contract class 0x1e187cdac954dc31b4d3905f6e1e56ccc0a29af51665ebbe1cded342ed054751 +59ms - aztec:archiver VERBOSE Storing contract instance at 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +2ms - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.2060537338256836 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.014669 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 4 is ours, committing world state +18s - aztec:p2p Synched to block 4 +18s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 640 root 0x046b22f1bce82cf4b42da61d6de723007fa35c48f661f5545cae0f9f76449867 +24ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 512 root 0x0480ad96a1256ba02bb51406a5205c3fbffac153c8a600f73b333bdc64f2ef6d +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 640 root 0x1880e9899aec364d91270747c087f655e80dde1383e9000e56e3926ff09659d0 +1ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 64 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 5 root 0x1cc7bd5b5abb1cf46a5793b46141f0a3c4421ffcd5176b69657e22b9b0f47d62 +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=56.952528953552246 isBlockOurs=true txCount=1 blockNumber=4 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=2 unencryptedLogSize=640516 +18s - aztec:sequencer Block has been synced +1s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +19s - aztec:note_processor Synched block 4 +19s - aztec:js:deploy_sent_tx INFO Contract 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 successfully deployed. +0ms - aztec:full_prover_test:full_prover VERBOSE Token deployed to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +18s - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE State transition for client_prover_integration complete. +28s - aztec:full_prover_test:full_prover VERBOSE Token contract address: 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 +2ms - aztec:note_processor Synched block 4 +19s - aztec:pxe_service Executing simulator... +11s - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +314ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +322ms - aztec:simulator:acvm Oracle callback getNotes +6ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +6ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +6ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xf851a440(admin) +18ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1051.5198020935059 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=133.96722507476807 inputSize=29786 outputSize=65142 +0ms - aztec:node Using committed db for block latest, world state synced upto 4 +12s - aztec:node Using committed db for block latest, world state synced upto 4 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=597.1480259895325 inputSize=129905 outputSize=65142 +610ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=382.3227996826172 inputSize=105713 outputSize=91287 +396ms - aztec:node INFO Simulating tx 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f +1s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000005 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000005 timestamp=0x000000000000000000000000000000000000000000000000000000006672b798 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +16s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:admin. +12s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.06333494186401367 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:admin returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:admin duration=6.969697952270508 +7ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xf851a440 +65ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=556.281900882721 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1100.3239812850952 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f succeeds +2s - aztec:pxe_service INFO Executed local simulation for 1fbb0d8579f1a4b121c79858b628640f892e6c246e921801e780c1465790eb1f +3s - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE Applying state transition for mint... +5s - aztec:full_prover_test:full_prover VERBOSE Minting 10000 publicly... +5s - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +368ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +316ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +325ms - aztec:simulator:acvm Oracle callback getNotes +7ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +7ms - aztec:simulator:acvm Oracle callback getAuthWitness +10ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +7ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x6bfd1d5b(mint_public) +22ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1057.184169769287 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=133.11543703079224 inputSize=29786 outputSize=65142 +19s - aztec:node Using committed db for block latest, world state synced upto 4 +2s - aztec:node Using committed db for block latest, world state synced upto 4 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=596.8401250839233 inputSize=129905 outputSize=65142 +610ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=381.65160512924194 inputSize=105713 outputSize=91287 +393ms - aztec:node INFO Simulating tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +1s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000005 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000005 timestamp=0x000000000000000000000000000000000000000000000000000000006672b798 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +5s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:mint_public. +5s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.10302734375 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:mint_public returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:mint_public duration=26.81092071533203 +26ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x6bfd1d5b +83ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=550.4457998275757 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1188.2878999710083 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b succeeds +2s - aztec:pxe_service INFO Sending transaction 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +3s - aztec:node INFO Received tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:tx_pool INFO Adding tx with id 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b eventName=tx-added-to-pool txHash=1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b noteEncryptedLogCount=0 encryptedLogCount=0 unencryptedLogCount=0 noteEncryptedLogSize=8 encryptedLogSize=8 unencryptedLogSize=8 newCommitmentCount=0 newNullifierCount=1 proofSize=42 size=91825 feePaymentMethod=none classRegisteredCount=0 +20s - aztec:sequencer Retrieved 1 txs from P2P pool +10s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000005 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000005 timestamp=0x000000000000000000000000000000000000000000000000000000006672b798 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +19s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.05998420715332031 operation=get-nullifier-index +0ms - aztec:sequencer INFO Building block 5 with 1 transactions +24ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 5 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +12s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=15.592461109161377 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=31 hashDuration=0.490941935483871 hashInputsCount=0 hashInputsDuration=NaN +19s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:mint_public. +2s - aztec:prover-client:prover-pool:queue Adding id=95f63740 type=BASE_PARITY proving job to queue depth=0 +12s - aztec:prover-client:prover-pool:queue Adding id=75f9935c type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=68915a5b type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=8a33c042 type=BASE_PARITY proving job to queue depth=3 +0ms - aztec:prover-client:prover-agent Picked up proving job id=95f63740 type=BASE_PARITY +12s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.438231945037842 +12s - aztec:prover-client:prover-agent Processed proving job id=95f63740 type=BASE_PARITY duration=6.289391994476318ms +6ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.06018400192260742 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:mint_public returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:mint_public duration=32.89955759048462 +33ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x6bfd1d5b +88ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=551.2426247596741 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1202.3146319389343 inputSize=421222 outputSize=10014 +1s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.22296524047851562 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +2s - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.31235933303833 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.4771294315789473 hashInputsCount=0 hashInputsDuration=NaN +18s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=105.00482702255249 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=183 hashDuration=0.5342580109289617 hashInputsCount=4 hashInputsDuration=0.937984 +18s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=53.493112087249756 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=103 hashDuration=0.485888 hashInputsCount=2 hashInputsDuration=0.822784 +18s - aztec:prover:proving-orchestrator Enqueueing public VM 0 for tx 0 +215ms - aztec:prover:proving-orchestrator Enqueueing public VM 1 for tx 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=67e4eca3 type=PUBLIC_VM proving job to queue depth=3 +2s - aztec:prover-client:prover-agent Picked up proving job id=75f9935c type=BASE_PARITY +2s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.596252918243408 +2s - aztec:prover-client:prover-agent Processed proving job id=75f9935c type=BASE_PARITY duration=6.266829967498779ms +7ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +15ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=47.07740116119385 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=96 hashDuration=0.4812493333333333 hashInputsCount=0 hashInputsDuration=NaN +230ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=52.416977882385254 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=105 hashDuration=0.48464579047619044 hashInputsCount=0 hashInputsDuration=NaN +177ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=40.3061261177063 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=85 hashDuration=0.461108705882353 hashInputsCount=0 hashInputsDuration=NaN +164ms - aztec:prover:proving-orchestrator Enqueuing 1 padding transactions using existing padding tx +146ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +0ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=c7993a36 type=BASE_ROLLUP proving job to queue depth=3 +158ms - aztec:prover-client:prover-agent Picked up proving job id=68915a5b type=BASE_PARITY +151ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.291791915893555 +157ms - aztec:prover-client:prover-agent Processed proving job id=68915a5b type=BASE_PARITY duration=6.209496021270752ms +6ms - aztec:prover-client:prover-agent Picked up proving job id=8a33c042 type=BASE_PARITY +100ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.34452486038208 +106ms - aztec:prover-client:prover-agent Processed proving job id=8a33c042 type=BASE_PARITY duration=6.256209373474121ms +6ms - aztec:prover-client:prover-pool:queue Adding id=13a0b5de type=ROOT_PARITY proving job to queue depth=2 +112ms - aztec:prover-client:prover-agent Picked up proving job id=67e4eca3 type=PUBLIC_VM +99ms - aztec:test-prover Skipping AVM simulation in TestCircuitProver. +99ms - aztec:prover-client:prover-agent Processed proving job id=67e4eca3 type=PUBLIC_VM duration=0.0033402442932128906ms +1ms - aztec:prover:proving-orchestrator Proven VM for function index 0 of tx index 0 +213ms - aztec:prover:proving-orchestrator Enqueuing kernel from VM for tx 0, function 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=3b4eef07 type=PUBLIC_KERNEL_NON_TAIL proving job to queue depth=2 +100ms - aztec:prover-client:prover-agent Picked up proving job id=c7993a36 type=BASE_ROLLUP +100ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-HrvZuw --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +15s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=323.14293909072876 +430ms - aztec:prover-client:prover-agent Processed proving job id=c7993a36 type=BASE_ROLLUP duration=300.192843914032ms +330ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +430ms - aztec:prover-client:prover-agent Picked up proving job id=13a0b5de type=ROOT_PARITY +1ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=108.67164897918701 +113ms - aztec:prover-client:prover-agent Processed proving job id=13a0b5de type=ROOT_PARITY duration=99.8015604019165ms +111ms - aztec:prover:proving-orchestrator Not ready for root rollup +112ms - aztec:prover-client:prover-agent Picked up proving job id=3b4eef07 type=PUBLIC_KERNEL_NON_TAIL +80ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-app-logic inputSize=121961 outputSize=91286 duration=721.9674439430237 +814ms - aztec:prover-client:prover-agent Processed proving job id=3b4eef07 type=PUBLIC_KERNEL_NON_TAIL duration=683.7815418243408ms +735ms - aztec:prover-client:prover-pool:queue Adding id=5e93d91c type=PUBLIC_KERNEL_TAIL proving job to queue depth=0 +1s - aztec:prover-client:prover-agent Picked up proving job id=5e93d91c type=PUBLIC_KERNEL_TAIL +32ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-tail inputSize=421222 outputSize=10014 duration=1528.3541707992554 +2s - aztec:prover-client:prover-agent Processed proving job id=5e93d91c type=PUBLIC_KERNEL_TAIL duration=1400.411570072174ms +2s - aztec:prover:proving-orchestrator Public functions completed for tx 0 enqueueing base rollup +2s - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +0ms - aztec:prover-client:prover-pool:queue Adding id=c35fbc4b type=BASE_ROLLUP proving job to queue depth=0 +2s - aztec:prover-client:prover-agent Picked up proving job id=c35fbc4b type=BASE_ROLLUP +28ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-SWlEAa --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +3s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=371.33002614974976 +405ms - aztec:prover-client:prover-agent Processed proving job id=c35fbc4b type=BASE_ROLLUP duration=347.4464783668518ms +378ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 1267b9ac9b1c4e6fe8987fb0935a20facd742f32412f250635274a0f277a2b4b +406ms - aztec:prover-client:prover-pool:queue Adding id=f5ddb4c4 type=ROOT_ROLLUP proving job to queue depth=0 +408ms - aztec:prover-client:prover-agent Picked up proving job id=f5ddb4c4 type=ROOT_ROLLUP +52ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=154.81828594207764 +211ms - aztec:prover-client:prover-agent Processed proving job id=f5ddb4c4 type=ROOT_ROLLUP duration=146.84448766708374ms +158ms - aztec:prover:proving-orchestrator Updating and validating root trees +212ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=10.222432136535645 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=17 hashDuration=0.5822682352941176 hashInputsCount=0 hashInputsDuration=NaN +18s - aztec:prover:proving-orchestrator INFO Successfully proven block 5! +16ms - aztec:sequencer VERBOSE Assembled block 5 eventName=l2-block-built duration=6369.62110710144 publicProcessDuration=2377.192892074585 rollupCircuitsDuration=6342.957816123962 txCount=1 blockNumber=5 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 +6s - aztec:sequencer:publisher INFO TxEffects size=325 bytes +17s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x00cb4bccb6127175b5f2ac7c37064514ddac2501e40ea2ecb8e52e1c0e14e227 +133ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1141152188 gasUsed=610261 transactionHash=0x20941b3eb9ddd2344693582a5860aa9fedc0a8857c9607d98b39f7c84915c427 calldataGas=9440 calldataSize=1412 txCount=1 blockNumber=5 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 eventName=rollup-published-to-l1 +26ms - aztec:sequencer INFO Submitted rollup block 5 with 1 transactions +163ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 17 and 18. +17s - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.1909027099609375 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.013017 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 5 is ours, committing world state +17s - aztec:p2p Synched to block 5 +17s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 768 root 0x1f5d630d39b4ea48b800f54e6a181aa9d67d064c2a8e836863b90b58d141dedd +24ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 640 root 0x0480ad96a1256ba02bb51406a5205c3fbffac153c8a600f73b333bdc64f2ef6d +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 768 root 0x1c889aed31f6351ae880daf14c322413c9a0bc376772569c14548ab8f10a7137 +0ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 80 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 6 root 0x21ba41d7df7627447c7e2daa257b944949405ab21c1c3254920f8bdf2c47040c +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=54.52879238128662 isBlockOurs=true txCount=1 blockNumber=5 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 +17s - aztec:sequencer Block has been synced +1s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +17s - aztec:note_processor Synched block 5 +17s - aztec:note_processor Synched block 5 +17s - aztec:full_prover_test:full_prover VERBOSE Minting 10000 privately... +13s - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +8s - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +312ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +320ms - aztec:simulator:acvm Oracle callback getNotes +6ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +6ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +6ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x10763932(mint_private) +28ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1050.7380390167236 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=130.83178997039795 inputSize=29786 outputSize=65142 +12s - aztec:node Using committed db for block latest, world state synced upto 5 +9s - aztec:node Using committed db for block latest, world state synced upto 5 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=589.2701950073242 inputSize=129905 outputSize=65142 +602ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=379.4851870536804 inputSize=105713 outputSize=91287 +391ms - aztec:node INFO Simulating tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +992ms - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000006 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000006 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7a9 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +12s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:mint_private. +10s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.09539604187011719 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:mint_private returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:mint_private duration=55.02155685424805 +55ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x10763932 +124ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=550.1809029579163 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1137.6803069114685 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd succeeds +2s - aztec:pxe_service INFO Sending transaction 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +3s - aztec:node INFO Received tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:tx_pool INFO Adding tx with id 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd eventName=tx-added-to-pool txHash=0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd noteEncryptedLogCount=0 encryptedLogCount=0 unencryptedLogCount=0 noteEncryptedLogSize=8 encryptedLogSize=8 unencryptedLogSize=8 newCommitmentCount=0 newNullifierCount=1 proofSize=42 size=91825 feePaymentMethod=none classRegisteredCount=0 +12s - aztec:sequencer Retrieved 1 txs from P2P pool +5s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000006 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000006 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7a9 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +12s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.0574040412902832 operation=get-nullifier-index +0ms - aztec:sequencer INFO Building block 6 with 1 transactions +23ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 6 +1ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +6s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=16.22779369354248 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=32 hashDuration=0.495976 hashInputsCount=0 hashInputsDuration=NaN +12s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:mint_private. +2s - aztec:prover-client:prover-pool:queue Adding id=c649276a type=BASE_PARITY proving job to queue depth=0 +6s - aztec:prover-client:prover-pool:queue Adding id=0fb4a0c5 type=BASE_PARITY proving job to queue depth=1 +1ms - aztec:prover-client:prover-pool:queue Adding id=4b6c5c38 type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=1e804cd4 type=BASE_PARITY proving job to queue depth=3 +0ms - aztec:prover-client:prover-agent Picked up proving job id=c649276a type=BASE_PARITY +6s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.387808799743652 +6s - aztec:prover-client:prover-agent Processed proving job id=c649276a type=BASE_PARITY duration=6.233908176422119ms +6ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.06784391403198242 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:mint_private returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:mint_private duration=22.034421920776367 +22ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x10763932 +82ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=555.4880967140198 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1151.021912097931 inputSize=421222 outputSize=10014 +1s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.07148504257202148 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +2s - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.715046882629395 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.48316227368421055 hashInputsCount=0 hashInputsDuration=NaN +12s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=77.20383882522583 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=143 hashDuration=0.5116826853146853 hashInputsCount=1 hashInputsDuration=1.365504 +12s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=53.06922197341919 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=103 hashDuration=0.4839810485436893 hashInputsCount=2 hashInputsDuration=0.773888 +12s - aztec:prover:proving-orchestrator Enqueueing public VM 0 for tx 0 +190ms - aztec:prover:proving-orchestrator Enqueueing public VM 1 for tx 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=9869a30a type=PUBLIC_VM proving job to queue depth=3 +2s - aztec:prover-client:prover-agent Picked up proving job id=0fb4a0c5 type=BASE_PARITY +2s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.5205979347229 +2s - aztec:prover-client:prover-agent Processed proving job id=0fb4a0c5 type=BASE_PARITY duration=6.389029026031494ms +6ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +12ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.843724727630615 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=97 hashDuration=0.47535901030927835 hashInputsCount=0 hashInputsDuration=NaN +203ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=51.15678119659424 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=104 hashDuration=0.4790424615384616 hashInputsCount=0 hashInputsDuration=NaN +176ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=39.46778917312622 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=84 hashDuration=0.4572175238095238 hashInputsCount=0 hashInputsDuration=NaN +162ms - aztec:prover:proving-orchestrator Enqueuing 1 padding transactions using existing padding tx +144ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +0ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=f3c4b9b2 type=BASE_ROLLUP proving job to queue depth=3 +156ms - aztec:prover-client:prover-agent Picked up proving job id=4b6c5c38 type=BASE_PARITY +149ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.298313140869141 +155ms - aztec:prover-client:prover-agent Processed proving job id=4b6c5c38 type=BASE_PARITY duration=6.186183929443359ms +6ms - aztec:prover-client:prover-agent Picked up proving job id=1e804cd4 type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.691489219665527 +106ms - aztec:prover-client:prover-agent Processed proving job id=1e804cd4 type=BASE_PARITY duration=6.500606060028076ms +7ms - aztec:prover-client:prover-pool:queue Adding id=1390cb8f type=ROOT_PARITY proving job to queue depth=2 +112ms - aztec:prover-client:prover-agent Picked up proving job id=9869a30a type=PUBLIC_VM +99ms - aztec:test-prover Skipping AVM simulation in TestCircuitProver. +99ms - aztec:prover-client:prover-agent Processed proving job id=9869a30a type=PUBLIC_VM duration=0.005811214447021484ms +1ms - aztec:prover:proving-orchestrator Proven VM for function index 0 of tx index 0 +213ms - aztec:prover:proving-orchestrator Enqueuing kernel from VM for tx 0, function 0 +0ms - aztec:prover-client:prover-pool:queue Adding id=c75a95c8 type=PUBLIC_KERNEL_NON_TAIL proving job to queue depth=2 +100ms - aztec:prover-client:prover-agent Picked up proving job id=f3c4b9b2 type=BASE_ROLLUP +101ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-Dwbtm8 --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +10s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=608.8647408485413 +716ms - aztec:prover-client:prover-agent Processed proving job id=f3c4b9b2 type=BASE_ROLLUP duration=585.9697790145874ms +615ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +716ms - aztec:prover-client:prover-agent Picked up proving job id=1390cb8f type=ROOT_PARITY +1ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=128.20426988601685 +132ms - aztec:prover-client:prover-agent Processed proving job id=1390cb8f type=ROOT_PARITY duration=117.40008783340454ms +130ms - aztec:prover:proving-orchestrator Not ready for root rollup +131ms - aztec:prover-client:prover-agent Picked up proving job id=c75a95c8 type=PUBLIC_KERNEL_NON_TAIL +78ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-app-logic inputSize=121961 outputSize=91286 duration=679.1889081001282 +767ms - aztec:prover-client:prover-agent Processed proving job id=c75a95c8 type=PUBLIC_KERNEL_NON_TAIL duration=621.0034046173096ms +690ms - aztec:prover-client:prover-pool:queue Adding id=54ff79ee type=PUBLIC_KERNEL_TAIL proving job to queue depth=0 +2s - aztec:prover-client:prover-agent Picked up proving job id=54ff79ee type=PUBLIC_KERNEL_TAIL +49ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=public-kernel-tail inputSize=421222 outputSize=10014 duration=1313.9263739585876 +1s - aztec:prover-client:prover-agent Processed proving job id=54ff79ee type=PUBLIC_KERNEL_TAIL duration=1210.0647659301758ms +1s - aztec:prover:proving-orchestrator Public functions completed for tx 0 enqueueing base rollup +2s - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +0ms - aztec:prover-client:prover-pool:queue Adding id=92ef8376 type=BASE_ROLLUP proving job to queue depth=0 +1s - aztec:prover-client:prover-agent Picked up proving job id=92ef8376 type=BASE_ROLLUP +33ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-7MUsXv --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +3s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=343.7963070869446 +382ms - aztec:prover-client:prover-agent Processed proving job id=92ef8376 type=BASE_ROLLUP duration=320.9045457839966ms +350ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0d580ff6a4adecd81a26b4ac673e5199bf25c096b51bba9b1d5035c4eee19ddd +383ms - aztec:prover-client:prover-pool:queue Adding id=a2467364 type=ROOT_ROLLUP proving job to queue depth=0 +382ms - aztec:prover-client:prover-agent Picked up proving job id=a2467364 type=ROOT_ROLLUP +4ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=152.30102396011353 +160ms - aztec:prover-client:prover-agent Processed proving job id=a2467364 type=ROOT_ROLLUP duration=145.07467699050903ms +155ms - aztec:prover:proving-orchestrator Updating and validating root trees +162ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=9.807953834533691 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=16 hashDuration=0.59452 hashInputsCount=0 hashInputsDuration=NaN +12s - aztec:prover:proving-orchestrator INFO Successfully proven block 6! +15ms - aztec:sequencer VERBOSE Assembled block 6 eventName=l2-block-built duration=6268.896978855133 publicProcessDuration=2298.6802649497986 rollupCircuitsDuration=6243.01926279068 txCount=1 blockNumber=6 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 +6s - aztec:sequencer:publisher INFO TxEffects size=293 bytes +12s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x0040df35f4ae9b28dce9c9cd13efcfa3e1aaff0f9a19e37be698568542dce930 +143ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1108867072 gasUsed=610297 transactionHash=0x9193cfd72d79d5aaa0692e9da108417ac4a88761e96f1a1d9bf4f95fad16a189 calldataGas=9476 calldataSize=1412 txCount=1 blockNumber=6 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 eventName=rollup-published-to-l1 +26ms - aztec:sequencer INFO Submitted rollup block 6 with 1 transactions +172ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 19 and 20. +12s - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.20403385162353516 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.012517 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 6 is ours, committing world state +12s - aztec:p2p Synched to block 6 +12s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 896 root 0x2144db4a3fa86930b8c25c8a034f34c5cb16e50ef4e862876bc8b8b0d259c2c7 +25ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 768 root 0x0a32ee3420adcba5821fd73a1edc2bff56ccc558028f4e4a5a4ffcd9b8c12db9 +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 896 root 0x0d14c8dfebdcaafa46e635c38e0c4f7692157135e24474cc1a3f096445fee37d +0ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 96 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 7 root 0x2f97c0c9ee34b8971d5a1f16bfdd92d82ef324bf2660dd911d2d6c6692e1c9bc +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=82.86007690429688 isBlockOurs=true txCount=1 blockNumber=6 noteEncryptedLogLength=8 noteEncryptedLogCount=0 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=12 +12s - aztec:sequencer Block has been synced +1s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +12s - aztec:note_processor Synched block 6 +12s - aztec:note_processor Synched block 6 +12s - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:node Using committed db for block latest, world state synced upto 6 +9s - aztec:node Using committed db for block latest, world state synced upto 6 +7ms - console.log - exec request is private? undefined - - at ../../pxe/src/pxe_service/pxe_service.ts:477:15 - - aztec:pxe_service Executing simulator... +9s - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +314ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +323ms - aztec:simulator:acvm Oracle callback getNotes +6ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +6ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback callPrivateFunction +90ms - aztec:simulator:client_execution_context Calling private function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0xb77168f2 from 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 +99ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xb77168f2(Token:redeem_shield) +0ms - aztec:simulator:acvm Oracle callback getNullifierMembershipWitness +0ms - aztec:node Using committed db for block 6, world state synced upto 6 +2s - aztec:simulator:acvm Oracle callback getNotes +28ms - aztec:simulator:client_execution_context Returning 1 notes for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 at 0x0000000000000000000000000000000000000000000000000000000000000005: 0x0000000000000000000000000000000000000000000000000000000000000000:[0x0000000000000000000000000000000000000000000000000000000000002710,0x2e142e85fa73ebb055a8356a226ae781f745743bc53cf53055688ff67bad693c] +0ms - aztec:simulator:acvm Oracle callback notifyNullifiedNote +579ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +4ms - aztec:node Using committed db for block 6, world state synced upto 6 +610ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +54ms - aztec:node Using committed db for block 6, world state synced upto 6 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +10ms - aztec:node Using committed db for block 6, world state synced upto 6 +62ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +53ms - aztec:node Using committed db for block 6, world state synced upto 6 +54ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +53ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +51ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +53ms - aztec:node Using committed db for block 6, world state synced upto 6 +53ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +10ms - aztec:node Using committed db for block 6, world state synced upto 6 +62ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +53ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +52ms - aztec:node Using committed db for block 6, world state synced upto 6 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +54ms - aztec:node Using committed db for block 6, world state synced upto 6 +53ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +53ms - aztec:node Using committed db for block 6, world state synced upto 6 +52ms - aztec:simulator:acvm Oracle callback getPublicDataTreeWitness +51ms - aztec:node Using committed db for block 6, world state synced upto 6 +51ms - aztec:simulator:acvm Oracle callback getPublicKeysAndPartialAddress +52ms - aztec:simulator:acvm Oracle callback getRandomField +7ms - aztec:simulator:acvm Oracle callback notifyCreatedNote +4ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +1ms - aztec:simulator:acvm Oracle callback getRandomField +1ms - aztec:simulator:acvm Oracle callback emitEncryptedNoteLog +15ms - aztec:simulator:secret_execution Ran external function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xb77168f2 circuitName=app-circuit duration=2493.6106157302856 eventName=circuit-witness-generation inputSize=1344 outputSize=9944 appCircuitName=Token:redeem_shield +2s - aztec:simulator:secret_execution Returning from call to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xb77168f2 +1ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=4162.882311344147 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +4s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +4s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=149.50654220581055 inputSize=29786 outputSize=65142 +16s - aztec:test_proof_creator Simulated private kernel inner eventName=circuit-simulation circuitName=private-kernel-inner duration=416.1483430862427 inputSize=110646 outputSize=65142 +450ms - aztec:node Using committed db for block latest, world state synced upto 6 +1s - aztec:node Using committed db for block latest, world state synced upto 6 +1ms - aztec:node Using committed db for block latest, world state synced upto 6 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=635.3576393127441 inputSize=129905 outputSize=65142 +653ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=351.9385256767273 inputSize=105713 outputSize=9907 +360ms - aztec:node INFO Simulating tx 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +1s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000007 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000007 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7b6 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +17s - aztec:node Simulated tx 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de succeeds +92ms - aztec:pxe_service INFO Sending transaction 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +2s - aztec:node INFO Received tx 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +0ms - aztec:tx_pool INFO Adding tx with id 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de eventName=tx-added-to-pool txHash=28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de noteEncryptedLogCount=1 encryptedLogCount=0 unencryptedLogCount=0 noteEncryptedLogSize=588 encryptedLogSize=8 unencryptedLogSize=8 newCommitmentCount=1 newNullifierCount=2 proofSize=42 size=10773 feePaymentMethod=none classRegisteredCount=0 +15s - aztec:sequencer Retrieved 1 txs from P2P pool +8s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000007 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000007 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7b6 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +16s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.08068609237670898 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.12247800827026367 operation=get-nullifier-index +0ms - aztec:sequencer:tx_validator:tx_phases Tx 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de does not contain enqueued public functions. Skipping phases validation. +0ms - aztec:sequencer INFO Building block 7 with 1 transactions +6ms - aztec:sequencer Requesting L1 to L2 messages from contract +0ms - aztec:sequencer VERBOSE Retrieved 0 L1 to L2 messages for block 7 +0ms - aztec:prover:proving-orchestrator INFO Starting new block with 2 transactions +10s - aztec:merkle-tree:l1_to_l2_message_tree Inserted 16 leaves into L1_TO_L2_MESSAGE_TREE tree eventName=tree-insertion duration=15.78991413116455 batchSize=16 treeName=L1_TO_L2_MESSAGE_TREE treeDepth=16 treeType=append-only hashCount=31 hashDuration=0.4981553548387097 hashInputsCount=0 hashInputsDuration=NaN +16s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.05326414108276367 operation=get-nullifier-index +0ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.11333703994750977 operation=get-nullifier-index +0ms - aztec:prover:proving-orchestrator INFO Received transaction: 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +18ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=45.500463008880615 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=95 hashDuration=0.4705077894736842 hashInputsCount=0 hashInputsDuration=NaN +14s - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=50.790225982666016 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=103 hashDuration=0.47792776699029127 hashInputsCount=0 hashInputsDuration=NaN +14s - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=66.65726518630981 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=123 hashDuration=0.49834614634146346 hashInputsCount=4 hashInputsDuration=0.776576 +14s - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 0 +173ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup for 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +0ms - aztec:prover-client:prover-pool:queue Adding id=c4d54539 type=BASE_PARITY proving job to queue depth=0 +10s - aztec:prover-client:prover-agent Picked up proving job id=c4d54539 type=BASE_PARITY +10s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.453623294830322 +10s - aztec:prover-client:prover-agent Processed proving job id=c4d54539 type=BASE_PARITY duration=6.344755172729492ms +6ms - aztec:prover-client:prover-pool:queue Adding id=84e58d68 type=BASE_PARITY proving job to queue depth=0 +7ms - aztec:prover-client:prover-pool:queue Adding id=575bd1b2 type=BASE_PARITY proving job to queue depth=1 +0ms - aztec:prover-client:prover-pool:queue Adding id=32401075 type=BASE_PARITY proving job to queue depth=2 +0ms - aztec:prover-client:prover-pool:queue Adding id=9b0ba337 type=BASE_ROLLUP proving job to queue depth=3 +0ms - aztec:prover:proving-orchestrator Padding rollup with 1 empty transactions +12ms - aztec:merkle-tree:note_hash_tree Inserted 64 leaves into NOTE_HASH_TREE tree eventName=tree-insertion duration=46.06472206115723 batchSize=64 treeName=NOTE_HASH_TREE treeDepth=32 treeType=append-only hashCount=96 hashDuration=0.4706893333333333 hashInputsCount=0 hashInputsDuration=NaN +185ms - aztec:merkle-tree:public_data_tree Inserted 64 leaves into PUBLIC_DATA_TREE tree eventName=tree-insertion duration=53.20459222793579 batchSize=64 treeName=PUBLIC_DATA_TREE treeDepth=40 treeType=indexed hashCount=107 hashDuration=0.48218377570093457 hashInputsCount=0 hashInputsDuration=NaN +188ms - aztec:merkle-tree:nullifier_tree Inserted 64 leaves into NULLIFIER_TREE tree eventName=tree-insertion duration=40.977153301239014 batchSize=64 treeName=NULLIFIER_TREE treeDepth=20 treeType=indexed hashCount=87 hashDuration=0.4580222528735632 hashInputsCount=0 hashInputsDuration=NaN +165ms - aztec:prover:proving-orchestrator Enqueuing 1 padding transactions using existing padding tx +150ms - aztec:prover:proving-orchestrator Enqueueing base rollup for tx 1 +0ms - aztec:prover:proving-orchestrator Enqueuing deferred proving base rollup with padding tx for 0000000000000000000000000000000000000000000000000000000000000000 +0ms - aztec:prover-client:prover-pool:queue Adding id=d9c79c96 type=BASE_ROLLUP proving job to queue depth=4 +154ms - aztec:prover-client:prover-agent Picked up proving job id=84e58d68 type=BASE_PARITY +154ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.415520191192627 +161ms - aztec:prover-client:prover-agent Processed proving job id=84e58d68 type=BASE_PARITY duration=6.2490692138671875ms +7ms - aztec:prover-client:prover-agent Picked up proving job id=575bd1b2 type=BASE_PARITY +100ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.532018184661865 +106ms - aztec:prover-client:prover-agent Processed proving job id=575bd1b2 type=BASE_PARITY duration=6.376008033752441ms +6ms - aztec:prover-client:prover-agent Picked up proving job id=32401075 type=BASE_PARITY +99ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-parity inputSize=128 outputSize=64 duration=6.782076358795166 +106ms - aztec:prover-client:prover-agent Processed proving job id=32401075 type=BASE_PARITY duration=6.558590412139893ms +7ms - aztec:prover-client:prover-pool:queue Adding id=d137c87e type=ROOT_PARITY proving job to queue depth=2 +219ms - aztec:prover-client:prover-agent Picked up proving job id=9b0ba337 type=BASE_ROLLUP +99ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-K7majR --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +11s - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=349.16408586502075 +453ms - aztec:prover-client:prover-agent Processed proving job id=9b0ba337 type=BASE_ROLLUP duration=325.9555330276489ms +355ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 28f51b36059acf9ff763bf039161c9ee7e5f6d260407688d1835c2f92c3629de +673ms - aztec:prover-client:prover-agent Picked up proving job id=d9c79c96 type=BASE_ROLLUP +76ms - aztec:acvm-native Calling ACVM with execute --working-directory /tmp/c35c28f2/acvm/tmp-QxneTC --bytecode bytecode --input-witness input_witness.toml --print --output-witness output-witness +431ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=base-rollup inputSize=178970 outputSize=756 duration=327.8179512023926 +410ms - aztec:prover-client:prover-agent Processed proving job id=d9c79c96 type=BASE_ROLLUP duration=304.53484201431274ms +334ms - aztec:prover:proving-orchestrator Completed proof for base rollup for tx 0000000000000000000000000000000000000000000000000000000000000000 +410ms - aztec:prover:proving-orchestrator Not ready for root rollup +0ms - aztec:prover-client:prover-agent Picked up proving job id=d137c87e type=ROOT_PARITY +0ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-parity inputSize=63708 outputSize=64 duration=107.91923809051514 +111ms - aztec:prover-client:prover-agent Processed proving job id=d137c87e type=ROOT_PARITY duration=98.91584920883179ms +110ms - aztec:prover-client:prover-pool:queue Adding id=e795b81d type=ROOT_ROLLUP proving job to queue depth=0 +978ms - aztec:prover-client:prover-agent Picked up proving job id=e795b81d type=ROOT_ROLLUP +81ms - aztec:test-prover Circuit simulation stats eventName=circuit-simulation circuitName=root-rollup inputSize=51229 outputSize=620 duration=153.39553928375244 +236ms - aztec:prover-client:prover-agent Processed proving job id=e795b81d type=ROOT_ROLLUP duration=145.64263725280762ms +156ms - aztec:prover:proving-orchestrator Updating and validating root trees +350ms - aztec:merkle-tree:archive Inserted 1 leaves into ARCHIVE tree eventName=tree-insertion duration=11.266314029693604 batchSize=1 treeName=ARCHIVE treeDepth=16 treeType=append-only hashCount=19 hashDuration=0.577242947368421 hashInputsCount=0 hashInputsDuration=NaN +11s - aztec:prover:proving-orchestrator INFO Successfully proven block 7! +17ms - aztec:sequencer VERBOSE Assembled block 7 eventName=l2-block-built duration=1810.6747508049011 publicProcessDuration=174.78724718093872 rollupCircuitsDuration=1804.8610219955444 txCount=1 blockNumber=7 noteEncryptedLogLength=588 noteEncryptedLogCount=1 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=8 +2s - aztec:sequencer:publisher INFO TxEffects size=837 bytes +11s - aztec:sequencer:publisher INFO Block txs effects published, txsEffectsHash: 0x005e1d5e2a92ef50adc89ff5c0a4a4c0ba820e8deb1f6a80873bcc0ceb597e93 +32ms - aztec:sequencer:publisher INFO Published L2 block to L1 rollup contract gasPrice=1083986358 gasUsed=610273 transactionHash=0x17da5dfb0dab03757f49d1842d254579919872f8368593e30a4d82abe63d3f3f calldataGas=9452 calldataSize=1412 txCount=1 blockNumber=7 noteEncryptedLogLength=588 noteEncryptedLogCount=1 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=8 eventName=rollup-published-to-l1 +24ms - aztec:sequencer INFO Submitted rollup block 7 with 1 transactions +59ms - aztec:archiver VERBOSE Retrieved 1 new L2 blocks between L1 blocks 21 and 22. +12s - aztec:kv-store:lmdb INFO Opening LMDB database at temporary location +0ms - aztec:merkle-tree:temp_in_hash_check Inserted 0 leaves into temp_in_hash_check tree eventName=tree-insertion duration=0.15995073318481445 batchSize=0 treeName=temp_in_hash_check treeDepth=4 treeType=append-only hashCount=4 hashDuration=0.011653 hashInputsCount=0 hashInputsDuration=NaN +0ms - aztec:merkle_trees VERBOSE Block 7 is ours, committing world state +12s - aztec:p2p Synched to block 7 +12s - aztec:merkle_trees Tree NULLIFIER_TREE synched with size 1024 root 0x1c1ec6e2a8c5b6a211e1c60d2d84eb04c6d643002194dec67b38fed0f34d55f0 +29ms - aztec:merkle_trees Tree NOTE_HASH_TREE synched with size 896 root 0x25b59676d01e2f6648812695b313d57817249515b0b382ade619c4c0741c2dcb +0ms - aztec:merkle_trees Tree PUBLIC_DATA_TREE synched with size 1024 root 0x0d14c8dfebdcaafa46e635c38e0c4f7692157135e24474cc1a3f096445fee37d +1ms - aztec:merkle_trees Tree L1_TO_L2_MESSAGE_TREE synched with size 112 root 0x1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80 +0ms - aztec:merkle_trees Tree ARCHIVE synched with size 8 root 0x298fdf13b3f69883507e74986e80d346e6ca69e6f796c5ebaf1a9b2264fded47 +0ms - aztec:world_state VERBOSE Handled new L2 block eventName=l2-block-handled duration=69.74598741531372 isBlockOurs=true txCount=1 blockNumber=7 noteEncryptedLogLength=588 noteEncryptedLogCount=1 encryptedLogLength=8 encryptedLogCount=0 unencryptedLogCount=0 unencryptedLogSize=8 +12s - aztec:sequencer Block has been synced +1s - aztec:pxe_synchronizer Forwarding 1 blocks to 2 note processors +11s - aztec:circuits:artifact_hash Computed artifact hash artifactHash=0x0d64b96f18f00b223e7336af98dd5bb3860c384713c391f93144d8c1c27be4c4 privateFunctionRoot=0x0c183ead62fe70dcf254221e63901ff9a2f60ba3a503ec04dfc4bd8704be2e57 unconstrainedFunctionRoot=0x2c0893a424480e40c70fd53bb0fda589f51be0a437fe5f5b6a6ed6ae42bdc474 metadataHash=0x30049c7691c3880da233c73f83c6d5e4b999deb1601fc0d642ff3681c4f9dd60 +0ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x00000000(compute_note_hash_and_optionally_a_nullifier) +0ms - aztec:simulator:acvm Oracle callback getKeyValidationRequest +0ms - aztec:note_processor VERBOSE Added incoming note for contract 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 at slot 0x22ff83225c75116cbaf94bb545bad6d819bfc9bf11c62ae897e1b50320b9e8b1 with nullifier 0x2a96c642a5dbb8c74a2eea8f7749050cb4a7532e4a2ae24dd4050c6d1a0a520f +11s - aztec:note_processor VERBOSE Removed note for contract 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509 at slot 0x0000000000000000000000000000000000000000000000000000000000000005 with nullifier 0x1c146f2d7d29d0a701011f1bfb8948f4066a505d9fb01e0028793bcb4e4900b2 +2ms - aztec:note_processor Synched block 7 +1ms - aztec:note_processor Synched block 7 +11s - aztec:full_prover_test:full_prover VERBOSE Minting complete. +25s - aztec:snapshot_manager:full_prover_integration/full_prover VERBOSE State transition for mint complete. +37s - aztec:pxe_service Executing simulator... +5s - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +316ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +325ms - aztec:simulator:acvm Oracle callback getNotes +6ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +6ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +7ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e(balance_of_public) +29ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1058.210343837738 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=143.15799617767334 inputSize=29786 outputSize=65142 +41s - aztec:node Using committed db for block latest, world state synced upto 7 +7s - aztec:node Using committed db for block latest, world state synced upto 7 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=593.7777457237244 inputSize=129905 outputSize=65142 +607ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=381.58812189102173 inputSize=105713 outputSize=91287 +392ms - aztec:node INFO Simulating tx 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f +998ms - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000008 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000008 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7c1 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +8s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:balance_of_public. +23s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.0689549446105957 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:balance_of_public returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:balance_of_public duration=11.959120750427246 +12ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e +73ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=549.371838092804 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1103.4218969345093 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f succeeds +2s - aztec:pxe_service INFO Executed local simulation for 0cb20b16bf0c5bfd8f2ce7c1c69e1ea9cef34178720b2b0f488e194e6221376f +3s - aztec:full_prover_test:full_prover VERBOSE Public balance of wallet 0: 10000 +5s - aztec:pxe_service Executing unconstrained simulator... +54ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x98d16d67(balance_of_private) +0ms - aztec:simulator:acvm Oracle callback getBlockNumber +0ms - aztec:simulator:acvm Oracle callback getContractAddress +0ms - aztec:simulator:acvm Oracle callback getNotes +3ms - aztec:pxe_service VERBOSE Unconstrained simulation for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509.balance_of_private completed +7ms - aztec:full_prover_test:full_prover VERBOSE Private balance of wallet 0: 10000 +61ms - aztec:pxe_service Executing simulator... +293ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +313ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +322ms - aztec:simulator:acvm Oracle callback getNotes +5ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +6ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +7ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x3940e9ee(total_supply) +16ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1034.8878636360168 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=130.86825323104858 inputSize=29786 outputSize=65142 +4s - aztec:node Using committed db for block latest, world state synced upto 7 +2s - aztec:node Using committed db for block latest, world state synced upto 7 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=595.9576358795166 inputSize=129905 outputSize=65142 +609ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=381.4476218223572 inputSize=105713 outputSize=91287 +392ms - aztec:node INFO Simulating tx 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 +999ms - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000008 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000008 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7c1 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +5s - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:total_supply. +5s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.11969804763793945 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:total_supply returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:total_supply duration=15.1303391456604 +16ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x3940e9ee +136ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=549.6198053359985 inputSize=121961 outputSize=91286 +0ms - aztec:sequencer:tail VERBOSE Processing tx 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1100.9955911636353 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 succeeds +2s - aztec:pxe_service INFO Executed local simulation for 1f1df34abc521883c8b4eb7466c8a014203e743d67e4f38ece6acb085db43c20 +3s - aztec:full_prover_test:full_prover VERBOSE Total supply: 20000 +5s - aztec:full_prover_test:full_prover VERBOSE Using native ACVM binary at ../../noir/noir-repo/target/release/acvm with working directory /tmp/eb78f672/acvm +7ms - aztec:full_prover_test:full_prover Configuring the node for real proofs... +0ms - aztec:bb-prover INFO Using native BB at /mnt/user-data/mara/aztec-packages/barretenberg/cpp/build/bin/bb and working directory /tmp/bb-iPGGMt +0ms - aztec:bb-prover INFO Using native ACVM at ../../noir/noir-repo/target/release/acvm and working directory /tmp/c35c28f2/acvm +0ms - aztec:bb-verifier Cache miss or forced run. Running operation in /tmp/bb-iPGGMt/vk/PrivateKernelTailArtifact... +0ms - aztec:bb-verifier Cache miss or forced run. Running operation in /tmp/bb-iPGGMt/vk/PrivateKernelTailToPublicArtifact... +1ms - aztec:bb-verifier here in generateKeyForNoirCircuit +0ms - aztec:bb-verifier here in generateKeyForNoirCircuit +0ms - aztec:bb-verifier Executing BB with: write_vk_ultra_honk -o /tmp/bb-iPGGMt/vk/PrivateKernelTailArtifact/vk -b /tmp/bb-iPGGMt/vk/PrivateKernelTailArtifact/bytecode +0ms - aztec:bb-verifier Executing BB with: write_vk_ultra_honk -o /tmp/bb-iPGGMt/vk/PrivateKernelTailToPublicArtifact/vk -b /tmp/bb-iPGGMt/vk/PrivateKernelTailToPublicArtifact/bytecode +35ms - aztec:bb-verifier bb COMMAND is: write_vk_ultra_honk +35ms - aztec:bb-verifier bb COMMAND is: write_vk_ultra_honk +35ms - aztec:bb-verifier gzip: ./target/witness.gz: No such file or directory +134ms - aztec:bb-verifier Input is not large enough +0ms - aztec:bb-verifier write vk result: 1 +4ms - aztec:pxe_service Executing simulator... +791ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback debugLog +316ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +325ms - aztec:simulator:acvm Oracle callback getNotes +7ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +8ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +7ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [4] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x3940e9ee(total_supply) +16ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +159ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [5] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e(balance_of_public) +161ms - aztec:simulator:acvm Oracle callback enqueuePublicFunctionCall +164ms - aztec:simulator:client_execution_context VERBOSE Created PublicCallRequest of type [enqueued], side-effect counter [6] to 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e(balance_of_public) +163ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1062.8680348396301 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=131.45231294631958 inputSize=29786 outputSize=65142 +4s - aztec:node Using committed db for block latest, world state synced upto 7 +2s - aztec:node Using committed db for block latest, world state synced upto 7 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=596.2401762008667 inputSize=129905 outputSize=65142 +609ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=379.8291606903076 inputSize=105713 outputSize=91287 +392ms - aztec:node INFO Simulating tx 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 +1s - aztec:bb-verifier gzip: ./target/witness.gz: No such file or directory +3s - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000008 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000008 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7c1 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +5s - aztec:bb-verifier Input is not large enough +81ms - aztec:bb-verifier write vk result: 1 +0ms - aztec:sequencer:public-processor Beginning processing in phase app-logic for tx 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 +0ms - aztec:sequencer:app-logic VERBOSE Processing tx 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:total_supply. +5s - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.0713338851928711 operation=get-nullifier-index +0ms - aztec:simulator:public_executor VERBOSE [AVM] Token:total_supply returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:total_supply duration=6.316133975982666 +6ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x3940e9ee +89ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=547.8283619880676 inputSize=121961 outputSize=91286 +0ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:balance_of_public. +697ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.060244083404541016 operation=get-nullifier-index +706ms - aztec:simulator:public_executor VERBOSE [AVM] Token:balance_of_public returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:balance_of_public duration=11.483508110046387 +11ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e +707ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=555.485258102417 inputSize=121961 outputSize=91286 +717ms - aztec:simulator:public_executor VERBOSE [AVM] Executing public external function Token:balance_of_public. +704ms - aztec:sequencer:world-state-db VERBOSE [DB] Fetched nullifier index eventName=public-db-access duration=0.1373891830444336 operation=get-nullifier-index +717ms - aztec:simulator:public_executor VERBOSE [AVM] Token:balance_of_public returned, reverted: false, reason: undefined. eventName=avm-simulation appCircuitName=Token:balance_of_public duration=13.322414875030518 +13ms - aztec:sequencer:app-logic Running public kernel circuit for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0xd6421a4e +717ms - aztec:public-kernel-simulator Simulated public kernel app logic circuit eventName=circuit-simulation circuitName=public-kernel-app-logic duration=551.7466111183167 inputSize=121961 outputSize=91286 +713ms - aztec:sequencer:tail VERBOSE Processing tx 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 +0ms - aztec:public-kernel-simulator Simulated public kernel tail circuit eventName=circuit-simulation circuitName=public-kernel-tail duration=1246.1602458953857 inputSize=421222 outputSize=10014 +1s - aztec:node Simulated tx 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 succeeds +4s - aztec:pxe_service INFO Executed local simulation for 234842d9d8a18960716a49e8dfcdabf3fc5fca5e81e14aedafdb6fe2e10f9846 +5s - aztec:pxe_service Executing unconstrained simulator... +64ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x98d16d67(balance_of_private) +0ms - aztec:simulator:acvm Oracle callback getBlockNumber +0ms - aztec:simulator:acvm Oracle callback getContractAddress +0ms - aztec:simulator:acvm Oracle callback getNotes +2ms - aztec:pxe_service VERBOSE Unconstrained simulation for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509.balance_of_private completed +6ms - aztec:pxe_service Executing unconstrained simulator... +81ms - aztec:simulator:unconstrained_execution VERBOSE Executing unconstrained function 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509:0x98d16d67(balance_of_private) +0ms - aztec:simulator:acvm Oracle callback getBlockNumber +0ms - aztec:simulator:acvm Oracle callback getContractAddress +35ms - aztec:simulator:acvm Oracle callback getNotes +2ms - aztec:pxe_service VERBOSE Unconstrained simulation for 0x1bdaf036081b983b67a3d28cd1a7a5dd9ec476c5ca7b5249be88cc3864a11509.balance_of_private completed +41ms - aztec:pxe_service Executing simulator... +279ms - aztec:simulator:secret_execution VERBOSE Executing external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0(SchnorrAccount:entrypoint) +0ms - aztec:simulator:acvm Oracle callback getNotes +0ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +0ms - aztec:simulator:acvm Oracle callback getAuthWitness +8ms - aztec:simulator:acvm Oracle callback debugLog +315ms - aztec:simulator:client_execution_context VERBOSE debug_log Ending setup at counter 0x0000000000000000000000000000000000000000000000000000000000000003 +324ms - aztec:simulator:acvm Oracle callback getNotes +6ms - aztec:simulator:client_execution_context Returning 1 notes for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2 at 0x0000000000000000000000000000000000000000000000000000000000000001: 0x258bb84566c0108a4eccce311ea6bd8e718c93d3cb214ad2d579930d8418a249:[0x2dfd75d091c714727f6c06398ef1095e0b76880c7c98fe195365d3258f0aa046,0x2eb09491e5e615be7638b928e6d29640cee05aaa29b59f0fff2deca76b18319d,0x11605e78006cca94af30eb7baea76752e0479262610da8d8ee3c42475153adb8] +5ms - aztec:simulator:acvm Oracle callback getAuthWitness +9ms - aztec:simulator:secret_execution Ran external function 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 circuitName=app-circuit duration=1037.5519976615906 eventName=circuit-witness-generation inputSize=2304 outputSize=9944 appCircuitName=SchnorrAccount:entrypoint +1s - aztec:simulator:secret_execution Returning from call to 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:0x80056ba0 +0ms - aztec:pxe_service VERBOSE Simulation completed for 0x02a0ce80a7b35c17ef029ee7f69e963cd52b10cd7dd2d2530c3998f1f73f22e2:entrypoint +1s - aztec:pxe_service Executing kernel prover... +0ms - aztec:test_proof_creator Simulated private kernel init eventName=circuit-simulation circuitName=private-kernel-init duration=134.8579363822937 inputSize=29786 outputSize=65142 +5s - aztec:node Using committed db for block latest, world state synced upto 7 +2s - aztec:node Using committed db for block latest, world state synced upto 7 +1ms - aztec:test_proof_creator Simulated private kernel reset eventName=circuit-simulation circuitName=private-kernel-reset-small duration=599.7843589782715 inputSize=129905 outputSize=65142 +612ms - aztec:kernel-prover Calling private kernel tail with hwm 0x0000000000000000000000000000000000000000000000000000000000000003 +0ms - aztec:test_proof_creator Simulated private kernel ordering eventName=circuit-simulation circuitName=private-kernel-tail duration=347.4279570579529 inputSize=105713 outputSize=9907 +358ms - aztec:node INFO Simulating tx 0767b4f870245e58081e69b5f2dbb9888127acc4bace13b56e0be03b44bf3acc +969ms - aztec:sequencer:simple_test_global_variable_builder Built global variables for block 0x0000000000000000000000000000000000000000000000000000000000000008 chainId=0x0000000000000000000000000000000000000000000000000000000000007a69 version=0x0000000000000000000000000000000000000000000000000000000000000001 blockNumber=0x0000000000000000000000000000000000000000000000000000000000000008 timestamp=0x000000000000000000000000000000000000000000000000000000006672b7c1 coinbase=0x0000000000000000000000000000000000000000 feeRecipient=0x0000000000000000000000000000000000000000000000000000000000000000 gasFees=[object Object] +6s - aztec:node Simulated tx 0767b4f870245e58081e69b5f2dbb9888127acc4bace13b56e0be03b44bf3acc succeeds +90ms - aztec:pxe_service INFO Executed local simulation for 0767b4f870245e58081e69b5f2dbb9888127acc4bace13b56e0be03b44bf3acc +1s - aztec:node INFO Stopping +33ms - aztec:sequencer Stopping sequencer +20s - aztec:sequencer INFO Stopped sequencer +0ms - aztec:p2p Stopping p2p client... +21s - aztec:p2p Stopped p2p service +0ms - aztec:p2p Stopped block downloader +0ms - aztec:p2p Moved to state STOPPED +0ms - aztec:p2p INFO P2P client stopped... +0ms - aztec:world_state Stopping world state... +21s - aztec:world_state Cancelling job queue... +0ms - aztec:world_state Stopping Merkle trees +0ms - aztec:world_state Awaiting promise +0ms - aztec:world_state Moved to state STOPPED +0ms - aztec:world_state INFO Stopped +0ms - aztec:archiver Stopping... +21s - aztec:archiver INFO Stopped. +0ms - aztec:prover-client:prover-agent INFO Agent stopped +22s - aztec:prover-client:prover-pool:queue INFO Proving queue stopped +23s - aztec:node INFO Stopped +983ms - aztec:pxe_service INFO Cancelled Job Queue +1s - aztec:pxe_synchronizer INFO Stopped +21s - aztec:pxe_service INFO Stopped Synchronizer +0ms -FAIL src/e2e_prover/full.test.ts - full_prover - ✕ rejects txs with invalid proofs (8999 ms) - ○ skipped makes both public and private transfers - - ● full_prover › makes both public and private transfers - - Failed to created verification key for PrivateKernelTailArtifact, Failed to generate key. Exit code: 1. Signal null. - - 63 | ).then(result => { - 64 | if (result.status === BB_RESULT.FAILURE) { - > 65 | throw new Error(`Failed to created verification key for ${circuit}, ${result.reason}`); - | ^ - 66 | } - 67 | - 68 | return extractVkData(result.vkPath!); - - at ../../bb-prover/src/verifier/bb_verifier.ts:65:15 - at Function.generateVerificationKey (../../bb-prover/src/verifier/bb_verifier.ts:56:12) - at BBCircuitVerifier.getVerificationKeyData (../../bb-prover/src/verifier/bb_verifier.ts:83:16) - at async Promise.all (index 0) - at BBCircuitVerifier.getVerificationKeys (../../bb-prover/src/verifier/bb_verifier.ts:148:66) - at AztecNodeService.setConfig (../../aztec-node/src/aztec-node/server.ts:798:14) - at FullProverTest.setup (e2e_prover/e2e_prover_test.ts:154:5) - at Object. (e2e_prover/full.test.ts:23:5) - - ● full_prover › rejects txs with invalid proofs - - Failed to created verification key for PrivateKernelTailArtifact, Failed to generate key. Exit code: 1. Signal null. - - 63 | ).then(result => { - 64 | if (result.status === BB_RESULT.FAILURE) { - > 65 | throw new Error(`Failed to created verification key for ${circuit}, ${result.reason}`); - | ^ - 66 | } - 67 | - 68 | return extractVkData(result.vkPath!); - - at ../../bb-prover/src/verifier/bb_verifier.ts:65:15 - at Function.generateVerificationKey (../../bb-prover/src/verifier/bb_verifier.ts:56:12) - at BBCircuitVerifier.getVerificationKeyData (../../bb-prover/src/verifier/bb_verifier.ts:83:16) - at async Promise.all (index 0) - at BBCircuitVerifier.getVerificationKeys (../../bb-prover/src/verifier/bb_verifier.ts:148:66) - at AztecNodeService.setConfig (../../aztec-node/src/aztec-node/server.ts:798:14) - at FullProverTest.setup (e2e_prover/e2e_prover_test.ts:154:5) - at Object. (e2e_prover/full.test.ts:23:5) - -Test Suites: 1 failed, 1 total -Tests: 1 failed, 1 skipped, 2 total -Snapshots: 0 total -Time: 118.209 s, estimated 125 s -Ran all test suites matching /full.test.ts/i. -Force exiting Jest: Have you considered using `--detectOpenHandles` to detect async operations that kept running after all tests finished? diff --git a/yarn-project/end-to-end/src/e2e_prover/full_test b/yarn-project/end-to-end/src/e2e_prover/full_test deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/yarn-project/end-to-end/src/e2e_prover/output b/yarn-project/end-to-end/src/e2e_prover/output deleted file mode 100644 index e69de29bb2d..00000000000 From 9d2cbde80a77861c49e65fa05fd539d1b40ae345 Mon Sep 17 00:00:00 2001 From: maramihali Date: Mon, 24 Jun 2024 12:15:49 +0000 Subject: [PATCH 12/15] some cleanup --- .../commitment_schemes/shplonk/shplonk.hpp | 30 +++++++------------ .../shplonk/shplonk.test.cpp | 18 ++++++----- .../src/barretenberg/eccvm/eccvm_prover.cpp | 14 ++++----- .../eccvm/eccvm_transcript.test.cpp | 2 -- .../src/barretenberg/eccvm/eccvm_verifier.cpp | 8 ++--- .../eccvm_recursive_verifier.cpp | 8 ++--- 6 files changed, 35 insertions(+), 45 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index fcde8ed5bf0..8e641f93486 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -20,24 +20,6 @@ */ namespace bb { -/** - * @brief Polynomial G(X) = Q(X) - ∑ₖ ẑₖ(r)⋅( Bₖ(X) − Tₖ(z) ), where Q(X) = ∑ₖ ( Bₖ(X) − Tₖ(X) ) / zₖ(X) - * - * @tparam Curve EC parameters - */ -// template using OutputWitness = bb::Polynomial; - -/** - * @brief Prover output (claim=([G], r, 0), witness = G(X), proof = [Q]) - * that can be passed on to a univariate opening protocol. - * - * @tparam Curve EC parameters - */ -// template struct ShplonkProverOutput { -// OpeningPair opening_pair; // single opening pair (challenge, evaluation) -// OutputWitness witness; // single polynomial G(X) -// }; - /** * @brief Shplonk Prover * @@ -59,7 +41,6 @@ template class ShplonkProver_ { static Polynomial compute_batched_quotient(std::span> opening_claims, const Fr& nu) { // Find n, the maximum size of all polynomials fⱼ(X) - // WORKTODO: the sizes will alwas be the same so do we want this generality? size_t max_poly_size{ 0 }; for (const auto& claim : opening_claims) { max_poly_size = std::max(max_poly_size, claim.polynomial.size()); @@ -136,6 +117,15 @@ template class ShplonkProver_ { return { .polynomial = G, .opening_pair = { .challenge = z_challenge, .evaluation = Fr::zero() } }; }; + /** + * @brief Returns a batched opening claim equivalent to a set of opening claims consisting of polynomials, each + * opened at a single point. + * + * @param commitment_key + * @param opening_claims + * @param transcript + * @return ProverOpeningClaim + */ static ProverOpeningClaim prove(const std::shared_ptr>& commitment_key, std::span> opening_claims, auto& transcript) @@ -164,8 +154,8 @@ template class ShplonkVerifier_ { * @brief Recomputes the new claim commitment [G] given the proof and * the challenge r. No verification happens so this function always succeeds. * + * @param g1_identity the identity element for the Curve * @param claims list of opening claims (Cⱼ, xⱼ, vⱼ) for a witness polynomial fⱼ(X), s.t. fⱼ(xⱼ) = vⱼ. - * @param proof [Q(X)] = [ ∑ⱼ ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( X − xⱼ ) ] * @param transcript * @return OpeningClaim */ diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp index 90c187cb542..b38ae60c930 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp @@ -22,6 +22,8 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) using ShplonkProver = ShplonkProver_; using ShplonkVerifier = ShplonkVerifier_; using Fr = typename TypeParam::ScalarField; + using ProverOpeningClaim = ProverOpeningClaim; + using OpeningClaim = OpeningClaim; const size_t n = 16; @@ -41,23 +43,23 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) const auto commitment2 = this->commit(poly2); // Aggregate polynomials and their opening pairs - std::vector> prover_opening_claims = { { poly1, { r1, eval1 } }, - { poly2, { r2, eval2 } } }; + std::vector prover_opening_claims = { { poly1, { r1, eval1 } }, { poly2, { r2, eval2 } } }; // Execute the shplonk prover functionality - const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); + const auto batched_opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); // An intermediate check to confirm the opening of the shplonk prover witness Q - this->verify_opening_pair(opening_claim.opening_pair, opening_claim.polynomial); + this->verify_opening_pair(batched_opening_claim.opening_pair, batched_opening_claim.polynomial); // Aggregate polynomial commitments and their opening pairs - std::vector opening_claims = { { { r1, eval1 }, commitment1 }, { { r2, eval2 }, commitment2 } }; + std::vector verifier_opening_claims = { { { r1, eval1 }, commitment1 }, + { { r2, eval2 }, commitment2 } }; auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); // Execute the shplonk verifier functionality - const auto verifier_claim = - ShplonkVerifier::reduce_verification(this->vk()->get_g1_identity(), opening_claims, verifier_transcript); + const auto batched_verifier_claim = ShplonkVerifier::reduce_verification( + this->vk()->get_g1_identity(), verifier_opening_claims, verifier_transcript); - this->verify_opening_claim(verifier_claim, opening_claim.polynomial); + this->verify_opening_claim(batched_verifier_claim, opening_claim.polynomial); } } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 59a56382d1c..5b0d1d05057 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -105,9 +105,9 @@ void ECCVMProver::execute_relation_check_rounds() } /** - * @brief Produce a univariate opening claim from the sumcheck multivariate evalutions and a batched univariate claim - * for the transcript polynomials that serves for the Translator consistency check. Reduce the two opening claims to one - * via Shplonk and produce an opening proof with the univariate PCS (IPA when operation on Grumpkin). + * @brief Produce a univariate opening claim for the sumcheck multivariate evalutions and a batched univariate claim + * for the transcript polynomials (for the Translator consistency check). Reduce the two opening claims to a single one + * via Shplonk and produce an opening proof with the univariate PCS of choice (IPA when operating on Grumpkin). * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled ZeroMorph * protocol. * @@ -140,10 +140,10 @@ void ECCVMProver::execute_pcs_rounds() } transcript->send_to_verifier("Translation:hack_commitment", commitment_key->commit(hack)); - // Get the challenge at which we evaluate all the polynomials as univariates + // Get the challenge at which we evaluate all transcript polynomials as univariates evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - // Evaluation the transcript polynomials at the challenge + // Evaluate the transcript polynomials at the challenge translation_evaluations.op = key->polynomials.transcript_op.evaluate(evaluation_challenge_x); translation_evaluations.Px = key->polynomials.transcript_Px.evaluate(evaluation_challenge_x); translation_evaluations.Py = key->polynomials.transcript_Py.evaluate(evaluation_challenge_x); @@ -160,7 +160,7 @@ void ECCVMProver::execute_pcs_rounds() FF hack_evaluation = hack.evaluate(evaluation_challenge_x); transcript->send_to_verifier("Translation:hack_evaluation", hack_evaluation); - // Get another challenge for batching the univariates + // Get another challenge for batching the univariates and evaluations FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); // Collect the polynomials and evaluations to be batched @@ -193,7 +193,7 @@ void ECCVMProver::execute_pcs_rounds() PCS::compute_opening_proof( commitment_key, batched_opening_claim.opening_pair, batched_opening_claim.polynomial, transcript); - // Produce another challenge for batching the univariate claims in the translator verifier + // Produce another challenge passed as input to the translator verifier translation_batching_challenge_v = transcript->template get_challenge("Translation:batching_challenge"); } diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp index 5531786a007..9eaedc9df93 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_transcript.test.cpp @@ -256,8 +256,6 @@ TEST_F(ECCVMTranscriptTests, ProverManifestConsistency) this->construct_eccvm_honk_manifest(prover.key->circuit_size, prover.sumcheck_output.challenge.size()); auto prover_manifest = prover.transcript->get_manifest(); // Note: a manifest can be printed using manifest.print() - prover_manifest.print(); - manifest_expected.print(); for (size_t round = 0; round < manifest_expected.size(); ++round) { ASSERT_EQ(prover_manifest[round], manifest_expected[round]) << "Prover manifest discrepency in round " << round; } diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp index 5764a80c026..2c1e3d6dc57 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_verifier.cpp @@ -74,7 +74,7 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - // Construct arrays of commitments and evaluations to be batched, with the evaluations received from the prover + // Construct arrays of commitments and evaluations to be batched, the evaluations being received from the prover const size_t NUM_UNIVARIATES = 6; std::array transcript_commitments = { commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, @@ -89,10 +89,10 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) transcript->template receive_from_prover("Translation:hack_evaluation") }; - // Get another challenge for batching the univariate claims + // Get the batching challenge for commitments and evaluations FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); - // Construct the batched commitment and batched evaluation + // Compute the batched commitment and batched evaluation for the univariate opening claim auto batched_commitment = transcript_commitments[0]; auto batched_transcript_eval = transcript_evaluations[0]; auto batching_scalar = ipa_batching_challenge; @@ -106,7 +106,7 @@ bool ECCVMVerifier::verify_proof(const HonkProof& proof) { { evaluation_challenge_x, batched_transcript_eval }, batched_commitment } }; - // Construct and verify batched opening claim + // Construct and verify the combined opening claim auto batched_opening_claim = Shplonk::reduce_verification(key->pcs_verification_key->get_g1_identity(), opening_claims, transcript); diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index 1c65973c94c..4705d71c426 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -86,7 +86,7 @@ template void ECCVMRecursiveVerifier_::verify_proof(co FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - // Construct arrays of commitments and evaluations to be batched + // Construc the vector of commitments (needs to be vector for the batch_mul) and array of evaluations to be batched std::vector transcript_commitments = { commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, commitments.transcript_z1, commitments.transcript_z2, hack_commitment }; @@ -99,10 +99,10 @@ template void ECCVMRecursiveVerifier_::verify_proof(co transcript->template receive_from_prover( "Translation:hack_evaluation") }; - // Get another challenge for batching the univariate claims + // Get the batching challenge for commitments and evaluations FF ipa_batching_challenge = transcript->template get_challenge("Translation:ipa_batching_challenge"); - // Construct batched commitment and batched evaluation + // Compute the batched commitment and batched evaluation for the univariate opening claim auto batched_transcript_eval = transcript_evaluations[0]; auto batching_scalar = ipa_batching_challenge; @@ -114,7 +114,7 @@ template void ECCVMRecursiveVerifier_::verify_proof(co } auto batched_commitment = Commitment::batch_mul(transcript_commitments, batching_challenges); - // Construct and verify the batched opening claim + // Construct and verify the combined opening claim OpeningClaim batched_univariate_claim = { { evaluation_challenge_x, batched_transcript_eval }, batched_commitment }; From b9414c2da0debacbe350421f5315c51c7d70cc3b Mon Sep 17 00:00:00 2001 From: maramihali Date: Mon, 24 Jun 2024 12:38:19 +0000 Subject: [PATCH 13/15] fix typo --- .../barretenberg/commitment_schemes/shplonk/shplonk.test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp index b38ae60c930..299ee846a2a 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.test.cpp @@ -60,6 +60,6 @@ TYPED_TEST(ShplonkTest, ShplonkSimple) const auto batched_verifier_claim = ShplonkVerifier::reduce_verification( this->vk()->get_g1_identity(), verifier_opening_claims, verifier_transcript); - this->verify_opening_claim(batched_verifier_claim, opening_claim.polynomial); + this->verify_opening_claim(batched_verifier_claim, batched_opening_claim.polynomial); } } // namespace bb From 34dcfc56ddf643362d4abe4c001cc6c10d2fe5f4 Mon Sep 17 00:00:00 2001 From: maramihali Date: Tue, 25 Jun 2024 11:34:07 +0000 Subject: [PATCH 14/15] respond to review comments --- .../barretenberg/benchmark/ipa_bench/ipa.bench.cpp | 2 +- .../barretenberg/commitment_schemes/ipa/ipa.hpp | 12 +++++++----- .../commitment_schemes/ipa/ipa.test.cpp | 12 ++++++------ .../barretenberg/commitment_schemes/kzg/kzg.hpp | 14 +++++++------- .../commitment_schemes/kzg/kzg.test.cpp | 4 ++-- .../commitment_schemes/shplonk/shplonk.hpp | 2 +- .../zeromorph/zeromorph.test.cpp | 10 ++-------- .../cpp/src/barretenberg/eccvm/eccvm_prover.cpp | 5 ++--- .../eccvm_recursion/eccvm_recursive_verifier.cpp | 2 +- .../translator_vm/translator_prover.cpp | 3 +-- .../src/barretenberg/ultra_honk/decider_prover.cpp | 3 +-- .../src/barretenberg/vm/generated/avm_prover.cpp | 3 +-- 12 files changed, 32 insertions(+), 40 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ipa_bench/ipa.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ipa_bench/ipa.bench.cpp index 2f4b2cd88f4..fac0f30f3b5 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ipa_bench/ipa.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ipa_bench/ipa.bench.cpp @@ -43,7 +43,7 @@ void ipa_open(State& state) noexcept auto prover_transcript = std::make_shared(); state.ResumeTiming(); // Compute proof - IPA::compute_opening_proof(ck, opening_pair, poly, prover_transcript); + IPA::compute_opening_proof(ck, { poly, opening_pair }, prover_transcript); // Store info for verifier prover_transcripts[static_cast(state.range(0)) - MIN_POLYNOMIAL_DEGREE_LOG2] = prover_transcript; opening_claims[static_cast(state.range(0)) - MIN_POLYNOMIAL_DEGREE_LOG2] = opening_claim; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp index 288ad34b3ab..0fcc7c65841 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp @@ -130,10 +130,12 @@ template class IPA { */ template static void compute_opening_proof_internal(const std::shared_ptr& ck, - const OpeningPair& opening_pair, - const Polynomial& polynomial, + const ProverOpeningClaim& opening_claim, const std::shared_ptr& transcript) { + + Polynomial polynomial = opening_claim.polynomial; + // clang-format on auto poly_length = static_cast(polynomial.size()); @@ -184,6 +186,7 @@ template class IPA { // Step 5. // Compute vector b (vector of the powers of the challenge) + OpeningPair opening_pair = opening_claim.opening_pair; std::vector b_vec(poly_length); run_loop_in_parallel_if_effective( poly_length, @@ -603,11 +606,10 @@ template class IPA { * compute_opening_proof_internal \endlink. */ static void compute_opening_proof(const std::shared_ptr& ck, - const OpeningPair& opening_pair, - const Polynomial& polynomial, + const ProverOpeningClaim& opening_claim, const std::shared_ptr& transcript) { - compute_opening_proof_internal(ck, opening_pair, polynomial, transcript); + compute_opening_proof_internal(ck, opening_claim, transcript); } /** diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp index 738edf40758..db8a2597a5b 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp @@ -67,7 +67,7 @@ TEST_F(IPATest, OpenZeroPolynomial) // initialize empty prover transcript auto prover_transcript = std::make_shared(); - IPA::compute_opening_proof(this->ck(), opening_pair, poly, prover_transcript); + IPA::compute_opening_proof(this->ck(), { poly, opening_pair }, prover_transcript); // initialize verifier transcript from proof data auto verifier_transcript = std::make_shared(prover_transcript->proof_data); @@ -92,7 +92,7 @@ TEST_F(IPATest, OpenAtZero) // initialize empty prover transcript auto prover_transcript = std::make_shared(); - IPA::compute_opening_proof(this->ck(), opening_pair, poly, prover_transcript); + IPA::compute_opening_proof(this->ck(), { poly, opening_pair }, prover_transcript); // initialize verifier transcript from proof data auto verifier_transcript = std::make_shared(prover_transcript->proof_data); @@ -131,7 +131,7 @@ TEST_F(IPATest, ChallengesAreZero) auto new_random_vector = random_vector; new_random_vector[i] = Fr::zero(); transcript->initialize(new_random_vector); - EXPECT_ANY_THROW(IPA::compute_opening_proof_internal(this->ck(), opening_pair, poly, transcript)); + EXPECT_ANY_THROW(IPA::compute_opening_proof_internal(this->ck(), { poly, opening_pair }, transcript)); } // Fill out a vector of affine elements that the verifier receives from the prover with generators (we don't care // about them right now) @@ -181,7 +181,7 @@ TEST_F(IPATest, AIsZeroAfterOneRound) transcript->initialize(random_vector); // Compute opening proof - IPA::compute_opening_proof_internal(this->ck(), opening_pair, poly, transcript); + IPA::compute_opening_proof_internal(this->ck(), { poly, opening_pair }, transcript); // Reset indices transcript->reset_indices(); @@ -221,7 +221,7 @@ TEST_F(IPATest, Open) // initialize empty prover transcript auto prover_transcript = std::make_shared(); - IPA::compute_opening_proof(this->ck(), opening_pair, poly, prover_transcript); + IPA::compute_opening_proof(this->ck(), { poly, opening_pair }, prover_transcript); // initialize verifier transcript from proof data auto verifier_transcript = std::make_shared(prover_transcript->proof_data); @@ -306,7 +306,7 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) opening_claims.emplace_back(gemini_witnesses[log_n], gemini_opening_pairs[log_n]); const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); - IPA::compute_opening_proof(this->ck(), opening_claim.opening_pair, opening_claim.polynomial, prover_transcript); + IPA::compute_opening_proof(this->ck(), opening_claim, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp index c763f3a2ecf..a067b224fc6 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp @@ -26,19 +26,19 @@ template class KZG { * @brief Computes the KZG commitment to an opening proof polynomial at a single evaluation point * * @param ck The commitment key which has a commit function, the srs and pippenger_runtime_state - * @param opening_pair OpeningPair = {r, v = p(r)} - * @param polynomial The witness whose opening proof needs to be computed + * @param opening_claim {p, (r, v = p(r))} where p is the witness polynomial whose opening proof needs to be + * computed * @param prover_transcript Prover transcript */ static void compute_opening_proof(std::shared_ptr ck, - const OpeningPair& opening_pair, - const Polynomial& polynomial, + const ProverOpeningClaim& opening_claim, const std::shared_ptr& prover_trancript) { - Polynomial quotient = polynomial; - quotient[0] -= opening_pair.evaluation; + Polynomial quotient = opening_claim.polynomial; + OpeningPair pair = opening_claim.opening_pair; + quotient[0] -= pair.evaluation; // Computes the coefficients for the quotient polynomial q(X) = (p(X) - v) / (X - r) through an FFT - quotient.factor_roots(opening_pair.challenge); + quotient.factor_roots(pair.challenge); auto quotient_commitment = ck->commit(quotient); // TODO(#479): for now we compute the KZG commitment directly to unify the KZG and IPA interfaces but in the // future we might need to adjust this to use the incoming alternative to work queue (i.e. variation of diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp index 72cf6ac6ab6..5dd1fa892c4 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp @@ -41,7 +41,7 @@ TYPED_TEST(KZGTest, single) auto prover_transcript = NativeTranscript::prover_init_empty(); - KZG::compute_opening_proof(this->ck(), opening_pair, witness, prover_transcript); + KZG::compute_opening_proof(this->ck(), { witness, opening_pair }, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); auto pairing_points = KZG::reduce_verify(opening_claim, verifier_transcript); @@ -146,7 +146,7 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) // KZG prover: // - Adds commitment [W] to transcript - KZG::compute_opening_proof(this->ck(), opening_claim.opening_pair, opening_claim.polynomial, prover_transcript); + KZG::compute_opening_proof(this->ck(), opening_claim, prover_transcript); // Run the full verifier PCS protocol with genuine opening claims (genuine commitment, genuine evaluation) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index 8e641f93486..9eac7b4a48c 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -94,7 +94,7 @@ template class ShplonkProver_ { // G(X) = Q(X) - Q_z(X) = Q(X) - ∑ⱼ ρʲ ⋅ ( fⱼ(X) − vⱼ) / ( r − xⱼ ), // s.t. G(r) = 0 - Polynomial G(batched_quotient_Q); // G(X) = Q(X) + Polynomial G(std::move(batched_quotient_Q)); // G(X) = Q(X) // G₀ = ∑ⱼ ρʲ ⋅ vⱼ / ( r − xⱼ ) Fr current_nu = Fr::one(); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp index 3ce54297fba..122fcb1187f 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.test.cpp @@ -220,10 +220,7 @@ template class ZeroMorphTest : public CommitmentTestcommitment_key, prover_transcript); - PCS::compute_opening_proof(this->commitment_key, - prover_opening_claim.opening_pair, - prover_opening_claim.polynomial, - prover_transcript); + PCS::compute_opening_proof(this->commitment_key, prover_opening_claim, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); @@ -274,10 +271,7 @@ template class ZeroMorphTest : public CommitmentTestcommitment_key, - prover_opening_claim.opening_pair, - prover_opening_claim.polynomial, - prover_transcript); + PCS::compute_opening_proof(this->commitment_key, prover_opening_claim, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 5b0d1d05057..3215ffac416 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -133,7 +133,7 @@ void ECCVMProver::execute_pcs_rounds() // Batch open the transcript polynomials as univariates for Translator consistency check. Since IPA cannot // currently handle polynomials for which the latter half of the coefficients are 0, we hackily // batch the constant polynomial 1 in with the 5 transcript polynomials. - + // TODO(https://github.com/AztecProtocol/barretenberg/issues/768): fix IPA to avoid the need for the hack polynomial Polynomial hack(key->circuit_size); for (size_t idx = 0; idx < key->circuit_size; idx++) { hack[idx] = 1; @@ -190,8 +190,7 @@ void ECCVMProver::execute_pcs_rounds() const OpeningClaim batched_opening_claim = Shplonk::prove(commitment_key, opening_claims, transcript); // Compute the opening proof for the batched opening claim with the univariate PCS - PCS::compute_opening_proof( - commitment_key, batched_opening_claim.opening_pair, batched_opening_claim.polynomial, transcript); + PCS::compute_opening_proof(commitment_key, batched_opening_claim, transcript); // Produce another challenge passed as input to the translator verifier translation_batching_challenge_v = transcript->template get_challenge("Translation:batching_challenge"); diff --git a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp index 4705d71c426..4ceb6478179 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm_recursion/eccvm_recursive_verifier.cpp @@ -86,7 +86,7 @@ template void ECCVMRecursiveVerifier_::verify_proof(co FF evaluation_challenge_x = transcript->template get_challenge("Translation:evaluation_challenge_x"); - // Construc the vector of commitments (needs to be vector for the batch_mul) and array of evaluations to be batched + // Construct the vector of commitments (needs to be vector for the batch_mul) and array of evaluations to be batched std::vector transcript_commitments = { commitments.transcript_op, commitments.transcript_Px, commitments.transcript_Py, commitments.transcript_z1, commitments.transcript_z2, hack_commitment }; diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp index 7b3e8f7b74d..0d103c30291 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_prover.cpp @@ -183,8 +183,7 @@ void TranslatorProver::execute_pcs_rounds() key->polynomials.get_concatenated_constraints(), sumcheck_output.claimed_evaluations.get_concatenated_constraints(), key->polynomials.get_concatenation_groups()); - PCS::compute_opening_proof( - commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); + PCS::compute_opening_proof(commitment_key, prover_opening_claim, transcript); } HonkProof TranslatorProver::export_proof() diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp index 1999ec92160..854ec137bf0 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp @@ -49,8 +49,7 @@ template void DeciderProver_::execute_pcs_rounds( sumcheck_output.challenge, commitment_key, transcript); - PCS::compute_opening_proof( - commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); + PCS::compute_opening_proof(commitment_key, prover_opening_claim, transcript); } template HonkProof DeciderProver_::export_proof() diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp index df045145c6c..129b1d6cc06 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp @@ -974,8 +974,7 @@ void AvmProver::execute_pcs_rounds() sumcheck_output.challenge, commitment_key, transcript); - PCS::compute_opening_proof( - commitment_key, prover_opening_claim.opening_pair, prover_opening_claim.polynomial, transcript); + PCS::compute_opening_proof(commitment_key, prover_opening_claim, transcript); } HonkProof AvmProver::export_proof() From 9db7e0dc14ff6f0396ff84dce9db752a45da76b9 Mon Sep 17 00:00:00 2001 From: maramihali Date: Tue, 25 Jun 2024 11:36:55 +0000 Subject: [PATCH 15/15] fix fuzzer --- .../src/barretenberg/commitment_schemes/ipa/ipa.fuzzer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.fuzzer.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.fuzzer.cpp index cebb8c59c7a..df6c3ec3115 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.fuzzer.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.fuzzer.cpp @@ -21,11 +21,10 @@ class ProxyCaller { public: template static void compute_opening_proof_internal(const std::shared_ptr>& ck, - const OpeningPair& opening_pair, - const Polynomial& polynomial, + const ProverOpeningClaim& opening_claim, const std::shared_ptr& transcript) { - IPA::compute_opening_proof_internal(ck, opening_pair, polynomial, transcript); + IPA::compute_opening_proof_internal(ck, opening_claim, transcript); } template static bool verify_internal(const std::shared_ptr>& vk, @@ -145,7 +144,7 @@ extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) } auto const opening_pair = OpeningPair{ x, poly.evaluate(x) }; auto const opening_claim = OpeningClaim{ opening_pair, ck->commit(poly) }; - ProxyCaller::compute_opening_proof_internal(ck, opening_pair, poly, transcript); + ProxyCaller::compute_opening_proof_internal(ck, { poly, opening_pair }, transcript); // Reset challenge indices transcript->reset_indices();