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

Stateful HyperNova folding verifier (native + recursive). Verifies a series of instances against a starting accumulator and reduces them to one accumulator with a single multilinear batching proof. More...

#include <hypernova_verifier.hpp>

Public Types

using BaseFlavor = std::conditional_t< IsRecursive, MegaKernelRecursiveFlavor, MegaKernelFlavor >
 
using FF = typename BaseFlavor::FF
 
using Curve = typename BaseFlavor::Curve
 
using Commitment = typename BaseFlavor::Commitment
 
using Transcript = typename BaseFlavor::Transcript
 
using Accumulator = MultilinearBatchingVerifierClaim< Curve >
 
using BatchingVerifier = MultilinearBatchingVerifier< IsRecursive >
 
using Proof = std::conditional_t< IsRecursive, stdlib::Proof< MegaCircuitBuilder >, HonkProof >
 
template<typename InstanceFlavor >
using VerifierInstance = VerifierInstance_< InstanceFlavor >
 

Public Member Functions

 HypernovaFoldingVerifier (std::shared_ptr< Transcript > transcript)
 
template<typename InstanceFlavor >
bool accumulate_instance (const std::shared_ptr< VerifierInstance< InstanceFlavor > > &instance, const Proof &proof)
 Verify the instance-to-accumulator sumcheck of one incoming proof and cache the resulting claim.
 
std::pair< bool, Accumulatorfinalize (const Proof &batching_proof, std::optional< Accumulator > previous_accumulator=std::nullopt)
 Batch the previous accumulator (if any) and the cached claims into a single accumulator.
 
const std::vector< Accumulator > & get_cached_claims () const
 

Static Public Attributes

static constexpr bool IsRecursive = IsRecursive_
 

Private Member Functions

template<typename InstanceFlavor >
SumcheckOutput< InstanceFlavor > sumcheck_on_incoming_instance (const std::shared_ptr< VerifierInstance< InstanceFlavor > > &instance, const Proof &proof, size_t num_public_inputs)
 Perform Oink + Sumcheck on the incoming instance, generating the challenges at which the polynomial commitments have to be opened.
 
template<typename InstanceFlavor >
Accumulator sumcheck_output_to_accumulator (SumcheckOutput< InstanceFlavor > &sumcheck_output, const std::shared_ptr< VerifierInstance< InstanceFlavor > > &instance)
 Convert the output of the instance sumcheck into an accumulator claim.
 
template<size_t N>
Commitment batch_mul (std::span< Commitment, N > _points, std::vector< FF > &scalars)
 Utility to perform batch mul of commitments.
 

Private Attributes

std::shared_ptr< Transcripttranscript
 
std::vector< Accumulatorcached_claims
 

Detailed Description

template<bool IsRecursive_>
class bb::HypernovaFoldingVerifier< IsRecursive_ >

Stateful HyperNova folding verifier (native + recursive). Verifies a series of instances against a starting accumulator and reduces them to one accumulator with a single multilinear batching proof.

See: chonk/README.md#hypernova-folding-details

Lifecycle

Construct → accumulate_instance<InstanceFlavor>() once per incoming proof → finalize() exactly once. SINGLE-USE: construct a fresh verifier for each folding group

Definition at line 35 of file hypernova_verifier.hpp.

Member Typedef Documentation

◆ Accumulator

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::Accumulator = MultilinearBatchingVerifierClaim<Curve>

Definition at line 45 of file hypernova_verifier.hpp.

◆ BaseFlavor

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::BaseFlavor = std::conditional_t<IsRecursive, MegaKernelRecursiveFlavor, MegaKernelFlavor>

Definition at line 40 of file hypernova_verifier.hpp.

◆ BatchingVerifier

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::BatchingVerifier = MultilinearBatchingVerifier<IsRecursive>

Definition at line 46 of file hypernova_verifier.hpp.

◆ Commitment

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::Commitment = typename BaseFlavor::Commitment

Definition at line 43 of file hypernova_verifier.hpp.

◆ Curve

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::Curve = typename BaseFlavor::Curve

Definition at line 42 of file hypernova_verifier.hpp.

◆ FF

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::FF = typename BaseFlavor::FF

Definition at line 41 of file hypernova_verifier.hpp.

◆ Proof

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::Proof = std::conditional_t<IsRecursive, stdlib::Proof<MegaCircuitBuilder>, HonkProof>

Definition at line 47 of file hypernova_verifier.hpp.

◆ Transcript

template<bool IsRecursive_>
using bb::HypernovaFoldingVerifier< IsRecursive_ >::Transcript = typename BaseFlavor::Transcript

Definition at line 44 of file hypernova_verifier.hpp.

