Skip to content

Commit 5ee5a1f

Browse files
iakovenkosledwards2225Maddiaa0
authored
feat: fixed size decider without padding (#16318)
Closes AztecProtocol/barretenberg#1158 Closes AztecProtocol/barretenberg#1310 Closes AztecProtocol/barretenberg#1283 --------- Co-authored-by: ledwards2225 <[email protected]> Co-authored-by: Maddiaa <[email protected]>
1 parent acabbad commit 5ee5a1f

File tree

57 files changed

+388
-253
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+388
-253
lines changed

barretenberg/cpp/scripts/test_civc_standalone_vks_havent_changed.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ cd ..
1111
# - Generate a hash for versioning: sha256sum bb-civc-inputs.tar.gz
1212
# - Upload the compressed results: aws s3 cp bb-civc-inputs.tar.gz s3://aztec-ci-artifacts/protocol/bb-civc-inputs-[hash(0:8)].tar.gz
1313
# Note: In case of the "Test suite failed to run ... Unexpected token 'with' " error, need to run: docker pull aztecprotocol/build:3.0
14-
pinned_short_hash="1710c0ac"
14+
pinned_short_hash="251cc432"
1515
pinned_civc_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-civc-inputs-${pinned_short_hash}.tar.gz"
1616

1717
function compress_and_upload {

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ template <typename RecursiveFlavor> class BoomerangRecursiveVerifierTest : publi
114114
RecursiveVerifier verifier{ &outer_circuit, stdlib_vk_and_hash };
115115
verifier.key->vk_and_hash->vk->num_public_inputs.fix_witness();
116116
verifier.key->vk_and_hash->vk->pub_inputs_offset.fix_witness();
117+
// It's currently un-used
118+
verifier.key->vk_and_hash->vk->log_circuit_size.fix_witness();
117119

118120
StdlibProof stdlib_inner_proof(outer_circuit, inner_proof);
119121
VerifierOutput output = verifier.template verify_proof<DefaultIO<OuterBuilder>>(stdlib_inner_proof);

barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ template <typename Curve> class GeminiProver_ {
317317

318318
static std::vector<Polynomial> compute_fold_polynomials(const size_t log_n,
319319
std::span<const Fr> multilinear_challenge,
320-
const Polynomial& A_0);
320+
const Polynomial& A_0,
321+
const bool& has_zk = false);
321322

322323
static std::pair<Polynomial, Polynomial> compute_partially_evaluated_batch_polynomials(
323324
const size_t log_n,
@@ -549,7 +550,8 @@ template <typename Curve> class GeminiVerifier_ {
549550
*
550551
* @param padding_indicator_array An array with first log_n entries equal to 1, and the remaining entries are 0.
551552
* @param batched_evaluation The evaluation of the batched polynomial at \f$ (u_0, \ldots, u_{d-1})\f$.
552-
* @param evaluation_point Evaluation point \f$ (u_0, \ldots, u_{d-1}) \f$ padded to CONST_PROOF_SIZE_LOG_N.
553+
* @param evaluation_point Evaluation point \f$ (u_0, \ldots, u_{d-1}) \f$. Depending on the context, might be
554+
* padded to `virtual_log_n` size.
553555
* @param challenge_powers Powers of \f$ r \f$, \f$ r^2 \), ..., \( r^{2^{d-1}} \f$.
554556
* @param fold_neg_evals Evaluations \f$ A_{i-1}(-r^{2^{i-1}}) \f$.
555557
* @return \f A_{i}}(r^{2^{i}})\f$ \f$ i = 0, \ldots, \text{virtual_log_n} - 1 \f$.

barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.test.cpp

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ template <class Curve> class GeminiTest : public CommitmentTest<Curve> {
1010
using GeminiVerifier = GeminiVerifier_<Curve>;
1111
using Fr = typename Curve::ScalarField;
1212
using Commitment = typename Curve::AffineElement;
13+
using ClaimBatcher = ClaimBatcher_<Curve>;
14+
using ClaimBatch = ClaimBatcher::Batch;
1315

1416
public:
1517
static constexpr size_t log_n = 4;
1618
static constexpr size_t n = 1UL << log_n;
1719

20+
static constexpr size_t virtual_log_n = 6;
21+
1822
using CK = CommitmentKey<Curve>;
1923
using VK = VerifierCommitmentKey<Curve>;
2024

@@ -82,7 +86,80 @@ template <class Curve> class GeminiTest : public CommitmentTest<Curve> {
8286
ASSERT_EQ(prover_claim.opening_pair, verifier_claim.opening_pair);
8387
}
8488
}
85-
};
89+
90+
void open_extension_by_zero()
91+
{
92+
auto prover_transcript = NativeTranscript::prover_init_empty();
93+
94+
auto u = this->random_evaluation_point(virtual_log_n);
95+
96+
Polynomial<Fr> poly((1UL << log_n));
97+
98+
poly.at(0) = 1;
99+
poly.at(1) = 2;
100+
poly.at(2) = 3;
101+
102+
typename GeminiProver::PolynomialBatcher poly_batcher(1UL << log_n);
103+
poly_batcher.set_unshifted(RefVector(poly));
104+
105+
// As we are opening `poly` extended by zero from `log_n` dimensions to `virtual_log_n` dimensions, it needs to
106+
// be multiplied by appropriate scalars.
107+
Fr eval = poly.evaluate_mle(std::span(u).subspan(0, log_n)) * (Fr(1) - u[virtual_log_n - 1]) *
108+
(Fr(1) - u[virtual_log_n - 2]);
109+
auto comm = ck.commit(poly);
110+
auto claim_batcher = ClaimBatcher{ .unshifted = ClaimBatch{ RefVector(comm), RefVector(eval) } };
111+
112+
// Compute:
113+
// - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1
114+
// - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1
115+
auto prover_output = GeminiProver::prove(1UL << log_n, poly_batcher, u, ck, prover_transcript);
116+
117+
// The prover output needs to be completed by adding the "positive" Fold claims, i.e. evaluations of
118+
// Fold^(i) at r^{2^i} for i=1, ..., d-1. Although here we are copying polynomials, it is not the case when
119+
// GeminiProver is combined with ShplonkProver.
120+
std::vector<ProverOpeningClaim<Curve>> prover_claims_with_pos_evals;
121+
// `prover_output` consists of d+1 opening claims, we add another d-1 claims for each positive evaluation
122+
// Fold^i(r^{2^i}) for i = 1, ..., d-1
123+
const size_t total_num_claims = 2 * virtual_log_n;
124+
prover_claims_with_pos_evals.reserve(total_num_claims);
125+
126+
for (auto& claim : prover_output) {
127+
if (claim.gemini_fold) {
128+
if (claim.gemini_fold) {
129+
// "positive" evaluation challenge r^{2^i} for i = 1, ..., d-1
130+
const Fr evaluation_challenge = -claim.opening_pair.challenge;
131+
// Fold^(i) at r^{2^i} for i=1, ..., d-1
132+
const Fr pos_evaluation = claim.polynomial.evaluate(evaluation_challenge);
133+
134+
// Add the positive Fold claims to the vector of claims
135+
ProverOpeningClaim<Curve> pos_fold_claim = { .polynomial = claim.polynomial,
136+
.opening_pair = { .challenge = evaluation_challenge,
137+
.evaluation = pos_evaluation } };
138+
prover_claims_with_pos_evals.emplace_back(pos_fold_claim);
139+
}
140+
}
141+
prover_claims_with_pos_evals.emplace_back(claim);
142+
}
143+
144+
// Check that the Fold polynomials have been evaluated correctly in the prover
145+
this->verify_batch_opening_pair(prover_claims_with_pos_evals);
146+
147+
auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript);
148+
149+
// Compute:
150+
// - d opening pairs: {r^{2^i}, \hat{a}_i} for i = 0, ..., d-1
151+
// - 2 partially evaluated Fold polynomial commitments [Fold_{r}^(0)] and [Fold_{-r}^(0)]
152+
// Aggregate: 2d opening pairs and 2d Fold poly commitments into verifier claim
153+
auto verifier_claims = GeminiVerifier::reduce_verification(u, claim_batcher, verifier_transcript);
154+
// Check equality of the opening pairs computed by prover and verifier
155+
for (auto [prover_claim, verifier_claim] : zip_view(prover_claims_with_pos_evals, verifier_claims)) {
156+
this->verify_opening_claim(verifier_claim, prover_claim.polynomial, ck);
157+
ASSERT_EQ(prover_claim.opening_pair, verifier_claim.opening_pair);
158+
}
159+
}
160+
}
161+
162+
;
86163

