Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::ChonkVerifier< IsRecursive > Class Template Reference

Verifier for Chonk IVC proofs (both native and recursive). More...

#include <chonk_verifier.hpp>

Classes

struct  ReductionResult
 Result of Chonk verification reduction (recursive mode only) More...
 
struct  TripleIpaReductionResult
 Result of reducing Chonk verification to a deferred TripleIPA opening (native mode only). More...
 

Public Types

using Output = std::conditional_t< IsRecursive, ReductionResult, bool >
 
using VKAndHash = typename HidingKernelVerifier::VKAndHash
 
using VK = typename HidingKernelVerifier::VerificationKey
 
using Commitment = typename HidingKernelVerifier::Commitment
 
using Proof = std::conditional_t< IsRecursive, ChonkStdlibProof, ChonkProof >
 

Public Member Functions

 ChonkVerifier (const std::shared_ptr< VKAndHash > &vk_and_hash)
 
Output verify (const Proof &proof)
 Verify a Chonk proof.
 
TripleIpaReductionResult reduce_to_triple_ipa_opening (const Proof &proof)
 Run Chonk verification up to but not including TripleIPA verification.
 
ChonkVerifier< false >::TripleIpaReductionResult reduce_to_triple_ipa_opening (const Proof &proof)
 Run Chonk verification up to the deferred TripleIPA verification, returning the TripleIPA data.
 
ChonkVerifier< false >::Output verify (const Proof &proof)
 Verifies a Chonk IVC proof (Native specialization).
 
ChonkVerifier< true >::Output verify (const Proof &proof)
 Verifies a Chonk IVC proof in-circuit.
 
ChonkVerifier< true >::TripleIpaReductionResult reduce_to_triple_ipa_opening (const Proof &proof)
 Stub for recursive mode (not meaningful — reduce_to_triple_ipa_opening is only used in native batch verification).
 

Private Types

using Builder = std::conditional_t< IsRecursive, UltraCircuitBuilder, void >
 
using HidingKernelVerifier = std::conditional_t< IsRecursive, bb::MegaZKRecursiveVerifier, bb::MegaZKVerifier >
 
using GoblinVerifier = std::conditional_t< IsRecursive, bb::GoblinRecursiveVerifier, bb::GoblinVerifier >
 
using Transcript = typename GoblinVerifier::Transcript
 
using GoblinReductionResult = typename GoblinVerifier::ReductionResult
 
using HidingKernelIO = std::conditional_t< IsRecursive, stdlib::recursion::honk::HidingKernelIO< Builder >, bb::HidingKernelIO >
 
using PairingPoints = typename GoblinVerifier::ReductionResult::PairingPoints
 
using MergeCommitments = typename GoblinVerifier::MergeVerifier::InputCommitments
 
using DeferredTripleIpaOpening = std::conditional_t< IsRecursive, typename ECCVMRecursiveVerifier::DeferredTripleIpaOpening, typename ECCVMVerifier::DeferredTripleIpaOpening >
 
using NativeDeferredTripleIpaOpening = typename ECCVMVerifier::DeferredTripleIpaOpening
 

Private Attributes

std::shared_ptr< VKAndHashvk_and_hash
 
std::shared_ptr< Transcripttranscript
 

Static Private Attributes

static constexpr size_t NUM_PAIRING_POINTS = 3
 

Detailed Description

template<bool IsRecursive>
class bb::ChonkVerifier< IsRecursive >

Verifier for Chonk IVC proofs (both native and recursive).

Consists of:

  1. MegaZK proof of the hiding kernel
  2. Goblin proof (Merge + ECCVM + TripleIPA + Translator)

The hiding kernel proof is verified first to extract ECC op queue commitments, which are then used as inputs to Goblin verification. Databus consistency is checked between the kernel's return data and calldata commitments.

In recursive mode: Returns an Output containing deferred verification data: pairing points (BN254) and a compact TripleIPA opening (Grumpkin). Pairing points are aggregated at each rollup level and verified on L1. The TripleIPA opening is reduced into the existing IPA accumulation path before final discharge.

In native mode: Performs all verification including pairing check and TripleIPA verification, returns bool.