◆ VerifierInstance

template<bool IsRecursive_>
template<typename InstanceFlavor >
using bb::HypernovaFoldingVerifier< IsRecursive_ >::VerifierInstance = VerifierInstance_<InstanceFlavor>

Definition at line 49 of file hypernova_verifier.hpp.

Constructor & Destructor Documentation

◆ HypernovaFoldingVerifier()

template<bool IsRecursive_>
bb::HypernovaFoldingVerifier< IsRecursive_ >::HypernovaFoldingVerifier ( std::shared_ptr< Transcript transcript)
inline

Definition at line 51 of file hypernova_verifier.hpp.

Member Function Documentation

◆ accumulate_instance()

template<bool IsRecursive_>
template<typename InstanceFlavor >
template bool bb::HypernovaFoldingVerifier< IsRecursive_ >::accumulate_instance< MegaAppRecursiveFlavor > ( const std::shared_ptr< VerifierInstance< InstanceFlavor > > &  instance,
const Proof proof 
)

Verify the instance-to-accumulator sumcheck of one incoming proof and cache the resulting claim.

Returns
Whether the instance sumcheck passed. The claim is cached for finalize() regardless.

Definition at line 34 of file hypernova_verifier.cpp.

◆ batch_mul()

template<bool IsRecursive_>
template<size_t N>
HypernovaFoldingVerifier< IsRecursive_ >::Commitment bb::HypernovaFoldingVerifier< IsRecursive_ >::batch_mul ( std::span< Commitment, N _points,
std::vector< FF > &  scalars 
)
private

Utility to perform batch mul of commitments.

Definition at line 22 of file hypernova_verifier.cpp.

◆ finalize()

template<bool IsRecursive_>
std::pair< bool, typename HypernovaFoldingVerifier< IsRecursive_ >::Accumulator > bb::HypernovaFoldingVerifier< IsRecursive_ >::finalize ( const Proof batching_proof,
std::optional< Accumulator previous_accumulator = std::nullopt 
)

Batch the previous accumulator (if any) and the cached claims into a single accumulator.

The previous accumulator is claim 0, followed by the cached per-instance claims in order. With a single assembled claim there is nothing to batch: it is returned and the batching proof is ignored (it is empty). With two or more, the MultilinearBatching proof is loaded onto the shared transcript and verified.

Returns
(verified, new_accumulator). For the single-claim case verified is true.

Definition at line 108 of file hypernova_verifier.cpp.

◆ get_cached_claims()

template<bool IsRecursive_>
const std::vector< Accumulator > & bb::HypernovaFoldingVerifier< IsRecursive_ >::get_cached_claims ( ) const
inline

Definition at line 73 of file hypernova_verifier.hpp.

◆ sumcheck_on_incoming_instance()

template<bool IsRecursive_>
template<typename InstanceFlavor >
SumcheckOutput< InstanceFlavor > bb::HypernovaFoldingVerifier< IsRecursive_ >::sumcheck_on_incoming_instance ( const std::shared_ptr< VerifierInstance< InstanceFlavor > > &  instance,
const Proof proof,
size_t  num_public_inputs 
)
private

Perform Oink + Sumcheck on the incoming instance, generating the challenges at which the polynomial commitments have to be opened.

Definition at line 57 of file hypernova_verifier.cpp.

◆ sumcheck_output_to_accumulator()

template<bool IsRecursive_>
template<typename InstanceFlavor >
HypernovaFoldingVerifier< IsRecursive_ >::Accumulator bb::HypernovaFoldingVerifier< IsRecursive_ >::sumcheck_output_to_accumulator ( SumcheckOutput< InstanceFlavor > &  sumcheck_output,
const std::shared_ptr< VerifierInstance< InstanceFlavor > > &  instance 
)
private

Convert the output of the instance sumcheck into an accumulator claim.

Definition at line 76 of file hypernova_verifier.cpp.

Member Data Documentation

◆ cached_claims

template<bool IsRecursive_>
std::vector<Accumulator> bb::HypernovaFoldingVerifier< IsRecursive_ >::cached_claims
private

Definition at line 77 of file hypernova_verifier.hpp.

◆ IsRecursive

template<bool IsRecursive_>
constexpr bool bb::HypernovaFoldingVerifier< IsRecursive_ >::IsRecursive = IsRecursive_
staticconstexpr

Definition at line 37 of file hypernova_verifier.hpp.

◆ transcript

template<bool IsRecursive_>
std::shared_ptr<Transcript> bb::HypernovaFoldingVerifier< IsRecursive_ >::transcript
private

Definition at line 76 of file hypernova_verifier.hpp.


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