87164
using ParamsTypes = ::testing::Types<curve::BN254, curve::Grumpkin>;
88165
TYPED_TEST_SUITE(GeminiTest, ParamsTypes);
@@ -144,6 +221,10 @@ TYPED_TEST(GeminiTest, DoubleWithShiftAndInterleaving)
144221
this->execute_gemini_and_verify_claims(u, mock_claims);
145222
}
146223

224+
TYPED_TEST(GeminiTest, OpenExtensionByZero)
225+
{
226+
TestFixture::open_extension_by_zero();
227+
}
147228
/**
148229
* @brief Implementation of the [attack described by Ariel](https://hackmd.io/zm5SDfBqTKKXGpI-zQHtpA?view).
149230
*
@@ -247,8 +328,8 @@ TYPED_TEST(GeminiTest, SoundnessRegression)
247328
EXPECT_TRUE(prover_opening_claims[idx].opening_pair == verifier_claims[idx].opening_pair);
248329
}
249330

250-
// The mismatch in claims below leads to Gemini and Shplemini Verifier rejecting the tampered proof and confirms the
251-
// necessity of opening `fold_i` at r^{2^i} for i = 1, ..., log_n - 1.
331+
// The mismatch in claims below leads to Gemini and Shplemini Verifier rejecting the tampered proof and confirms
332+
// the necessity of opening `fold_i` at r^{2^i} for i = 1, ..., log_n - 1.
252333
for (auto idx : mismatching_claim_indices) {
253334
EXPECT_FALSE(prover_opening_claims[idx].opening_pair == verifier_claims[idx].opening_pair);
254335
}

barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini_impl.hpp

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,13 @@ std::vector<typename GeminiProver_<Curve>::Claim> GeminiProver_<Curve>::prove(
8080
Polynomial A_0 = polynomial_batcher.compute_batched(rho, running_scalar);
8181

8282
// Construct the d-1 Gemini foldings of A₀(X)
83-
std::vector<Polynomial> fold_polynomials = compute_fold_polynomials(log_n, multilinear_challenge, A_0);
83+
std::vector<Polynomial> fold_polynomials = compute_fold_polynomials(log_n, multilinear_challenge, A_0, has_zk);
8484

8585
// If virtual_log_n >= log_n, pad the fold commitments with dummy group elements [1]_1.
8686
for (size_t l = 0; l < virtual_log_n - 1; l++) {
8787
std::string label = "Gemini:FOLD_" + std::to_string(l + 1);
88-
if (l < log_n - 1) {
89-
transcript->send_to_verifier(label, commitment_key.commit(fold_polynomials[l]));
90-
} else {
91-
transcript->send_to_verifier(label, Commitment::one());
92-
}
88+
// When has_zk is true, we are sending commitments to 0. Seems to work, but maybe brittle.
89+
transcript->send_to_verifier(label, commitment_key.commit(fold_polynomials[l]));
9390
}
9491
const Fr r_challenge = transcript->template get_challenge<Fr>("Gemini:r");
9592

@@ -106,16 +103,11 @@ std::vector<typename GeminiProver_<Curve>::Claim> GeminiProver_<Curve>::prove(
106103
auto [A_0_pos, A_0_neg] = polynomial_batcher.compute_partially_evaluated_batch_polynomials(r_challenge);
107104
// Construct claims for the d + 1 univariate evaluations A₀₊(r), A₀₋(-r), and Foldₗ(−r^{2ˡ}), l = 1, ..., d-1
108105
std::vector<Claim> claims = construct_univariate_opening_claims(
109-
log_n, std::move(A_0_pos), std::move(A_0_neg), std::move(fold_polynomials), r_challenge);
106+
virtual_log_n, std::move(A_0_pos), std::move(A_0_neg), std::move(fold_polynomials), r_challenge);
110107

111-
// If virtual_log_n >= log_n, pad the negative fold evaluations with zeroes.
112108
for (size_t l = 1; l <= virtual_log_n; l++) {
113109
std::string label = "Gemini:a_" + std::to_string(l);
114-
if (l <= log_n) {
115-
transcript->send_to_verifier(label, claims[l].opening_pair.evaluation);
116-
} else {
117-
transcript->send_to_verifier(label, Fr::zero());
118-
}
110+
transcript->send_to_verifier(label, claims[l].opening_pair.evaluation);
119111
}
120112

121113
// If running Gemini for the Translator VM polynomials, A₀(r) = A₀₊(r) + P₊(rˢ) and A₀(-r) = A₀₋(-r) + P₋(rˢ)
@@ -145,15 +137,18 @@ std::vector<typename GeminiProver_<Curve>::Claim> GeminiProver_<Curve>::prove(
145137
*/
146138
template <typename Curve>
147139
std::vector<typename GeminiProver_<Curve>::Polynomial> GeminiProver_<Curve>::compute_fold_polynomials(
148-
const size_t log_n, std::span<const Fr> multilinear_challenge, const Polynomial& A_0)
140+
const size_t log_n, std::span<const Fr> multilinear_challenge, const Polynomial& A_0, const bool& has_zk)
149141
{
150142
const size_t num_threads = get_num_cpus_pow2();
143+
144+
const size_t virtual_log_n = multilinear_challenge.size();
145+
151146
constexpr size_t efficient_operations_per_thread = 64; // A guess of the number of operation for which there
152147
// would be a point in sending them to a separate thread
153148

154149
// Reserve and allocate space for m-1 Fold polynomials, the foldings of the full batched polynomial A₀
155150
std::vector<Polynomial> fold_polynomials;
156-
fold_polynomials.reserve(log_n - 1);
151+
fold_polynomials.reserve(virtual_log_n - 1);
157152
for (size_t l = 0; l < log_n - 1; ++l) {
158153
// size of the previous polynomial/2
159154
const size_t n_l = 1 << (log_n - l - 1);
@@ -198,6 +193,28 @@ std::vector<typename GeminiProver_<Curve>::Polynomial> GeminiProver_<Curve>::com
198193
A_l = A_l_fold;
199194
}
200195

196+
// Perform virtual rounds.
197+
// After the first `log_n - 1` rounds, the prover's `fold` univariates stabilize. With ZK, the verifier multiplies
198+
// the evaluations by 0, otherwise, when `virtual_log_n > log_n`, the prover honestly computes and sends the
199+
// constant folds.
200+
const auto& last = fold_polynomials.back();
201+
const Fr u_last = multilinear_challenge[log_n - 1];
202+
const Fr final_eval = last.at(0) + u_last * (last.at(1) - last.at(0));
203+
Polynomial const_fold(1);
204+
// Temporary fix: when we're running a zk proof, the verifier uses a `padding_indicator_array`. So the evals in
205+
// rounds past `log_n - 1` will be ignored. Hence the prover also needs to ignore them, otherwise Shplonk will fail.
206+
const_fold.at(0) = final_eval * Fr(static_cast<int>(!has_zk));
207+
fold_polynomials.emplace_back(const_fold);
208+
209+
// FOLD_{log_n+1}, ..., FOLD_{d_v-1}
210+
Fr tail = Fr(1);
211+
for (size_t k = log_n; k < virtual_log_n - 1; ++k) {
212+
tail *= (Fr(1) - multilinear_challenge[k]); // multiply by (1 - u_k)
213+
Polynomial next_const(1);
214+
next_const.at(0) = final_eval * tail * Fr(static_cast<int>(!has_zk));
215+
fold_polynomials.emplace_back(next_const);
216+
}
217+
201218
return fold_polynomials;
202219
};
203220

barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ TYPED_TEST(ShpleminiTest, ShpleminiZKNoSumcheckOpenings)
288288
// Generate Libra polynomials, compute masked concatenated Libra polynomial, commit to it
289289
ZKData zk_sumcheck_data(this->log_n, prover_transcript, ck);
290290

291-
// Generate multivariate challenge of size CONST_PROOF_SIZE_LOG_N
291+
// Generate multivariate challenge
292292
std::vector<Fr> mle_opening_point = this->random_evaluation_point(this->log_n);
293293

294294
// Generate random prover polynomials, compute their evaluations and commitments

barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ template <typename Curve> class ShplonkProver_ {
9393
current_nu *= nu;
9494
}
9595
// We use the same batching challenge for Gemini and Libra opening claims. The number of the claims
96-
// batched before adding Libra commitments and evaluations is bounded by 2 * CONST_PROOF_SIZE_LOG_N + 2, where
97-
// 2 * CONST_PROOF_SIZE_LOG_N is the number of fold claims including the dummy ones, and +2 is reserved for
96+
// batched before adding Libra commitments and evaluations is bounded by 2 * `virtual_log_n` + 2, where
97+
// 2 * `virtual_log_n` is the number of fold claims including the dummy ones, and +2 is reserved for
9898
// interleaving.
9999
if (!libra_opening_claims.empty()) {
100100
current_nu = nu.pow(2 * virtual_log_n + NUM_INTERLEAVING_CLAIMS);

barretenberg/cpp/src/barretenberg/commitment_schemes/utils/mock_witness_generator.hpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,36 @@ template <typename Curve> struct MockClaimGenerator {
8787
, polynomial_batcher(poly_size)
8888

8989
{
90+
size_t log_size = numeric::get_msb(poly_size);
91+
// If the size of the opening point is bigger than the log of the poly size, we assume that the prover is
92+
// extending all of its polynomials by zero outside of the hypercube of size 2^{log_size}.
93+
bool has_virtual_rounds = (mle_opening_point.size() > log_size);
94+
95+
std::span<const Fr> challenge;
96+
97+
if (has_virtual_rounds) {
98+
// The evaluation on the full domain can be obtain by scaling by extension-by-zero factor `ebz_factor`
99+
// computed below.
100+
challenge = std::span<const Fr>(mle_opening_point).subspan(0, log_size);
101+
} else {
102+
challenge = std::span<const Fr>(mle_opening_point);
103+
}
104+
90105
const size_t total_num_to_be_shifted = num_to_be_shifted + num_to_be_right_shifted_by_k;
91106
BB_ASSERT_GTE(num_polynomials, total_num_to_be_shifted);
92107
const size_t num_not_to_be_shifted = num_polynomials - total_num_to_be_shifted;
93108

109+
Fr ebz_factor = 1;
110+
111+
for (size_t idx = log_size; idx < mle_opening_point.size(); idx++) {
112+
ebz_factor *= (Fr(1) - mle_opening_point[idx]);
113+
}
114+
94115
// Construct claim data for polynomials that are NOT to be shifted
95116
for (size_t idx = 0; idx < num_not_to_be_shifted; idx++) {
96117
Polynomial poly = Polynomial::random(poly_size);
97118
unshifted.commitments.push_back(ck.commit(poly));
98-
unshifted.evals.push_back(poly.evaluate_mle(mle_opening_point));
119+
unshifted.evals.push_back(poly.evaluate_mle(challenge) * ebz_factor);
99120
unshifted.polys.push_back(std::move(poly));
100121
}
101122

@@ -104,11 +125,11 @@ template <typename Curve> struct MockClaimGenerator {
104125
Polynomial poly = Polynomial::random(poly_size, /*shiftable*/ 1);
105126
Commitment commitment = ck.commit(poly);
106127
to_be_shifted.commitments.push_back(commitment);
107-
to_be_shifted.evals.push_back(poly.shifted().evaluate_mle(mle_opening_point));
128+
to_be_shifted.evals.push_back(poly.shifted().evaluate_mle(challenge) * ebz_factor);
108129
to_be_shifted.polys.push_back(poly.share());
109130
// Populate the unshifted counterpart in the unshifted claims
110131
unshifted.commitments.push_back(commitment);
111-
unshifted.evals.push_back(poly.evaluate_mle(mle_opening_point));
132+
unshifted.evals.push_back(poly.evaluate_mle(challenge) * ebz_factor);
112133
unshifted.polys.push_back(std::move(poly));
113134
}
114135

@@ -117,11 +138,12 @@ template <typename Curve> struct MockClaimGenerator {
117138
Polynomial poly = Polynomial::random(poly_size - k_magnitude, poly_size, 0);
118139
Commitment commitment = ck.commit(poly);
119140
to_be_right_shifted_by_k.commitments.push_back(commitment);
120-
to_be_right_shifted_by_k.evals.push_back(poly.right_shifted(k_magnitude).evaluate_mle(mle_opening_point));
141+
to_be_right_shifted_by_k.evals.push_back(poly.right_shifted(k_magnitude).evaluate_mle(challenge) *
142+
ebz_factor);
121143
to_be_right_shifted_by_k.polys.push_back(poly.share());
122144
// Populate the unshifted counterpart in the unshifted claims
123145
unshifted.commitments.push_back(commitment);
124-
unshifted.evals.push_back(poly.evaluate_mle(mle_opening_point));
146+
unshifted.evals.push_back(poly.evaluate_mle(challenge) * ebz_factor);
125147
unshifted.polys.push_back(std::move(poly));
126148
}
127149

barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,11 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle)
4848

4949
bb::srs::init_file_crs_factory(bb::srs::bb_crs_path());
5050
auto run_shplemini = [](size_t log_circuit_size) {
51-
using diff_t = std::vector<NativeFr>::difference_type;
52-
5351
size_t N = 1 << log_circuit_size;
54-
const auto padding_indicator_array =
55-
stdlib::compute_padding_indicator_array<Curve, CONST_PROOF_SIZE_LOG_N>(log_circuit_size);
52+
const std::vector<Fr> padding_indicator_array(CONST_PROOF_SIZE_LOG_N, 1);
5653
constexpr size_t NUM_POLYS = 5;
5754
constexpr size_t NUM_SHIFTED = 2;
58-
constexpr size_t NUM_RIGHT_SHIFTED_BY_K = 1;
55+
constexpr size_t NUM_RIGHT_SHIFTED_BY_K = 0;
5956

6057
CommitmentKey commitment_key(16384);
6158

@@ -65,12 +62,8 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle)
6562
u_challenge.emplace_back(NativeFr::random_element(&shplemini_engine));
6663
};
6764

68-
// Truncate to real size to create mock claims.
69-
std::vector<NativeFr> truncated_u_challenge(u_challenge.begin(),
70-
u_challenge.begin() + static_cast<diff_t>(log_circuit_size));
7165
// Construct mock multivariate polynomial opening claims
72-
MockClaimGen mock_claims(
73-
N, NUM_POLYS, NUM_SHIFTED, NUM_RIGHT_SHIFTED_BY_K, truncated_u_challenge, commitment_key);
66+
MockClaimGen mock_claims(N, NUM_POLYS, NUM_SHIFTED, NUM_RIGHT_SHIFTED_BY_K, u_challenge, commitment_key);
7467

7568
// Initialize an empty NativeTranscript
7669
auto prover_transcript = NativeTranscript::prover_init_empty();

0 commit comments

Comments
 (0)