From b14c6a422eb23879e427aecc66130b0718089571 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 6 Mar 2025 12:09:10 -0500 Subject: [PATCH] Revert "fix: Revert "make vk metadata actual witnesses" (#12534)" This reverts commit ed46a3c69fd4270ab57d6afaaad868696a9c29a2. --- .../src/barretenberg/eccvm/eccvm_flavor.hpp | 6 +++-- .../cpp/src/barretenberg/flavor/flavor.hpp | 20 ++++++---------- .../eccvm_verifier/eccvm_recursive_flavor.hpp | 11 +++++---- .../eccvm_recursive_verifier.cpp | 1 + .../eccvm_recursive_verifier.test.cpp | 8 ++++--- .../decider_recursive_verifier.cpp | 6 +++-- .../honk_verifier/oink_recursive_verifier.cpp | 24 ++++++++++++------- .../ultra_recursive_verifier.cpp | 3 ++- .../ultra_recursive_verifier.test.cpp | 6 ++--- .../recursive_decider_verification_key.hpp | 10 ++++---- .../recursive_decider_verification_keys.hpp | 6 +++-- .../translator_recursive_flavor.hpp | 11 +++++---- .../translator_recursive_verifier.cpp | 3 ++- .../translator_recursive_verifier.test.cpp | 8 ++++--- .../stdlib_circuit_builders/mega_flavor.hpp | 4 ++-- .../mega_recursive_flavor.hpp | 22 +++++++++-------- .../stdlib_circuit_builders/ultra_flavor.hpp | 4 ++-- .../ultra_keccak_flavor.hpp | 2 +- .../ultra_recursive_flavor.hpp | 17 ++++++------- .../ultra_rollup_flavor.hpp | 2 +- .../ultra_rollup_recursive_flavor.hpp | 17 ++++++------- .../translator_vm/translator_flavor.hpp | 5 ++-- .../barretenberg/vm/avm/generated/flavor.cpp | 15 +++++------- .../barretenberg/vm/avm/generated/flavor.hpp | 6 +++-- .../vm/avm/generated/recursive_verifier.cpp | 5 ++-- .../vm/avm/recursion/recursive_flavor.hpp | 8 +++---- .../vm/avm/tests/recursive_verifier.test.cpp | 5 ++-- .../src/barretenberg/vm2/generated/flavor.cpp | 15 +++++------- .../src/barretenberg/vm2/generated/flavor.hpp | 6 +++-- .../bb-pil-backend/templates/flavor.cpp.hbs | 8 +++---- .../bb-pil-backend/templates/flavor.hpp.hbs | 6 +++-- 31 files changed, 146 insertions(+), 124 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp index f5900be3d18..f0349c669c9 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp @@ -112,8 +112,9 @@ class ECCVMFlavor { * @brief A base class labelling precomputed entities and (ordered) subsets of interest. * @details Used to build the proving key and verification key. */ - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: + bool operator==(const PrecomputedEntities& other) const = default; using DataType = DataType_; DEFINE_FLAVOR_MEMBERS(DataType, lagrange_first, // column 0 @@ -750,8 +751,9 @@ class ECCVMFlavor { * resolve that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for * portability of our circuits. */ - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: + bool operator==(const VerificationKey&) const = default; VerificationKey() = default; VerificationKey(const size_t circuit_size, const size_t num_public_inputs) : VerificationKey_(circuit_size, num_public_inputs) diff --git a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp index bb779cfc6c4..2e741a04452 100644 --- a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp @@ -87,17 +87,6 @@ namespace bb { -/** - * @brief Base class template containing circuit-specifying data. - * - */ -class PrecomputedEntitiesBase { - public: - bool operator==(const PrecomputedEntitiesBase& other) const = default; - uint64_t circuit_size; - uint64_t log_circuit_size; - uint64_t num_public_inputs; -}; // Specifies the regions of the execution trace containing non-trivial wire values struct ActiveRegionData { void add_range(const size_t start, const size_t end) @@ -164,18 +153,23 @@ template class ProvingKey_ { /** * @brief Base verification key class. * + * @tparam FF_, the type that we will represent our VK metadata (circuit_size, log_circuit_size, num_public_inputs, + * pub_inputs_offset). It will either be uint64_t or a stdlib field type. * @tparam PrecomputedEntities An instance of PrecomputedEntities_ with affine_element data type and handle type. * @tparam VerifierCommitmentKey The PCS verification key */ -template +template class VerificationKey_ : public PrecomputedCommitments { public: using FF = typename VerifierCommitmentKey::Curve::ScalarField; using Commitment = typename VerifierCommitmentKey::Commitment; std::shared_ptr pcs_verification_key; + FF_ circuit_size; + FF_ log_circuit_size; + FF_ num_public_inputs; + FF_ pub_inputs_offset = 0; bool contains_pairing_point_accumulator = false; PairingPointAccumulatorPubInputIndices pairing_point_accumulator_public_input_indices = {}; - uint64_t pub_inputs_offset = 0; bool operator==(const VerificationKey_&) const = default; VerificationKey_() = default; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp index 498c4bc4998..139163cf2b6 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp @@ -87,7 +87,7 @@ template class ECCVMRecursiveFlavor_ { * portability of our circuits. */ class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey(const size_t circuit_size, const size_t num_public_inputs) { @@ -108,10 +108,11 @@ template class ECCVMRecursiveFlavor_ { { this->pcs_verification_key = std::make_shared( builder, native_key->circuit_size, native_key->pcs_verification_key); - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; - this->pub_inputs_offset = native_key->pub_inputs_offset; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size)); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); + this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset); for (auto [native_commitment, commitment] : zip_view(native_key->get_all(), this->get_all())) { commitment = Commitment::from_witness(builder, native_commitment); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp index deed4b9a67a..dc196852512 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp @@ -69,6 +69,7 @@ ECCVMRecursiveVerifier_::verify_proof(const ECCVMProof& proof) commitments.z_perm = transcript->template receive_from_prover(commitment_labels.z_perm); // Execute Sumcheck Verifier + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value(). const size_t log_circuit_size = numeric::get_msb(static_cast(circuit_size.get_value())); auto sumcheck = SumcheckVerifier(log_circuit_size, transcript); const FF alpha = transcript->template get_challenge("Sumcheck:alpha"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.test.cpp index 462ea1bd4d2..f276e82c38d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.test.cpp @@ -110,9 +110,11 @@ template class ECCVMRecursiveTests : public ::testing } // Ensure verification key is the same - EXPECT_EQ(verifier.key->circuit_size, verification_key->circuit_size); - EXPECT_EQ(verifier.key->log_circuit_size, verification_key->log_circuit_size); - EXPECT_EQ(verifier.key->num_public_inputs, verification_key->num_public_inputs); + EXPECT_EQ(static_cast(verifier.key->circuit_size.get_value()), verification_key->circuit_size); + EXPECT_EQ(static_cast(verifier.key->log_circuit_size.get_value()), + verification_key->log_circuit_size); + EXPECT_EQ(static_cast(verifier.key->num_public_inputs.get_value()), + verification_key->num_public_inputs); for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), verification_key->get_all())) { EXPECT_EQ(vk_poly.get_value(), native_vk_poly); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp index ad6f36b99d8..cd31a58bcdf 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp @@ -26,8 +26,10 @@ std::array DeciderRecursiveVerifier_:: VerifierCommitments commitments{ accumulator->verification_key, accumulator->witness_commitments }; - auto sumcheck = Sumcheck( - static_cast(accumulator->verification_key->log_circuit_size), transcript, accumulator->target_sum); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): fix log_circuit_size usage in stdlib cases. + auto sumcheck = Sumcheck(static_cast(accumulator->verification_key->log_circuit_size.get_value()), + transcript, + accumulator->target_sum); SumcheckOutput output = sumcheck.verify(accumulator->relation_parameters, accumulator->alphas, accumulator->gate_challenges); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp index 630f5a6e1e8..54192707d0a 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp @@ -47,22 +47,27 @@ template void OinkRecursiveVerifier_::verify() FF public_input_size = transcript->template receive_from_prover(domain_separator + "public_input_size"); FF pub_inputs_offset = transcript->template receive_from_prover(domain_separator + "pub_inputs_offset"); - if (static_cast(circuit_size.get_value()) != verification_key->verification_key->circuit_size) { + if (static_cast(circuit_size.get_value()) != + static_cast(verification_key->verification_key->circuit_size.get_value())) { throw_or_abort("OinkRecursiveVerifier::verify: proof circuit size does not match verification key"); } - if (static_cast(public_input_size.get_value()) != verification_key->verification_key->num_public_inputs) { - const std::string message = "OinkRecursiveVerifier::verify: proof public input size (" + - std::to_string(static_cast(public_input_size.get_value())) + - ") does not match verification key public input size (" + - std::to_string(verification_key->verification_key->num_public_inputs) + ")"; + if (static_cast(public_input_size.get_value()) != + static_cast(verification_key->verification_key->num_public_inputs.get_value())) { + const std::string message = + "OinkRecursiveVerifier::verify: proof public input size (" + + std::to_string(static_cast(public_input_size.get_value())) + + ") does not match verification key public input size (" + + std::to_string(static_cast(verification_key->verification_key->num_public_inputs.get_value())) + + ")"; throw_or_abort(message); } - if (static_cast(pub_inputs_offset.get_value()) != verification_key->verification_key->pub_inputs_offset) { + if (static_cast(pub_inputs_offset.get_value()) != + static_cast(verification_key->verification_key->pub_inputs_offset.get_value())) { throw_or_abort("OinkRecursiveVerifier::verify: proof public input offset does not match verification key"); } std::vector public_inputs; - for (size_t i = 0; i < verification_key->verification_key->num_public_inputs; ++i) { + for (size_t i = 0; i < static_cast(static_cast(public_input_size.get_value())); ++i) { public_inputs.emplace_back( transcript->template receive_from_prover(domain_separator + "public_input_" + std::to_string(i))); } @@ -109,12 +114,13 @@ template void OinkRecursiveVerifier_::verify() } } + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value(). const FF public_input_delta = compute_public_input_delta( public_inputs, beta, gamma, circuit_size, - static_cast(verification_key->verification_key->pub_inputs_offset)); + static_cast(verification_key->verification_key->pub_inputs_offset.get_value())); // Get commitment to permutation and lookup grand products commitments.z_perm = transcript->template receive_from_prover(domain_separator + labels.z_perm); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp index 011117161d9..decd6ca91b0 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp @@ -104,7 +104,8 @@ UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_ // Execute Sumcheck Verifier and extract multivariate opening point u = (u_0, ..., u_{d-1}) and purported // multivariate evaluations at u - const size_t log_circuit_size = numeric::get_msb(static_cast(key->circuit_size)); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value(). + const size_t log_circuit_size = numeric::get_msb(static_cast(key->circuit_size.get_value())); auto sumcheck = Sumcheck(log_circuit_size, transcript); // Receive commitments to Libra masking polynomials diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp index 591a80722d0..6e8072c7582 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp @@ -128,9 +128,9 @@ template class RecursiveVerifierTest : public testing RecursiveVerifier verifier{ &outer_circuit, honk_vk }; // Spot check some values in the recursive VK to ensure it was constructed correctly - EXPECT_EQ(verifier.key->circuit_size, honk_vk->circuit_size); - EXPECT_EQ(verifier.key->log_circuit_size, honk_vk->log_circuit_size); - EXPECT_EQ(verifier.key->num_public_inputs, honk_vk->num_public_inputs); + EXPECT_EQ(static_cast(verifier.key->circuit_size.get_value()), honk_vk->circuit_size); + EXPECT_EQ(static_cast(verifier.key->log_circuit_size.get_value()), honk_vk->log_circuit_size); + EXPECT_EQ(static_cast(verifier.key->num_public_inputs.get_value()), honk_vk->num_public_inputs); for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), honk_vk->get_all())) { EXPECT_EQ(vk_poly.get_value(), native_vk_poly); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp index e11674a2c82..edaab8b4bd3 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp @@ -100,12 +100,13 @@ template class RecursiveDeciderVerificationKey_ { */ DeciderVerificationKey get_value() { - auto native_honk_vk = std::make_shared(verification_key->circuit_size, - verification_key->num_public_inputs); + auto native_honk_vk = std::make_shared( + static_cast(verification_key->circuit_size.get_value()), + static_cast(verification_key->num_public_inputs.get_value())); native_honk_vk->pcs_verification_key = verification_key->pcs_verification_key == nullptr ? std::make_shared() : verification_key->pcs_verification_key; - native_honk_vk->pub_inputs_offset = verification_key->pub_inputs_offset; + native_honk_vk->pub_inputs_offset = static_cast(verification_key->pub_inputs_offset.get_value()); native_honk_vk->contains_pairing_point_accumulator = verification_key->contains_pairing_point_accumulator; native_honk_vk->pairing_point_accumulator_public_input_indices = verification_key->pairing_point_accumulator_public_input_indices; @@ -120,7 +121,8 @@ template class RecursiveDeciderVerificationKey_ { DeciderVerificationKey decider_vk(native_honk_vk); decider_vk.is_accumulator = is_accumulator; - decider_vk.public_inputs = std::vector(static_cast(verification_key->num_public_inputs)); + decider_vk.public_inputs = std::vector( + static_cast(static_cast(verification_key->num_public_inputs.get_value()))); for (auto [public_input, inst_public_input] : zip_view(public_inputs, decider_vk.public_inputs)) { inst_public_input = public_input.get_value(); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp index 9a2361b7a9b..6b256553816 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp @@ -45,8 +45,10 @@ template struct RecursiveDeciderVerific { size_t max_log_circuit_size{ 0 }; for (auto key : _data) { - max_log_circuit_size = - std::max(max_log_circuit_size, static_cast(key->verification_key->log_circuit_size)); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value. + max_log_circuit_size = std::max( + max_log_circuit_size, + static_cast(static_cast(key->verification_key->log_circuit_size.get_value()))); } return max_log_circuit_size; } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp index 526208e2ee8..ee6689df0bc 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp @@ -93,7 +93,7 @@ template class TranslatorRecursiveFlavor_ { * portability of our circuits. */ class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey(const size_t circuit_size, const size_t num_public_inputs) { @@ -105,10 +105,11 @@ template class TranslatorRecursiveFlavor_ { VerificationKey(CircuitBuilder* builder, const std::shared_ptr& native_key) { this->pcs_verification_key = std::make_shared(); // ? - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; - this->pub_inputs_offset = native_key->pub_inputs_offset; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = numeric::get_msb(native_key->circuit_size); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); + this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset); for (auto [native_comm, comm] : zip_view(native_key->get_all(), this->get_all())) { comm = Commitment::from_witness(builder, native_comm); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp index 3f97cd1e81e..7a1be373a1b 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp @@ -77,7 +77,7 @@ std::array TranslatorRecursiveVerifier_template receive_from_prover("circuit_size"); - if (static_cast(circuit_size.get_value()) != key->circuit_size) { + if (static_cast(circuit_size.get_value()) != static_cast(key->circuit_size.get_value())) { throw_or_abort( "TranslatorRecursiveVerifier::verify_proof: proof circuit size does not match verification key!"); } @@ -104,6 +104,7 @@ std::array TranslatorRecursiveVerifier_template receive_from_prover(commitment_labels.z_perm); // Execute Sumcheck Verifier + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value(). const size_t log_circuit_size = numeric::get_msb(static_cast(circuit_size.get_value())); auto sumcheck = Sumcheck(log_circuit_size, transcript); FF alpha = transcript->template get_challenge("Sumcheck:alpha"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp index 4434b8ed0d8..2c33dbcce45 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp @@ -108,9 +108,11 @@ template class TranslatorRecursiveTests : public ::te << "Recursive Verifier/Verifier manifest discrepency in round " << i; } - EXPECT_EQ(verifier.key->circuit_size, verification_key->circuit_size); - EXPECT_EQ(verifier.key->log_circuit_size, verification_key->log_circuit_size); - EXPECT_EQ(verifier.key->num_public_inputs, verification_key->num_public_inputs); + EXPECT_EQ(static_cast(verifier.key->circuit_size.get_value()), verification_key->circuit_size); + EXPECT_EQ(static_cast(verifier.key->log_circuit_size.get_value()), + verification_key->log_circuit_size); + EXPECT_EQ(static_cast(verifier.key->num_public_inputs.get_value()), + verification_key->num_public_inputs); for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), verification_key->get_all())) { EXPECT_EQ(vk_poly.get_value(), native_vk_poly); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp index f3162aa4f4f..85ddf06b1d8 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp @@ -103,7 +103,7 @@ class MegaFlavor { * @brief A base class labelling precomputed entities and (ordered) subsets of interest. * @details Used to build the proving key and verification key. */ - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: bool operator==(const PrecomputedEntities&) const = default; using DataType = DataType_; @@ -429,7 +429,7 @@ class MegaFlavor { * circuits. * @todo TODO(https://github.com/AztecProtocol/barretenberg/issues/876) */ - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: // Data pertaining to transfer of databus return data via public inputs of the proof being recursively verified DatabusPropagationData databus_propagation_data; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp index 2be8002ae47..dba8b85befd 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp @@ -103,7 +103,7 @@ template class MegaRecursiveFlavor_ { * This differs from Mega in how we construct the commitments. */ class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: // Data pertaining to transfer of databus return data via public inputs of the proof DatabusPropagationData databus_propagation_data; @@ -125,10 +125,11 @@ template class MegaRecursiveFlavor_ { VerificationKey(CircuitBuilder* builder, const std::shared_ptr& native_key) { this->pcs_verification_key = native_key->pcs_verification_key; - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; - this->pub_inputs_offset = native_key->pub_inputs_offset; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size)); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); + this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset); this->contains_pairing_point_accumulator = native_key->contains_pairing_point_accumulator; this->pairing_point_accumulator_public_input_indices = native_key->pairing_point_accumulator_public_input_indices; @@ -152,10 +153,11 @@ template class MegaRecursiveFlavor_ { size_t num_frs_read = 0; - this->circuit_size = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->pub_inputs_offset = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); + this->circuit_size = deserialize_from_frs(builder, elements, num_frs_read); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = numeric::get_msb(static_cast(this->circuit_size.get_value())); + this->num_public_inputs = deserialize_from_frs(builder, elements, num_frs_read); + this->pub_inputs_offset = deserialize_from_frs(builder, elements, num_frs_read); this->contains_pairing_point_accumulator = bool(deserialize_from_frs(builder, elements, num_frs_read).get_value()); @@ -211,4 +213,4 @@ template class MegaRecursiveFlavor_ { using Transcript = bb::BaseTranscript>; }; -} // namespace bb \ No newline at end of file +} // namespace bb 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 85d817eea2b..a04779fe52d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp @@ -130,7 +130,7 @@ class UltraFlavor { * @brief A base class labelling precomputed entities and (ordered) subsets of interest. * @details Used to build the proving key and verification key. */ - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: bool operator==(const PrecomputedEntities&) const = default; using DataType = DataType_; @@ -357,7 +357,7 @@ class UltraFlavor { * that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for portability of our * circuits. */ - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: bool operator==(const VerificationKey&) const = default; VerificationKey() = default; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp index 65f9b029e84..5ff26a6aded 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp @@ -36,7 +36,7 @@ class UltraKeccakFlavor : public bb::UltraFlavor { */ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1094): Add aggregation to the verifier contract so the // VerificationKey from UltraFlavor can be used - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey() = default; VerificationKey(const size_t circuit_size, const size_t num_public_inputs) diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp index 2e19373a8c6..776d3c6482a 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp @@ -106,7 +106,7 @@ template class UltraRecursiveFlavor_ { * circuits. */ class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey(const size_t circuit_size, const size_t num_public_inputs) { @@ -124,10 +124,11 @@ template class UltraRecursiveFlavor_ { VerificationKey(CircuitBuilder* builder, const std::shared_ptr& native_key) { this->pcs_verification_key = native_key->pcs_verification_key; - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; - this->pub_inputs_offset = native_key->pub_inputs_offset; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size)); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); + this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset); this->contains_pairing_point_accumulator = native_key->contains_pairing_point_accumulator; this->pairing_point_accumulator_public_input_indices = native_key->pairing_point_accumulator_public_input_indices; @@ -150,9 +151,9 @@ template class UltraRecursiveFlavor_ { size_t num_frs_read = 0; - this->circuit_size = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->num_public_inputs = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->pub_inputs_offset = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); + this->circuit_size = deserialize_from_frs(builder, elements, num_frs_read); + this->num_public_inputs = deserialize_from_frs(builder, elements, num_frs_read); + this->pub_inputs_offset = deserialize_from_frs(builder, elements, num_frs_read); this->contains_pairing_point_accumulator = bool(deserialize_from_frs(builder, elements, num_frs_read).get_value()); diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_flavor.hpp index 6376f1d3f68..1fce8326f15 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_flavor.hpp @@ -38,7 +38,7 @@ class UltraRollupFlavor : public bb::UltraFlavor { * that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for portability of our * circuits. */ - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: virtual ~VerificationKey() = default; bool contains_ipa_claim; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_recursive_flavor.hpp index 96276a00773..2f7a4b42800 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_rollup_recursive_flavor.hpp @@ -51,7 +51,7 @@ template class UltraRollupRecursiveFlavor_ : public Ultra * circuits. */ class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: bool contains_ipa_claim; // needs to be a circuit constant IPAClaimPubInputIndices ipa_claim_public_input_indices; // needs to be a circuit constant @@ -74,10 +74,11 @@ template class UltraRollupRecursiveFlavor_ : public Ultra , ipa_claim_public_input_indices(native_key->ipa_claim_public_input_indices) { this->pcs_verification_key = native_key->pcs_verification_key; - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; - this->pub_inputs_offset = native_key->pub_inputs_offset; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb. + this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size)); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); + this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset); this->contains_pairing_point_accumulator = native_key->contains_pairing_point_accumulator; this->pairing_point_accumulator_public_input_indices = native_key->pairing_point_accumulator_public_input_indices; @@ -100,9 +101,9 @@ template class UltraRollupRecursiveFlavor_ : public Ultra size_t num_frs_read = 0; - this->circuit_size = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->num_public_inputs = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); - this->pub_inputs_offset = uint64_t(deserialize_from_frs(builder, elements, num_frs_read).get_value()); + this->circuit_size = deserialize_from_frs(builder, elements, num_frs_read); + this->num_public_inputs = deserialize_from_frs(builder, elements, num_frs_read); + this->pub_inputs_offset = deserialize_from_frs(builder, elements, num_frs_read); this->contains_pairing_point_accumulator = bool(deserialize_from_frs(builder, elements, num_frs_read).get_value()); for (uint32_t& idx : this->pairing_point_accumulator_public_input_indices) { diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/translator_flavor.hpp b/barretenberg/cpp/src/barretenberg/translator_vm/translator_flavor.hpp index 891db762e16..a5d8cdd80b3 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/translator_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/translator_flavor.hpp @@ -140,8 +140,9 @@ class TranslatorFlavor { * @brief A base class labelling precomputed entities and (ordered) subsets of interest. * @details Used to build the proving key and verification key. */ - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: + bool operator==(const PrecomputedEntities& other) const = default; using DataType = DataType_; DEFINE_FLAVOR_MEMBERS(DataType, ordered_extra_range_constraints_numerator, // column 0 @@ -693,7 +694,7 @@ class TranslatorFlavor { * resolve that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for * portability of our circuits. */ - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey() = default; VerificationKey(const size_t circuit_size, const size_t num_public_inputs) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp index 7944617776c..303db921572 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp @@ -87,16 +87,13 @@ AvmFlavor::PartiallyEvaluatedMultivariates::PartiallyEvaluatedMultivariates(cons AvmFlavor::ProvingKey::ProvingKey(const size_t circuit_size, const size_t num_public_inputs) : circuit_size(circuit_size) + , log_circuit_size(numeric::get_msb(circuit_size)) + , num_public_inputs(num_public_inputs) , evaluation_domain(bb::EvaluationDomain(circuit_size, circuit_size)) - , commitment_key(std::make_shared(circuit_size + 1)) -{ - // TODO: These come from PrecomputedEntitiesBase, ideal we'd just call that class's constructor. - this->log_circuit_size = numeric::get_msb(circuit_size); - this->num_public_inputs = num_public_inputs; - - // The proving key's polynomials are not allocated here because they are later overwritten - // AvmComposer::compute_witness(). We should probably refactor this flow. -}; + , commitment_key(std::make_shared(circuit_size + 1)){ + // The proving key's polynomials are not allocated here because they are later overwritten + // AvmComposer::compute_witness(). We should probably refactor this flow. + }; /** * @brief Serialize verification key to field elements diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp index d8beb9b415c..17ae017e9b4 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp @@ -222,7 +222,7 @@ class AvmFlavor { "AVM circuit. In this case, modify AVM_VERIFICATION_LENGTH_IN_FIELDS \n" "in constants.nr accordingly."); - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: DEFINE_FLAVOR_MEMBERS(DataType, AVM_PRECOMPUTED_ENTITIES) DEFINE_GETTERS(DEFAULT_GETTERS, AVM_PRECOMPUTED_ENTITIES) @@ -297,6 +297,8 @@ class AvmFlavor { ProvingKey(const size_t circuit_size, const size_t num_public_inputs); size_t circuit_size; + size_t log_circuit_size; + size_t num_public_inputs; bb::EvaluationDomain evaluation_domain; std::shared_ptr commitment_key; @@ -313,7 +315,7 @@ class AvmFlavor { auto get_to_be_shifted() { return AvmFlavor::get_to_be_shifted(*this); } }; - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: using FF = VerificationKey_::FF; static constexpr size_t NUM_PRECOMPUTED_COMMITMENTS = NUM_PRECOMPUTED_ENTITIES; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/recursive_verifier.cpp index 9f2e6a04322..9f0b7389713 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/recursive_verifier.cpp @@ -34,7 +34,8 @@ Flavor::FF AvmRecursiveVerifier_::evaluate_public_input_column(const std auto coefficients = SharedShiftedVirtualZeroesArray{ .start_ = 0, .end_ = points.size(), - .virtual_size_ = key->circuit_size, // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays) + .virtual_size_ = + static_cast(key->circuit_size.get_value()), // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays) .backing_memory_ = std::static_pointer_cast(get_mem_slab(sizeof(FF) * points.size())), }; @@ -87,7 +88,7 @@ AvmRecursiveVerifier_::AggregationObject AvmRecursiveVerifier_:: VerifierCommitments commitments{ key }; const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - if (static_cast(circuit_size.get_value()) != key->circuit_size) { + if (static_cast(circuit_size.get_value()) != static_cast(key->circuit_size.get_value())) { throw_or_abort("AvmRecursiveVerifier::verify_proof: proof circuit size does not match verification key!"); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/recursion/recursive_flavor.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/recursion/recursive_flavor.hpp index d0c56264c66..5e641e0900f 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/recursion/recursive_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/recursion/recursive_flavor.hpp @@ -55,14 +55,14 @@ template class AvmRecursiveFlavor_ { }; class VerificationKey - : public VerificationKey_, VerifierCommitmentKey> { + : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey(CircuitBuilder* builder, const std::shared_ptr& native_key) { this->pcs_verification_key = native_key->pcs_verification_key; - this->circuit_size = native_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = native_key->num_public_inputs; + this->circuit_size = FF::from_witness(builder, native_key->circuit_size); + this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size)); + this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs); for (auto [native_comm, comm] : zip_view(native_key->get_all(), this->get_all())) { comm = Commitment::from_witness(builder, native_comm); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/recursive_verifier.test.cpp index a9d0d9231cc..722c2cc8e47 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/recursive_verifier.test.cpp @@ -131,8 +131,9 @@ TEST_F(AvmRecursiveTests, recursion) EXPECT_EQ(key_el, rec_key_el.get_value()); } - EXPECT_EQ(verifier.key->circuit_size, recursive_verifier.key->circuit_size); - EXPECT_EQ(verifier.key->num_public_inputs, recursive_verifier.key->num_public_inputs); + EXPECT_EQ(verifier.key->circuit_size, static_cast(recursive_verifier.key->circuit_size.get_value())); + EXPECT_EQ(verifier.key->num_public_inputs, + static_cast(recursive_verifier.key->num_public_inputs.get_value())); // Make a proof of the verification of an AVM proof const size_t srs_size = 1 << 23; diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.cpp b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.cpp index c9532339e2f..1c03a5ead94 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.cpp @@ -87,16 +87,13 @@ AvmFlavor::PartiallyEvaluatedMultivariates::PartiallyEvaluatedMultivariates(cons AvmFlavor::ProvingKey::ProvingKey(const size_t circuit_size, const size_t num_public_inputs) : circuit_size(circuit_size) + , log_circuit_size(numeric::get_msb(circuit_size)) + , num_public_inputs(num_public_inputs) , evaluation_domain(bb::EvaluationDomain(circuit_size, circuit_size)) - , commitment_key(std::make_shared(circuit_size + 1)) -{ - // TODO: These come from PrecomputedEntitiesBase, ideal we'd just call that class's constructor. - this->log_circuit_size = numeric::get_msb(circuit_size); - this->num_public_inputs = num_public_inputs; - - // The proving key's polynomials are not allocated here because they are later overwritten - // AvmComposer::compute_witness(). We should probably refactor this flow. -}; + , commitment_key(std::make_shared(circuit_size + 1)){ + // The proving key's polynomials are not allocated here because they are later overwritten + // AvmComposer::compute_witness(). We should probably refactor this flow. + }; /** * @brief Serialize verification key to field elements diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp index e0f417be8c6..c3dc8eb1ec9 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp @@ -175,7 +175,7 @@ class AvmFlavor { (NUM_WITNESS_ENTITIES + 1) * NUM_FRS_COM + (NUM_ALL_ENTITIES + 1) * NUM_FRS_FR + CONST_PROOF_SIZE_LOG_N * (NUM_FRS_COM + NUM_FRS_FR * (BATCHED_RELATION_PARTIAL_LENGTH + 1)); - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: DEFINE_FLAVOR_MEMBERS(DataType, AVM2_PRECOMPUTED_ENTITIES) DEFINE_GETTERS(DEFAULT_GETTERS, AVM2_PRECOMPUTED_ENTITIES) @@ -250,6 +250,8 @@ class AvmFlavor { ProvingKey(const size_t circuit_size, const size_t num_public_inputs); size_t circuit_size; + size_t log_circuit_size; + size_t num_public_inputs; bb::EvaluationDomain evaluation_domain; std::shared_ptr commitment_key; @@ -266,7 +268,7 @@ class AvmFlavor { auto get_to_be_shifted() { return AvmFlavor::get_to_be_shifted(*this); } }; - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: using FF = VerificationKey_::FF; static constexpr size_t NUM_PRECOMPUTED_COMMITMENTS = NUM_PRECOMPUTED_ENTITIES; diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.cpp.hbs index 2697dd00e8c..acbe703b7a1 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.cpp.hbs @@ -86,13 +86,11 @@ AvmFlavor::PartiallyEvaluatedMultivariates::PartiallyEvaluatedMultivariates(cons AvmFlavor::ProvingKey::ProvingKey(const size_t circuit_size, const size_t num_public_inputs) : circuit_size(circuit_size) + , log_circuit_size(numeric::get_msb(circuit_size)) + , num_public_inputs(num_public_inputs) , evaluation_domain(bb::EvaluationDomain(circuit_size, circuit_size)) , commitment_key(std::make_shared(circuit_size + 1)) { - // TODO: These come from PrecomputedEntitiesBase, ideal we'd just call that class's constructor. - this->log_circuit_size = numeric::get_msb(circuit_size); - this->num_public_inputs = num_public_inputs; - // The proving key's polynomials are not allocated here because they are later overwritten // AvmComposer::compute_witness(). We should probably refactor this flow. }; @@ -113,4 +111,4 @@ std::vector AvmFlavor::VerificationKey::to_field return elements; } -} // namespace bb::{{snakeCase name}} \ No newline at end of file +} // namespace bb::{{snakeCase name}} diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs index 41478a97888..f5e8281423b 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs @@ -135,7 +135,7 @@ class AvmFlavor { "in constants.nr accordingly."); {{/if}} - template class PrecomputedEntities : public PrecomputedEntitiesBase { + template class PrecomputedEntities { public: DEFINE_FLAVOR_MEMBERS(DataType, {{shoutySnakeCase name}}_PRECOMPUTED_ENTITIES) DEFINE_GETTERS(DEFAULT_GETTERS, {{shoutySnakeCase name}}_PRECOMPUTED_ENTITIES) @@ -212,6 +212,8 @@ class AvmFlavor { ProvingKey(const size_t circuit_size, const size_t num_public_inputs); size_t circuit_size; + size_t log_circuit_size; + size_t num_public_inputs; bb::EvaluationDomain evaluation_domain; std::shared_ptr commitment_key; @@ -228,7 +230,7 @@ class AvmFlavor { auto get_to_be_shifted() { return AvmFlavor::get_to_be_shifted(*this); } }; - class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: using FF = VerificationKey_::FF; static constexpr size_t NUM_PRECOMPUTED_COMMITMENTS = NUM_PRECOMPUTED_ENTITIES;