Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
decider_recursive_verifier.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
12
14
20template <typename Flavor>
22{
23 StdlibProof stdlib_proof(*builder, proof);
24 return verify_proof(stdlib_proof);
25}
26
32template <typename Flavor>
34 const StdlibProof& proof)
35{
36 using Sumcheck = ::bb::SumcheckVerifier<Flavor>;
37 using PCS = typename Flavor::PCS;
38 using Curve = typename Flavor::Curve;
39 using Shplemini = ::bb::ShpleminiVerifier_<Curve>;
40 using VerifierCommitments = typename Flavor::VerifierCommitments;
41 using ClaimBatcher = ClaimBatcher_<Curve>;
42 using ClaimBatch = ClaimBatcher::Batch;
43
44 transcript->load_proof(proof);
45
46 VerifierCommitments commitments{ accumulator->vk_and_hash->vk, accumulator->witness_commitments };
47 // DeciderRecursiveVerifier's log circuit size is fixed, hence we are using a trivial `padding_indicator_array`.
48 std::vector<FF> padding_indicator_array(Flavor::VIRTUAL_LOG_N, 1);
49
50 Sumcheck sumcheck(transcript, accumulator->alphas, Flavor::VIRTUAL_LOG_N, accumulator->target_sum);
52 sumcheck.verify(accumulator->relation_parameters, accumulator->gate_challenges, padding_indicator_array);
53
54 // Execute Shplemini rounds.
55 ClaimBatcher claim_batcher{
56 .unshifted = ClaimBatch{ commitments.get_unshifted(), output.claimed_evaluations.get_unshifted() },
57 .shifted = ClaimBatch{ commitments.get_to_be_shifted(), output.claimed_evaluations.get_shifted() }
58 };
59 const auto opening_claim = Shplemini::compute_batch_opening_claim(padding_indicator_array,
60 claim_batcher,
61 output.challenge,
62 Commitment::one(builder),
63 transcript,
66 auto pairing_points = PCS::reduce_verify_batch_opening_claim(opening_claim, transcript);
67
68 return { pairing_points[0], pairing_points[1] };
69}
70
73} // namespace bb::stdlib::recursion::honk
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
curve::BN254 Curve
static constexpr bool HasZK
static constexpr size_t VIRTUAL_LOG_N
KZG< Curve > PCS
VerifierCommitments_< Commitment, VerificationKey > VerifierCommitments
An efficient verifier for the evaluation proofs of multilinear polynomials and their shifts.
Implementation of the sumcheck Verifier for statements of the form for multilinear polynomials .
Definition sumcheck.hpp:645
A simple wrapper around a vector of stdlib field elements representing a proof.
Definition proof.hpp:19
PairingPoints verify_proof(const HonkProof &proof)
Creates a circuit that executes the decider verifier algorithm up to the final pairing check.
AluTraceBuilder builder
Definition alu.test.cpp:123
std::vector< fr > HonkProof
Definition proof.hpp:15
For a small integer N = virtual_log_n and a given witness x = log_n, compute in-circuit an indicator_...
Logic to support batching opening claims for unshifted and shifted polynomials in Shplemini.
Contains the evaluations of multilinear polynomials at the challenge point . These are computed by S...
ClaimedEvaluations claimed_evaluations
std::vector< FF > challenge