Skip to content

Commit b4f8d44

Browse files
committed
simplify
1 parent b544f38 commit b4f8d44

File tree

4 files changed

+51
-82
lines changed

4 files changed

+51
-82
lines changed

barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.hpp

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -138,52 +138,29 @@ template <class Curve> class CommitmentKey {
138138
CommitmentKey* key;
139139
RefVector<Polynomial<Fr>> wires;
140140
std::vector<std::string> labels;
141+
std::vector<const Polynomial<Fr>*> tail_polys; // optional ZK masking tails (parallel to wires)
141142

142-
/**
143-
* @brief Batch-commit all wires, adjust commitments for masked polys using tail polynomials
144-
* from MaskingTailData, and send to verifier.
145-
*
146-
* @param transcript The transcript to send commitments to.
147-
* @param masking_tail_data If non-null, iterates masked polys and adjusts matching
148-
* commitments: C' = C_short + commit(tail_poly).
149-
* @param prover_polys ProverPolynomials reference for pointer matching (needed when
150-
* masking_tail_data is provided).
151-
*/
152-
template <typename MaskingTailDataT = std::nullptr_t, typename ProverPolynomials = std::nullptr_t>
153143
std::vector<Commitment> commit_and_send_to_verifier(auto transcript,
154-
size_t max_batch_size = std::numeric_limits<size_t>::max(),
155-
MaskingTailDataT* masking_tail_data = nullptr,
156-
ProverPolynomials* prover_polys = nullptr)
144+
size_t max_batch_size = std::numeric_limits<size_t>::max())
157145
{
158146
std::vector<Commitment> commitments = key->batch_commit(wires, max_batch_size);
159147

160-
// Adjust commitments for masked polys: C' = C_short + commit(tail_poly)
161-
if constexpr (!std::is_same_v<MaskingTailDataT, std::nullptr_t>) {
162-
if (masking_tail_data != nullptr && prover_polys != nullptr && masking_tail_data->is_active()) {
163-
auto masked_polys = prover_polys->get_masked();
164-
auto masked_tails = masking_tail_data->tails.get_masked();
165-
for (size_t m = 0; m < masked_polys.size(); ++m) {
166-
for (size_t i = 0; i < wires.size(); ++i) {
167-
if (wires[i].data() == masked_polys[m].data()) {
168-
commitments[i] = commitments[i] + key->commit(masked_tails[m]);
169-
break;
170-
}
171-
}
172-
}
173-
}
174-
}
175-
148+
// Adjust commitments for wires with masking tails: C' = C_short + commit(tail)
176149
for (size_t i = 0; i < commitments.size(); ++i) {
150+
if (i < tail_polys.size() && tail_polys[i] != nullptr && !tail_polys[i]->is_empty()) {
151+
commitments[i] = commitments[i] + key->commit(*tail_polys[i]);
152+
}
177153
transcript->send_to_verifier(labels[i], commitments[i]);
178154
}
179155

180156
return commitments;
181157
}
182158

183-
void add_to_batch(Polynomial<Fr>& poly, const std::string& label)
159+
void add_to_batch(Polynomial<Fr>& poly, const std::string& label, const Polynomial<Fr>* tail = nullptr)
184160
{
185161
wires.push_back(poly);
186162
labels.push_back(label);
163+
tail_polys.push_back(tail);
187164
}
188165
};
189166

barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ void ECCVMProver::execute_wire_commitments_round()
6868
key->masking_tail_data.register_all_masked_polys(key->polynomials);
6969

7070
auto batch = key->commitment_key.start_batch();
71-
for (const auto& [wire, label] : zip_view(key->polynomials.get_wires(), commitment_labels.get_wires())) {
72-
batch.add_to_batch(wire, label);
71+
for (const auto& [wire, tail, label] : zip_view(
72+
key->polynomials.get_wires(), key->masking_tail_data.tails.get_wires(), commitment_labels.get_wires())) {
73+
batch.add_to_batch(wire, label, &tail);
7374
}
74-
batch.commit_and_send_to_verifier(
75-
transcript, std::numeric_limits<size_t>::max(), &key->masking_tail_data, &key->polynomials);
75+
batch.commit_and_send_to_verifier(transcript);
7676
}
7777

