81 auto setup = this->generate_claim_data({ MAX_POLY_DEGREE, MAX_POLY_DEGREE / 2 });
84 auto prover_opening_claims = ClaimData::prover_opening_claims(setup);
85 auto batched_prover_claim = ShplonkProver::prove(this->
ck(), prover_opening_claims, prover_transcript);
86 this->verify_opening_pair(batched_prover_claim.opening_pair, batched_prover_claim.polynomial);
90 StdlibProof stdlib_proof(
builder, prover_transcript->export_proof());
93 auto native_verifier_claims = ClaimData::verifier_opening_claims(setup);
94 auto stdlib_opening_claims =
95 this->native_to_stdlib_opening_claims(&
builder, native_verifier_claims, native_verifier_claims.size());
99 verifier_transcript->load_proof(stdlib_proof);
100 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
101 [[maybe_unused]]
auto batched_verifier_claim =
102 ShplonkVerifier::reduce_verification(Commitment::one(&
builder), stdlib_opening_claims, verifier_transcript);
125 auto setup = this->generate_claim_data({ MAX_POLY_DEGREE, MAX_POLY_DEGREE / 2 });
128 auto commitments = ClaimData::polynomial_commitments(setup);
131 auto [coefficients, evals] = this->combine_claims(setup);
134 auto prover_opening_claims = ClaimData::prover_opening_claims(setup);
135 auto batched_prover_claim = ShplonkProver::prove(this->
ck(), prover_opening_claims, prover_transcript);
136 this->verify_opening_pair(batched_prover_claim.opening_pair, batched_prover_claim.polynomial);
137 auto proof = prover_transcript->export_proof();
139 auto native_opening_claims = ClaimData::verifier_opening_claims(setup);
144 StdlibProof stdlib_proof(
builder, proof);
146 auto coeff1 = Fr::from_witness(&
builder, coefficients[0]);
147 auto coeff2 = Fr::from_witness(&
builder, coefficients[1]);
150 coeff1.unset_free_witness_tag();
151 coeff2.unset_free_witness_tag();
154 auto stdlib_opening_claims =
155 this->native_to_stdlib_opening_claims(&
builder, native_opening_claims, native_opening_claims.size() - 1);
158 Commitment commit = GroupElement::batch_mul(
159 { stdlib_opening_claims[0].commitment, stdlib_opening_claims[1].commitment }, { coeff1, coeff2 });
162 Fr r = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.challenge);
163 Fr eval = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.evaluation);
166 r.unset_free_witness_tag();
167 eval.unset_free_witness_tag();
170 stdlib_opening_claims.emplace_back(
OpeningClaim({ r, eval }, commit));
173 verifier_transcript->load_proof(stdlib_proof);
174 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
175 [[maybe_unused]]
auto batched_verifier_claim =
176 ShplonkVerifier::reduce_verification(Commitment::one(&
builder), stdlib_opening_claims, verifier_transcript);
181 info(
"Num gates UltraCircuitBuilder (non-efficient way: size-5 MSM + size-2 MSM): ",
builder.num_gates);
183 info(
"Num MSM rows MegaCircuitBuilder (non-efficient way: size-5 MSM + size-2 MSM): ",
184 builder.op_queue->get_num_rows());
192 StdlibProof stdlib_proof(
builder, proof);
194 auto coeff1 = Fr::from_witness(&
builder, coefficients[0]);
195 auto coeff2 = Fr::from_witness(&
builder, coefficients[1]);
198 coeff1.unset_free_witness_tag();
199 coeff2.unset_free_witness_tag();
202 auto [stdlib_commitments, stdlib_opening_pairs] = this->native_to_stdlib_pairs_and_commitments(
203 &
builder, native_opening_claims, native_opening_claims.size() - 1);
206 Fr r = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.challenge);
207 Fr eval = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.evaluation);
210 r.unset_free_witness_tag();
211 eval.unset_free_witness_tag();
215 { { 0 }, {
Fr(1) }, stdlib_opening_pairs[0] },
216 { { 1 }, {
Fr(1) }, stdlib_opening_pairs[1] },
217 { { 0, 1 }, { coeff1, coeff2 }, { r, eval } }
222 verifier_transcript->load_proof(stdlib_proof);
223 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
225 ShplonkVerifier verifier(stdlib_commitments, verifier_transcript, native_opening_claims.size());
228 [[maybe_unused]]
auto batched_verifier_claim =
229 verifier.reduce_verification_vector_claims(this->
vk().get_g1_identity(), update_data);
234 info(
"Num gates UltraCircuitBuilder (efficient way: size-4 MSM): ",
builder.num_gates);
236 info(
"Num MSM rows MegaCircuitBuilder (efficient way: size-4 MSM): ",
builder.op_queue->get_num_rows());