Recursive mode uses Ultra arithmetization, as all ECC ops have to be performed in-circuit.

Definition at line 43 of file chonk_verifier.hpp.

Member Typedef Documentation

◆ Builder

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::Builder = std::conditional_t<IsRecursive, UltraCircuitBuilder, void>
private

Definition at line 45 of file chonk_verifier.hpp.

◆ Commitment

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::Commitment = typename HidingKernelVerifier::Commitment

Definition at line 76 of file chonk_verifier.hpp.

◆ DeferredTripleIpaOpening

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::DeferredTripleIpaOpening = std::conditional_t<IsRecursive, typename ECCVMRecursiveVerifier::DeferredTripleIpaOpening, typename ECCVMVerifier::DeferredTripleIpaOpening>
private

Definition at line 54 of file chonk_verifier.hpp.

◆ GoblinReductionResult

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::GoblinReductionResult = typename GoblinVerifier::ReductionResult
private

Definition at line 49 of file chonk_verifier.hpp.

◆ GoblinVerifier

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::GoblinVerifier = std::conditional_t<IsRecursive, bb::GoblinRecursiveVerifier, bb::GoblinVerifier>
private

Definition at line 47 of file chonk_verifier.hpp.

◆ HidingKernelIO

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::HidingKernelIO = std::conditional_t<IsRecursive, stdlib::recursion::honk::HidingKernelIO<Builder>, bb::HidingKernelIO>
private

Definition at line 50 of file chonk_verifier.hpp.

◆ HidingKernelVerifier

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::HidingKernelVerifier = std::conditional_t<IsRecursive, bb::MegaZKRecursiveVerifier, bb::MegaZKVerifier>
private

Definition at line 46 of file chonk_verifier.hpp.

◆ MergeCommitments

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::MergeCommitments = typename GoblinVerifier::MergeVerifier::InputCommitments
private

Definition at line 53 of file chonk_verifier.hpp.

◆ NativeDeferredTripleIpaOpening

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::NativeDeferredTripleIpaOpening = typename ECCVMVerifier::DeferredTripleIpaOpening
private

Definition at line 57 of file chonk_verifier.hpp.

◆ Output

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::Output = std::conditional_t<IsRecursive, ReductionResult, bool>

Definition at line 73 of file chonk_verifier.hpp.

◆ PairingPoints

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::PairingPoints = typename GoblinVerifier::ReductionResult::PairingPoints
private

Definition at line 52 of file chonk_verifier.hpp.

◆ Proof

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::Proof = std::conditional_t<IsRecursive, ChonkStdlibProof, ChonkProof>

Definition at line 77 of file chonk_verifier.hpp.

◆ Transcript

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::Transcript = typename GoblinVerifier::Transcript
private

Definition at line 48 of file chonk_verifier.hpp.

◆ VK

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::VK = typename HidingKernelVerifier::VerificationKey

Definition at line 75 of file chonk_verifier.hpp.

◆ VKAndHash

template<bool IsRecursive>
using bb::ChonkVerifier< IsRecursive >::VKAndHash = typename HidingKernelVerifier::VKAndHash

Definition at line 74 of file chonk_verifier.hpp.

Constructor & Destructor Documentation

◆ ChonkVerifier()

template<bool IsRecursive>
bb::ChonkVerifier< IsRecursive >::ChonkVerifier ( const std::shared_ptr< VKAndHash > &  vk_and_hash)
inline

Definition at line 79 of file chonk_verifier.hpp.

Member Function Documentation

◆ reduce_to_triple_ipa_opening() [1/3]

ChonkVerifier< false >::TripleIpaReductionResult bb::ChonkVerifier< false >::reduce_to_triple_ipa_opening ( const Proof proof)

Run Chonk verification up to the deferred TripleIPA verification, returning the TripleIPA data.

Verification flow on a shared transcript:

  1. MegaZK Oink → extract HidingKernelIO (t_j, T_prev, calldata commitment)
  2. Databus consistency check
  3. Merge verification (using t_j, T_prev)
  4. ECCVM verification -> get v, x, accumulated_result, TripleIPA claim
  5. Translator Oink + Joint sumcheck + Joint PCS → pairing check