7878
/**
@@ -110,7 +110,10 @@ void ECCVMProver::execute_log_derivative_commitments_round()
110110
typename Flavor::LookupRelation,
111111
typename Flavor::ProverPolynomials,
112112
true>(key->polynomials, relation_parameters, unmasked_witness_size);
113-
commit_to_witness_polynomial(key->polynomials.lookup_inverses, commitment_labels.lookup_inverses);
113+
auto& li = key->polynomials.lookup_inverses;
114+
transcript->send_to_verifier(commitment_labels.lookup_inverses,
115+
key->commitment_key.commit(li) +
116+
key->commitment_key.commit(key->masking_tail_data.tails.lookup_inverses));
114117
}
115118

116119
/**
@@ -122,7 +125,10 @@ void ECCVMProver::execute_grand_product_computation_round()
122125
BB_BENCH_NAME("ECCVMProver::execute_grand_product_computation_round");
123126
// Compute permutation grand product and their commitments
124127
compute_grand_products<Flavor>(key->polynomials, relation_parameters, unmasked_witness_size);
125-
commit_to_witness_polynomial(key->polynomials.z_perm, commitment_labels.z_perm);
128+
auto& zp = key->polynomials.z_perm;
129+
transcript->send_to_verifier(commitment_labels.z_perm,
130+
key->commitment_key.commit(zp) +
131+
key->commitment_key.commit(key->masking_tail_data.tails.z_perm));
126132
}
127133

128134
/**
@@ -358,12 +364,4 @@ void ECCVMProver::compute_translation_opening_claims()
358364
* @param polynomial
359365
* @param label
360366
*/
361-
void ECCVMProver::commit_to_witness_polynomial(Polynomial& polynomial, const std::string& label)
362-
{
363-
// Tail already registered in execute_wire_commitments_round via register_all_masked_polys
364-
auto batch = key->commitment_key.start_batch();
365-
batch.add_to_batch(polynomial, label);
366-
batch.commit_and_send_to_verifier(
367-
transcript, std::numeric_limits<size_t>::max(), &key->masking_tail_data, &key->polynomials);
368-
}
369367
} // namespace bb

barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ class ECCVMProver {
5050
Proof export_proof();
5151
std::pair<Proof, OpeningClaim> construct_proof();
5252
void compute_translation_opening_claims();
53-
void commit_to_witness_polynomial(Polynomial& polynomial, const std::string& label);
54-
5553
std::shared_ptr<Transcript> transcript;
5654

5755
size_t unmasked_witness_size;

barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -76,28 +76,27 @@ template <typename Flavor> void OinkProver<Flavor>::commit_to_wires()
7676
{
7777
BB_BENCH_NAME("OinkProver::commit_to_wires");
7878
auto batch = commitment_key.start_batch();
79+
auto& tails = prover_instance->masking_tail_data.tails;
7980

8081
// Commit to the first three wire polynomials; w_4 is deferred until after memory records are added
81-
batch.add_to_batch(prover_instance->polynomials.w_l, commitment_labels.w_l);
82-
batch.add_to_batch(prover_instance->polynomials.w_r, commitment_labels.w_r);
83-
batch.add_to_batch(prover_instance->polynomials.w_o, commitment_labels.w_o);
82+
batch.add_to_batch(prover_instance->polynomials.w_l, commitment_labels.w_l, &tails.w_l);
83+
batch.add_to_batch(prover_instance->polynomials.w_r, commitment_labels.w_r, &tails.w_r);
84+
batch.add_to_batch(prover_instance->polynomials.w_o, commitment_labels.w_o, &tails.w_o);
8485

8586
if constexpr (IsMegaFlavor<Flavor>) {
86-
for (auto [polynomial, label] :
87-
zip_view(prover_instance->polynomials.get_ecc_op_wires(), commitment_labels.get_ecc_op_wires())) {
88-
batch.add_to_batch(polynomial, label);
87+
for (auto [polynomial, tail, label] : zip_view(prover_instance->polynomials.get_ecc_op_wires(),
88+
tails.get_ecc_op_wires(),
89+
commitment_labels.get_ecc_op_wires())) {
90+
batch.add_to_batch(polynomial, label, &tail);
8991
}
90-
for (auto [polynomial, label] :
91-
zip_view(prover_instance->polynomials.get_databus_entities(), commitment_labels.get_databus_entities())) {
92-
batch.add_to_batch(polynomial, label);
92+
for (auto [polynomial, tail, label] : zip_view(prover_instance->polynomials.get_databus_entities(),
93+
tails.get_databus_entities(),
94+
commitment_labels.get_databus_entities())) {
95+
batch.add_to_batch(polynomial, label, &tail);
9396
}
9497
}
9598

96-
// MaskingTailData adjusts commitments for masked polys (tail already registered in prove())
97-
auto computed_commitments = batch.commit_and_send_to_verifier(transcript,
98-
std::numeric_limits<size_t>::max(),
99-
&prover_instance->masking_tail_data,
100-
&prover_instance->polynomials);
99+
auto computed_commitments = batch.commit_and_send_to_verifier(transcript);
101100
prover_instance->commitments.w_l = computed_commitments[0];
102101
prover_instance->commitments.w_r = computed_commitments[1];
103102
prover_instance->commitments.w_o = computed_commitments[2];
@@ -127,13 +126,14 @@ template <typename Flavor> void OinkProver<Flavor>::commit_to_lookup_counts_and_
127126

128127
// Commit to lookup argument polynomials and the finalized (i.e. with memory records) fourth wire polynomial
129128
auto batch = commitment_key.start_batch();
130-
batch.add_to_batch(prover_instance->polynomials.lookup_read_counts, commitment_labels.lookup_read_counts);
131-
batch.add_to_batch(prover_instance->polynomials.lookup_read_tags, commitment_labels.lookup_read_tags);
132-
batch.add_to_batch(prover_instance->polynomials.w_4, commitment_labels.w_4);
133-
auto computed_commitments = batch.commit_and_send_to_verifier(transcript,
134-
std::numeric_limits<size_t>::max(),
135-
&prover_instance->masking_tail_data,
136-
&prover_instance->polynomials);
129+
auto& tails = prover_instance->masking_tail_data.tails;
130+
batch.add_to_batch(prover_instance->polynomials.lookup_read_counts,
131+
commitment_labels.lookup_read_counts,
132+
&tails.lookup_read_counts);
133+
batch.add_to_batch(
134+
prover_instance->polynomials.lookup_read_tags, commitment_labels.lookup_read_tags, &tails.lookup_read_tags);
135+
batch.add_to_batch(prover_instance->polynomials.w_4, commitment_labels.w_4, &tails.w_4);
136+
auto computed_commitments = batch.commit_and_send_to_verifier(transcript);
137137

138138
prover_instance->commitments.lookup_read_counts = computed_commitments[0];
139139
prover_instance->commitments.lookup_read_tags = computed_commitments[1];
@@ -155,19 +155,19 @@ template <typename Flavor> void OinkProver<Flavor>::commit_to_logderiv_inverses(
155155
compute_logderivative_inverses(*prover_instance);
156156

157157
auto batch = commitment_key.start_batch();
158-
batch.add_to_batch(prover_instance->polynomials.lookup_inverses, commitment_labels.lookup_inverses);
158+
auto& tails = prover_instance->masking_tail_data.tails;
159+
batch.add_to_batch(
160+
prover_instance->polynomials.lookup_inverses, commitment_labels.lookup_inverses, &tails.lookup_inverses);
159161

160162
// If Mega, commit to the databus inverse polynomials and send
161163
if constexpr (IsMegaFlavor<Flavor>) {
162-
for (auto [polynomial, label] :
163-
zip_view(prover_instance->polynomials.get_databus_inverses(), commitment_labels.get_databus_inverses())) {
164-
batch.add_to_batch(polynomial, label);
164+
for (auto [polynomial, tail, label] : zip_view(prover_instance->polynomials.get_databus_inverses(),
165+
tails.get_databus_inverses(),
166+
commitment_labels.get_databus_inverses())) {
167+
batch.add_to_batch(polynomial, label, &tail);
165168
};
166169
}
167-
auto computed_commitments = batch.commit_and_send_to_verifier(transcript,
168-
std::numeric_limits<size_t>::max(),
169-
&prover_instance->masking_tail_data,
170-
&prover_instance->polynomials);
170+
auto computed_commitments = batch.commit_and_send_to_verifier(transcript);
171171

172172
prover_instance->commitments.lookup_inverses = computed_commitments[0];
173173
if constexpr (IsMegaFlavor<Flavor>) {
@@ -189,13 +189,9 @@ template <typename Flavor> void OinkProver<Flavor>::commit_to_z_perm()
189189
compute_grand_product_polynomial(*prover_instance);
190190

191191
auto& z_perm = prover_instance->polynomials.z_perm;
192-
// z_perm uses CommitBatch like all other witness polys. MaskingTailData handles masking.
193192
auto batch = commitment_key.start_batch();
194-
batch.add_to_batch(z_perm, commitment_labels.z_perm);
195-
auto commitments = batch.commit_and_send_to_verifier(transcript,
196-
std::numeric_limits<size_t>::max(),
197-
&prover_instance->masking_tail_data,
198-
&prover_instance->polynomials);
193+
batch.add_to_batch(z_perm, commitment_labels.z_perm, &prover_instance->masking_tail_data.tails.z_perm);
194+
auto commitments = batch.commit_and_send_to_verifier(transcript);
199195
prover_instance->commitments.z_perm = commitments[0];
200196
}
201197

0 commit comments

Comments
 (0)