72 auto setup = this->generate_claim_data({ MAX_POLY_DEGREE, MAX_POLY_DEGREE / 2 });
75 auto prover_opening_claims = ClaimData::prover_opening_claims(setup);
76 auto batched_prover_claim = ShplonkProver::prove(this->
ck(), prover_opening_claims, prover_transcript);
77 this->verify_opening_pair(batched_prover_claim.opening_pair, batched_prover_claim.polynomial);
81 StdlibProof stdlib_proof(
builder, prover_transcript->export_proof());
84 auto native_verifier_claims = ClaimData::verifier_opening_claims(setup);
85 auto stdlib_opening_claims =
86 this->native_to_stdlib_opening_claims(&
builder, native_verifier_claims, native_verifier_claims.size());
90 verifier_transcript->load_proof(stdlib_proof);
91 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
92 [[maybe_unused]]
auto batched_verifier_claim =
93 ShplonkVerifier::reduce_verification(Commitment::one(&
builder), stdlib_opening_claims, verifier_transcript);
116 auto setup = this->generate_claim_data({ MAX_POLY_DEGREE, MAX_POLY_DEGREE / 2 });
119 auto commitments = ClaimData::polynomial_commitments(setup);
122 auto [coefficients, evals] = this->combine_claims(setup);
125 auto prover_opening_claims = ClaimData::prover_opening_claims(setup);
126 auto batched_prover_claim = ShplonkProver::prove(this->
ck(), prover_opening_claims, prover_transcript);
127 this->verify_opening_pair(batched_prover_claim.opening_pair, batched_prover_claim.polynomial);
128 auto proof = prover_transcript->export_proof();
130 auto native_opening_claims = ClaimData::verifier_opening_claims(setup);
135 StdlibProof stdlib_proof(
builder, proof);
137 auto coeff1 = Fr::from_witness(&
builder, coefficients[0]);
138 auto coeff2 = Fr::from_witness(&
builder, coefficients[1]);
141 auto stdlib_opening_claims =
142 this->native_to_stdlib_opening_claims(&
builder, native_opening_claims, native_opening_claims.size() - 1);
145 Commitment commit = GroupElement::batch_mul(
146 { stdlib_opening_claims[0].commitment, stdlib_opening_claims[1].commitment }, { coeff1, coeff2 });
149 Fr r = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.challenge);
150 Fr eval = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.evaluation);
153 stdlib_opening_claims.emplace_back(
OpeningClaim({ r, eval }, commit));
156 verifier_transcript->load_proof(stdlib_proof);
157 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
158 [[maybe_unused]]
auto batched_verifier_claim =
159 ShplonkVerifier::reduce_verification(Commitment::one(&
builder), stdlib_opening_claims, verifier_transcript);
164 info(
"Num gates UltraCircuitBuilder (non-efficient way: size-5 MSM + size-2 MSM): ",
builder.num_gates);
166 info(
"Num MSM rows MegaCircuitBuilder (non-efficient way: size-5 MSM + size-2 MSM): ",
167 builder.op_queue->get_num_rows());
175 StdlibProof stdlib_proof(
builder, proof);
177 auto coeff1 = Fr::from_witness(&
builder, coefficients[0]);
178 auto coeff2 = Fr::from_witness(&
builder, coefficients[1]);
181 auto [stdlib_commitments, stdlib_opening_pairs] = this->native_to_stdlib_pairs_and_commitments(
182 &
builder, native_opening_claims, native_opening_claims.size() - 1);
185 Fr r = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.challenge);
186 Fr eval = Fr::from_witness(&
builder, native_opening_claims[2].opening_pair.evaluation);
190 { { 0 }, {
Fr(1) }, stdlib_opening_pairs[0] },
191 { { 1 }, {
Fr(1) }, stdlib_opening_pairs[1] },
192 { { 0, 1 }, { coeff1, coeff2 }, { r, eval } }
197 verifier_transcript->load_proof(stdlib_proof);
198 [[maybe_unused]]
auto _ = verifier_transcript->template receive_from_prover<Fr>(
"Init");
200 ShplonkVerifier verifier(stdlib_commitments, verifier_transcript, native_opening_claims.size());
203 [[maybe_unused]]
auto batched_verifier_claim =
204 verifier.reduce_verification_vector_claims(this->
vk().get_g1_identity(), update_data);
209 info(
"Num gates UltraCircuitBuilder (efficient way: size-4 MSM): ",
builder.num_gates);
211 info(
"Num MSM rows MegaCircuitBuilder (efficient way: size-4 MSM): ",
builder.op_queue->get_num_rows());