Definition at line 27 of file chonk_verifier.cpp.

◆ reduce_to_triple_ipa_opening() [2/3]

ChonkVerifier< true >::TripleIpaReductionResult bb::ChonkVerifier< true >::reduce_to_triple_ipa_opening ( const Proof proof)

Stub for recursive mode (not meaningful — reduce_to_triple_ipa_opening is only used in native batch verification).

Definition at line 205 of file chonk_verifier.cpp.

◆ reduce_to_triple_ipa_opening() [3/3]

template<bool IsRecursive>
TripleIpaReductionResult bb::ChonkVerifier< IsRecursive >::reduce_to_triple_ipa_opening ( const Proof proof)

Run Chonk verification up to but not including TripleIPA verification.

Verifies the MegaZK proof, databus consistency, and Goblin proof (merge/eccvm/translator), then returns the TripleIPA opening without reducing it to an accumulator. This enables batch TripleIPA verification across multiple Chonk proofs.

Parameters
proofThe Chonk proof to partially verify
Returns
TripleIpaReductionResult containing the TripleIPA opening and whether all non-TripleIPA checks passed

◆ verify() [1/3]

ChonkVerifier< false >::Output bb::ChonkVerifier< false >::verify ( const Proof proof)

Verifies a Chonk IVC proof (Native specialization).

Definition at line 108 of file chonk_verifier.cpp.

◆ verify() [2/3]

ChonkVerifier< true >::Output bb::ChonkVerifier< true >::verify ( const Proof proof)

Verifies a Chonk IVC proof in-circuit.

Verification flow on a shared transcript:

  1. MegaZK Oink → extract HidingKernelIO (pairing points, calldata, ecc_op_tables)
  2. Databus consistency check (in-circuit)
  3. Merge verification → merge pairing points
  4. ECCVM verification -> TripleIPA claim + translator input data
  5. Translator Oink + Joint sumcheck + Joint PCS → batched pairing points
  6. Aggregate all pairing points (PI, Merge, Batched PCS)

Returns ReductionResult with aggregated pairing points and TripleIPA opening for deferred verification.

Definition at line 131 of file chonk_verifier.cpp.

◆ verify() [3/3]

template<bool IsRecursive>
Output bb::ChonkVerifier< IsRecursive >::verify ( const Proof proof)

Verify a Chonk proof.

Recursive mode (IsRecursive=true): Creates circuit constraints that verify:

  1. MegaZK proof of the hiding kernel
  2. Databus consistency (kernel return data == calldata)
  3. Goblin proof (Merge + ECCVM + TripleIPA + Translator) - reduces to pairing points and a compact TripleIPA claim/proof Returns Output containing pairing points and a TripleIPA opening for deferred verification. Both pairing verification and TripleIPA verification are deferred.

Native mode (IsRecursive=false): Performs full verification including:

  1. MegaZK proof of the hiding kernel
  2. Databus consistency (kernel return data == calldata)
  3. Goblin proof (Merge + ECCVM + Translator) with immediate pairing check
  4. TripleIPA verification Returns bool indicating whether verification succeeded.
Parameters
proofChonk proof (ChonkStdlibProof for recursive, ChonkProof for native mode)
Returns
Output (ReductionResult for recursive, bool for native)

Member Data Documentation

◆ NUM_PAIRING_POINTS

template<bool IsRecursive>
constexpr size_t bb::ChonkVerifier< IsRecursive >::NUM_PAIRING_POINTS = 3
staticconstexprprivate

Definition at line 60 of file chonk_verifier.hpp.

◆ transcript

template<bool IsRecursive>
std::shared_ptr<Transcript> bb::ChonkVerifier< IsRecursive >::transcript
private

Definition at line 135 of file chonk_verifier.hpp.

◆ vk_and_hash

template<bool IsRecursive>
std::shared_ptr<VKAndHash> bb::ChonkVerifier< IsRecursive >::vk_and_hash
private

Definition at line 133 of file chonk_verifier.hpp.


The documentation for this class was generated from the following file: