Skip to content

Commit ed46a3c

Browse files
authored
fix: Revert "make vk metadata actual witnesses" (#12534)
1 parent 2e0d791 commit ed46a3c

31 files changed

+124
-146
lines changed

barretenberg/cpp/src/barretenberg/eccvm/eccvm_flavor.hpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,8 @@ class ECCVMFlavor {
112112
* @brief A base class labelling precomputed entities and (ordered) subsets of interest.
113113
* @details Used to build the proving key and verification key.
114114
*/
115-
template <typename DataType_> class PrecomputedEntities {
115+
template <typename DataType_> class PrecomputedEntities : public PrecomputedEntitiesBase {
116116
public:
117-
bool operator==(const PrecomputedEntities& other) const = default;
118117
using DataType = DataType_;
119118
DEFINE_FLAVOR_MEMBERS(DataType,
120119
lagrange_first, // column 0
@@ -751,9 +750,8 @@ class ECCVMFlavor {
751750
* resolve that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for
752751
* portability of our circuits.
753752
*/
754-
class VerificationKey : public VerificationKey_<uint64_t, PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
753+
class VerificationKey : public VerificationKey_<PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
755754
public:
756-
bool operator==(const VerificationKey&) const = default;
757755
VerificationKey() = default;
758756
VerificationKey(const size_t circuit_size, const size_t num_public_inputs)
759757
: VerificationKey_(circuit_size, num_public_inputs)

barretenberg/cpp/src/barretenberg/flavor/flavor.hpp

+13-7
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@
8787

8888
namespace bb {
8989

90+
/**
91+
* @brief Base class template containing circuit-specifying data.
92+
*
93+
*/
94+
class PrecomputedEntitiesBase {
95+
public:
96+
bool operator==(const PrecomputedEntitiesBase& other) const = default;
97+
uint64_t circuit_size;
98+
uint64_t log_circuit_size;
99+
uint64_t num_public_inputs;
100+
};
90101
// Specifies the regions of the execution trace containing non-trivial wire values
91102
struct ActiveRegionData {
92103
void add_range(const size_t start, const size_t end)
@@ -153,23 +164,18 @@ template <typename FF, typename CommitmentKey_> class ProvingKey_ {
153164
/**
154165
* @brief Base verification key class.
155166
*
156-
* @tparam FF_, the type that we will represent our VK metadata (circuit_size, log_circuit_size, num_public_inputs,
157-
* pub_inputs_offset). It will either be uint64_t or a stdlib field type.
158167
* @tparam PrecomputedEntities An instance of PrecomputedEntities_ with affine_element data type and handle type.
159168
* @tparam VerifierCommitmentKey The PCS verification key
160169
*/
161-
template <typename FF_, typename PrecomputedCommitments, typename VerifierCommitmentKey>
170+
template <typename PrecomputedCommitments, typename VerifierCommitmentKey>
162171
class VerificationKey_ : public PrecomputedCommitments {
163172
public:
164173
using FF = typename VerifierCommitmentKey::Curve::ScalarField;
165174
using Commitment = typename VerifierCommitmentKey::Commitment;
166175
std::shared_ptr<VerifierCommitmentKey> pcs_verification_key;
167-
FF_ circuit_size;
168-
FF_ log_circuit_size;
169-
FF_ num_public_inputs;
170-
FF_ pub_inputs_offset = 0;
171176
bool contains_pairing_point_accumulator = false;
172177
PairingPointAccumulatorPubInputIndices pairing_point_accumulator_public_input_indices = {};
178+
uint64_t pub_inputs_offset = 0;
173179

174180
bool operator==(const VerificationKey_&) const = default;
175181
VerificationKey_() = default;

barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ template <typename BuilderType> class ECCVMRecursiveFlavor_ {
8787
* portability of our circuits.
8888
*/
8989
class VerificationKey
90-
: public VerificationKey_<FF, ECCVMFlavor::PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
90+
: public VerificationKey_<ECCVMFlavor::PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
9191
public:
9292
VerificationKey(const size_t circuit_size, const size_t num_public_inputs)
9393
{
@@ -108,11 +108,10 @@ template <typename BuilderType> class ECCVMRecursiveFlavor_ {
108108
{
109109
this->pcs_verification_key = std::make_shared<VerifierCommitmentKey>(
110110
builder, native_key->circuit_size, native_key->pcs_verification_key);
111-
this->circuit_size = FF::from_witness(builder, native_key->circuit_size);
112-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb.
113-
this->log_circuit_size = FF::from_witness(builder, numeric::get_msb(native_key->circuit_size));
114-
this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs);
115-
this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset);
111+
this->circuit_size = native_key->circuit_size;
112+
this->log_circuit_size = numeric::get_msb(this->circuit_size);
113+
this->num_public_inputs = native_key->num_public_inputs;
114+
this->pub_inputs_offset = native_key->pub_inputs_offset;
116115

117116
for (auto [native_commitment, commitment] : zip_view(native_key->get_all(), this->get_all())) {
118117
commitment = Commitment::from_witness(builder, native_commitment);

barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ ECCVMRecursiveVerifier_<Flavor>::verify_proof(const ECCVMProof& proof)
6969
commitments.z_perm = transcript->template receive_from_prover<Commitment>(commitment_labels.z_perm);
7070

7171
// Execute Sumcheck Verifier
72-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value().
7372
const size_t log_circuit_size = numeric::get_msb(static_cast<uint32_t>(circuit_size.get_value()));
7473
auto sumcheck = SumcheckVerifier<Flavor>(log_circuit_size, transcript);
7574
const FF alpha = transcript->template get_challenge<FF>("Sumcheck:alpha");

barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.test.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,9 @@ template <typename RecursiveFlavor> class ECCVMRecursiveTests : public ::testing
110110
}
111111

112112
// Ensure verification key is the same
113-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->circuit_size.get_value()), verification_key->circuit_size);
114-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->log_circuit_size.get_value()),
115-
verification_key->log_circuit_size);
116-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->num_public_inputs.get_value()),
117-
verification_key->num_public_inputs);
113+
EXPECT_EQ(verifier.key->circuit_size, verification_key->circuit_size);
114+
EXPECT_EQ(verifier.key->log_circuit_size, verification_key->log_circuit_size);
115+
EXPECT_EQ(verifier.key->num_public_inputs, verification_key->num_public_inputs);
118116
for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), verification_key->get_all())) {
119117
EXPECT_EQ(vk_poly.get_value(), native_vk_poly);
120118
}

barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ std::array<typename Flavor::GroupElement, 2> DeciderRecursiveVerifier_<Flavor>::
2626

2727
VerifierCommitments commitments{ accumulator->verification_key, accumulator->witness_commitments };
2828

29-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): fix log_circuit_size usage in stdlib cases.
30-
auto sumcheck = Sumcheck(static_cast<uint32_t>(accumulator->verification_key->log_circuit_size.get_value()),
31-
transcript,
32-
accumulator->target_sum);
29+
auto sumcheck = Sumcheck(
30+
static_cast<size_t>(accumulator->verification_key->log_circuit_size), transcript, accumulator->target_sum);
3331

3432
SumcheckOutput<Flavor> output =
3533
sumcheck.verify(accumulator->relation_parameters, accumulator->alphas, accumulator->gate_challenges);

barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp

+9-15
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,22 @@ template <typename Flavor> void OinkRecursiveVerifier_<Flavor>::verify()
4747
FF public_input_size = transcript->template receive_from_prover<FF>(domain_separator + "public_input_size");
4848
FF pub_inputs_offset = transcript->template receive_from_prover<FF>(domain_separator + "pub_inputs_offset");
4949

50-
if (static_cast<uint32_t>(circuit_size.get_value()) !=
51-
static_cast<uint32_t>(verification_key->verification_key->circuit_size.get_value())) {
50+
if (static_cast<uint32_t>(circuit_size.get_value()) != verification_key->verification_key->circuit_size) {
5251
throw_or_abort("OinkRecursiveVerifier::verify: proof circuit size does not match verification key");
5352
}
54-
if (static_cast<uint32_t>(public_input_size.get_value()) !=
55-
static_cast<uint32_t>(verification_key->verification_key->num_public_inputs.get_value())) {
56-
const std::string message =
57-
"OinkRecursiveVerifier::verify: proof public input size (" +
58-
std::to_string(static_cast<uint32_t>(public_input_size.get_value())) +
59-
") does not match verification key public input size (" +
60-
std::to_string(static_cast<uint32_t>(verification_key->verification_key->num_public_inputs.get_value())) +
61-
")";
53+
if (static_cast<uint32_t>(public_input_size.get_value()) != verification_key->verification_key->num_public_inputs) {
54+
const std::string message = "OinkRecursiveVerifier::verify: proof public input size (" +
55+
std::to_string(static_cast<uint32_t>(public_input_size.get_value())) +
56+
") does not match verification key public input size (" +
57+
std::to_string(verification_key->verification_key->num_public_inputs) + ")";
6258
throw_or_abort(message);
6359
}
64-
if (static_cast<uint32_t>(pub_inputs_offset.get_value()) !=
65-
static_cast<uint32_t>(verification_key->verification_key->pub_inputs_offset.get_value())) {
60+
if (static_cast<uint32_t>(pub_inputs_offset.get_value()) != verification_key->verification_key->pub_inputs_offset) {
6661
throw_or_abort("OinkRecursiveVerifier::verify: proof public input offset does not match verification key");
6762
}
6863

6964
std::vector<FF> public_inputs;
70-
for (size_t i = 0; i < static_cast<size_t>(static_cast<uint32_t>(public_input_size.get_value())); ++i) {
65+
for (size_t i = 0; i < verification_key->verification_key->num_public_inputs; ++i) {
7166
public_inputs.emplace_back(
7267
transcript->template receive_from_prover<FF>(domain_separator + "public_input_" + std::to_string(i)));
7368
}
@@ -114,13 +109,12 @@ template <typename Flavor> void OinkRecursiveVerifier_<Flavor>::verify()
114109
}
115110
}
116111

117-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value().
118112
const FF public_input_delta = compute_public_input_delta<Flavor>(
119113
public_inputs,
120114
beta,
121115
gamma,
122116
circuit_size,
123-
static_cast<uint32_t>(verification_key->verification_key->pub_inputs_offset.get_value()));
117+
static_cast<uint32_t>(verification_key->verification_key->pub_inputs_offset));
124118

125119
// Get commitment to permutation and lookup grand products
126120
commitments.z_perm = transcript->template receive_from_prover<Commitment>(domain_separator + labels.z_perm);

barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,7 @@ UltraRecursiveVerifier_<Flavor>::Output UltraRecursiveVerifier_<Flavor>::verify_
104104

105105
// Execute Sumcheck Verifier and extract multivariate opening point u = (u_0, ..., u_{d-1}) and purported
106106
// multivariate evaluations at u
107-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value().
108-
const size_t log_circuit_size = numeric::get_msb(static_cast<uint32_t>(key->circuit_size.get_value()));
107+
const size_t log_circuit_size = numeric::get_msb(static_cast<uint32_t>(key->circuit_size));
109108
auto sumcheck = Sumcheck(log_circuit_size, transcript);
110109

111110
// Receive commitments to Libra masking polynomials

barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ template <typename RecursiveFlavor> class RecursiveVerifierTest : public testing
128128
RecursiveVerifier verifier{ &outer_circuit, honk_vk };
129129

130130
// Spot check some values in the recursive VK to ensure it was constructed correctly
131-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->circuit_size.get_value()), honk_vk->circuit_size);
132-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->log_circuit_size.get_value()), honk_vk->log_circuit_size);
133-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->num_public_inputs.get_value()), honk_vk->num_public_inputs);
131+
EXPECT_EQ(verifier.key->circuit_size, honk_vk->circuit_size);
132+
EXPECT_EQ(verifier.key->log_circuit_size, honk_vk->log_circuit_size);
133+
EXPECT_EQ(verifier.key->num_public_inputs, honk_vk->num_public_inputs);
134134
for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), honk_vk->get_all())) {
135135
EXPECT_EQ(vk_poly.get_value(), native_vk_poly);
136136
}

barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,12 @@ template <IsRecursiveFlavor Flavor> class RecursiveDeciderVerificationKey_ {
100100
*/
101101
DeciderVerificationKey get_value()
102102
{
103-
auto native_honk_vk = std::make_shared<NativeVerificationKey>(
104-
static_cast<uint64_t>(verification_key->circuit_size.get_value()),
105-
static_cast<uint64_t>(verification_key->num_public_inputs.get_value()));
103+
auto native_honk_vk = std::make_shared<NativeVerificationKey>(verification_key->circuit_size,
104+
verification_key->num_public_inputs);
106105
native_honk_vk->pcs_verification_key = verification_key->pcs_verification_key == nullptr
107106
? std::make_shared<VerifierCommitmentKey>()
108107
: verification_key->pcs_verification_key;
109-
native_honk_vk->pub_inputs_offset = static_cast<uint64_t>(verification_key->pub_inputs_offset.get_value());
108+
native_honk_vk->pub_inputs_offset = verification_key->pub_inputs_offset;
110109
native_honk_vk->contains_pairing_point_accumulator = verification_key->contains_pairing_point_accumulator;
111110
native_honk_vk->pairing_point_accumulator_public_input_indices =
112111
verification_key->pairing_point_accumulator_public_input_indices;
@@ -121,8 +120,7 @@ template <IsRecursiveFlavor Flavor> class RecursiveDeciderVerificationKey_ {
121120
DeciderVerificationKey decider_vk(native_honk_vk);
122121
decider_vk.is_accumulator = is_accumulator;
123122

124-
decider_vk.public_inputs = std::vector<NativeFF>(
125-
static_cast<size_t>(static_cast<uint32_t>(verification_key->num_public_inputs.get_value())));
123+
decider_vk.public_inputs = std::vector<NativeFF>(static_cast<size_t>(verification_key->num_public_inputs));
126124
for (auto [public_input, inst_public_input] : zip_view(public_inputs, decider_vk.public_inputs)) {
127125
inst_public_input = public_input.get_value();
128126
}

barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@ template <IsRecursiveFlavor Flavor_, size_t NUM_> struct RecursiveDeciderVerific
4545
{
4646
size_t max_log_circuit_size{ 0 };
4747
for (auto key : _data) {
48-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value.
49-
max_log_circuit_size = std::max(
50-
max_log_circuit_size,
51-
static_cast<size_t>(static_cast<uint32_t>(key->verification_key->log_circuit_size.get_value())));
48+
max_log_circuit_size =
49+
std::max(max_log_circuit_size, static_cast<size_t>(key->verification_key->log_circuit_size));
5250
}
5351
return max_log_circuit_size;
5452
}

barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ template <typename BuilderType> class TranslatorRecursiveFlavor_ {
9393
* portability of our circuits.
9494
*/
9595
class VerificationKey
96-
: public VerificationKey_<FF, TranslatorFlavor::PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
96+
: public VerificationKey_<TranslatorFlavor::PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
9797
public:
9898
VerificationKey(const size_t circuit_size, const size_t num_public_inputs)
9999
{
@@ -105,11 +105,10 @@ template <typename BuilderType> class TranslatorRecursiveFlavor_ {
105105
VerificationKey(CircuitBuilder* builder, const std::shared_ptr<NativeVerificationKey>& native_key)
106106
{
107107
this->pcs_verification_key = std::make_shared<VerifierCommitmentKey>(); // ?
108-
this->circuit_size = FF::from_witness(builder, native_key->circuit_size);
109-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Use stdlib get_msb.
110-
this->log_circuit_size = numeric::get_msb(native_key->circuit_size);
111-
this->num_public_inputs = FF::from_witness(builder, native_key->num_public_inputs);
112-
this->pub_inputs_offset = FF::from_witness(builder, native_key->pub_inputs_offset);
108+
this->circuit_size = native_key->circuit_size;
109+
this->log_circuit_size = numeric::get_msb(this->circuit_size);
110+
this->num_public_inputs = native_key->num_public_inputs;
111+
this->pub_inputs_offset = native_key->pub_inputs_offset;
113112

114113
for (auto [native_comm, comm] : zip_view(native_key->get_all(), this->get_all())) {
115114
comm = Commitment::from_witness(builder, native_comm);

barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ std::array<typename Flavor::GroupElement, 2> TranslatorRecursiveVerifier_<Flavor
7777
CommitmentLabels commitment_labels;
7878

7979
const FF circuit_size = transcript->template receive_from_prover<FF>("circuit_size");
80-
if (static_cast<uint32_t>(circuit_size.get_value()) != static_cast<uint32_t>(key->circuit_size.get_value())) {
80+
if (static_cast<uint32_t>(circuit_size.get_value()) != key->circuit_size) {
8181
throw_or_abort(
8282
"TranslatorRecursiveVerifier::verify_proof: proof circuit size does not match verification key!");
8383
}
@@ -104,7 +104,6 @@ std::array<typename Flavor::GroupElement, 2> TranslatorRecursiveVerifier_<Flavor
104104
commitments.z_perm = transcript->template receive_from_prover<Commitment>(commitment_labels.z_perm);
105105

106106
// Execute Sumcheck Verifier
107-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1283): Suspicious get_value().
108107
const size_t log_circuit_size = numeric::get_msb(static_cast<uint32_t>(circuit_size.get_value()));
109108
auto sumcheck = Sumcheck(log_circuit_size, transcript);
110109
FF alpha = transcript->template get_challenge<FF>("Sumcheck:alpha");

barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,9 @@ template <typename RecursiveFlavor> class TranslatorRecursiveTests : public ::te
108108
<< "Recursive Verifier/Verifier manifest discrepency in round " << i;
109109
}
110110

111-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->circuit_size.get_value()), verification_key->circuit_size);
112-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->log_circuit_size.get_value()),
113-
verification_key->log_circuit_size);
114-
EXPECT_EQ(static_cast<uint64_t>(verifier.key->num_public_inputs.get_value()),
115-
verification_key->num_public_inputs);
111+
EXPECT_EQ(verifier.key->circuit_size, verification_key->circuit_size);
112+
EXPECT_EQ(verifier.key->log_circuit_size, verification_key->log_circuit_size);
113+
EXPECT_EQ(verifier.key->num_public_inputs, verification_key->num_public_inputs);
116114
for (auto [vk_poly, native_vk_poly] : zip_view(verifier.key->get_all(), verification_key->get_all())) {
117115
EXPECT_EQ(vk_poly.get_value(), native_vk_poly);
118116
}

barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class MegaFlavor {
103103
* @brief A base class labelling precomputed entities and (ordered) subsets of interest.
104104
* @details Used to build the proving key and verification key.
105105
*/
106-
template <typename DataType_> class PrecomputedEntities {
106+
template <typename DataType_> class PrecomputedEntities : public PrecomputedEntitiesBase {
107107
public:
108108
bool operator==(const PrecomputedEntities&) const = default;
109109
using DataType = DataType_;
@@ -429,7 +429,7 @@ class MegaFlavor {
429429
* circuits.
430430
* @todo TODO(https://github.com/AztecProtocol/barretenberg/issues/876)
431431
*/
432-
class VerificationKey : public VerificationKey_<uint64_t, PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
432+
class VerificationKey : public VerificationKey_<PrecomputedEntities<Commitment>, VerifierCommitmentKey> {
433433
public:
434434
// Data pertaining to transfer of databus return data via public inputs of the proof being recursively verified
435435
DatabusPropagationData databus_propagation_data;

0 commit comments

Comments
 (0)