Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::UltraVerifier_< Flavor, IO > Class Template Reference

#include <ultra_verifier.hpp>

Classes

struct  PaddingData
 Result of padding computation. More...
 
struct  ReductionResult
 Result of reducing ultra proof to pairing points check. Contains pairing points and the aggrefate result of intermediate checks. More...
 

Public Types

using FF = typename Flavor::FF
 
using Commitment = typename Flavor::Commitment
 
using Curve = typename Flavor::Curve
 
using VerificationKey = typename Flavor::VerificationKey
 
using Transcript = typename Flavor::Transcript
 
using Instance = VerifierInstance_< Flavor >
 
using Builder = std::conditional_t< IsRecursive, typename Flavor::CircuitBuilder, void >
 
using PairingPoints = std::conditional_t< IsRecursive, stdlib::recursion::PairingPoints< Curve >, bb::PairingPoints< Curve > >
 
using PublicInputs = std::vector< FF >
 
using Proof = typename Transcript::Proof
 
using Output = std::conditional_t< IsRecursive, stdlib::recursion::honk::UltraRecursiveVerifierOutput< Builder >, UltraVerifierOutput< Flavor > >
 
using IPACurve = std::conditional_t< IsRecursive, stdlib::grumpkin< Builder >, curve::Grumpkin >
 
using IPAClaim = OpeningClaim< IPACurve >
 
using VKAndHash = typename Flavor::VKAndHash
 A constructor for native and recursive verifiers.
 

Public Member Functions

 UltraVerifier_ (const std::shared_ptr< VKAndHash > &vk_and_hash, const std::shared_ptr< Transcript > &transcript=std::make_shared< Transcript >())
 
PaddingData process_padding () const
 Compute log_n and padding indicator array based on flavor configuration.
 
ReductionResult reduce_to_pairing_check (const Proof &proof)
 Reduce ultra proof to verification claims (works for both native and recursive)
 
std::pair< Proof, Proofsplit_rollup_proof (const Proof &combined_proof) const
 Split a combined rollup proof into honk and IPA components.
 
bool verify_ipa (const Proof &ipa_proof, const IPAClaim &ipa_claim)
 Verify IPA proof for rollup circuits (native verifier only)
 
Output verify_proof (const Proof &proof)
 Perform ultra verification.
 
const std::shared_ptr< Transcript > & get_transcript () const
 Get the transcript (for accessing manifest in tests)
 
const std::shared_ptr< Instance > & get_verifier_instance () const
 Get the verifier instance (for accessing VK and witness commitments in Chonk/Goblin)
 
const PublicInputsget_public_inputs () const
 Get public inputs from the verifier instance.
 
const Flavor::WitnessCommitments & get_witness_commitments () const
 Get witness commitments from the verifier instance.
 
const Commitmentget_calldata_commitment () const
 Get calldata commitment (MegaFlavor only)
 
auto get_ecc_op_wires () const
 Get ECC op wire commitments as an array (MegaFlavor only)
 

Static Public Attributes

static constexpr bool IsRecursive = IsRecursiveFlavor<Flavor>
 

Private Attributes

std::shared_ptr< VKAndHashvk_and_hash
 
std::shared_ptr< Instanceverifier_instance
 
std::shared_ptr< Transcripttranscript
 
std::shared_ptr< Transcriptipa_transcript
 
Builderbuilder
 

Detailed Description

template<typename Flavor, class IO>
class bb::UltraVerifier_< Flavor, IO >

Definition at line 82 of file ultra_verifier.hpp.

Member Typedef Documentation

◆ Builder

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Builder = std::conditional_t<IsRecursive, typename Flavor::CircuitBuilder, void>

Definition at line 94 of file ultra_verifier.hpp.

◆ Commitment

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Commitment = typename Flavor::Commitment

Definition at line 85 of file ultra_verifier.hpp.

◆ Curve

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Curve = typename Flavor::Curve

Definition at line 86 of file ultra_verifier.hpp.

◆ FF

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::FF = typename Flavor::FF

Definition at line 84 of file ultra_verifier.hpp.

◆ Instance

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Instance = VerifierInstance_<Flavor>

Definition at line 89 of file ultra_verifier.hpp.

◆ IPAClaim

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::IPAClaim = OpeningClaim<IPACurve>

Definition at line 108 of file ultra_verifier.hpp.

◆ IPACurve

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::IPACurve = std::conditional_t<IsRecursive, stdlib::grumpkin<Builder>, curve::Grumpkin>

Definition at line 107 of file ultra_verifier.hpp.

◆ Output

◆ PairingPoints

Definition at line 95 of file ultra_verifier.hpp.

◆ Proof

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Proof = typename Transcript::Proof

Definition at line 99 of file ultra_verifier.hpp.

◆ PublicInputs

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::PublicInputs = std::vector<FF>

Definition at line 98 of file ultra_verifier.hpp.

◆ Transcript

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::Transcript = typename Flavor::Transcript

Definition at line 88 of file ultra_verifier.hpp.

◆ VerificationKey

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::VerificationKey = typename Flavor::VerificationKey

Definition at line 87 of file ultra_verifier.hpp.

◆ VKAndHash

template<typename Flavor , class IO >
using bb::UltraVerifier_< Flavor, IO >::VKAndHash = typename Flavor::VKAndHash

A constructor for native and recursive verifiers.

Parameters
vk_and_hashContains verification key and its hash
transcriptTranscript instance (optional, defaults to new transcript)

Definition at line 134 of file ultra_verifier.hpp.

Constructor & Destructor Documentation

◆ UltraVerifier_()

template<typename Flavor , class IO >
bb::UltraVerifier_< Flavor, IO >::UltraVerifier_ ( const std::shared_ptr< VKAndHash > &  vk_and_hash,
const std::shared_ptr< Transcript > &  transcript = std::make_shared<Transcript>() 
)
inlineexplicit

Definition at line 135 of file ultra_verifier.hpp.

Member Function Documentation

◆ get_calldata_commitment()

template<typename Flavor , class IO >
const Commitment & bb::UltraVerifier_< Flavor, IO >::get_calldata_commitment ( ) const
inline

Get calldata commitment (MegaFlavor only)

Definition at line 221 of file ultra_verifier.hpp.

◆ get_ecc_op_wires()

template<typename Flavor , class IO >
auto bb::UltraVerifier_< Flavor, IO >::get_ecc_op_wires ( ) const
inline

Get ECC op wire commitments as an array (MegaFlavor only)

Definition at line 230 of file ultra_verifier.hpp.

◆ get_public_inputs()

template<typename Flavor , class IO >
const PublicInputs & bb::UltraVerifier_< Flavor, IO >::get_public_inputs ( ) const
inline

Get public inputs from the verifier instance.

Definition at line 208 of file ultra_verifier.hpp.

◆ get_transcript()

template<typename Flavor , class IO >
const std::shared_ptr< Transcript > & bb::UltraVerifier_< Flavor, IO >::get_transcript ( ) const
inline

Get the transcript (for accessing manifest in tests)

Definition at line 198 of file ultra_verifier.hpp.

◆ get_verifier_instance()

template<typename Flavor , class IO >
const std::shared_ptr< Instance > & bb::UltraVerifier_< Flavor, IO >::get_verifier_instance ( ) const
inline

Get the verifier instance (for accessing VK and witness commitments in Chonk/Goblin)

Definition at line 203 of file ultra_verifier.hpp.

◆ get_witness_commitments()

template<typename Flavor , class IO >
const Flavor::WitnessCommitments & bb::UltraVerifier_< Flavor, IO >::get_witness_commitments ( ) const
inline

Get witness commitments from the verifier instance.

Definition at line 213 of file ultra_verifier.hpp.

◆ process_padding()

template<typename Flavor , class IO >
UltraVerifier_< Flavor, IO >::PaddingData bb::UltraVerifier_< Flavor, IO >::process_padding ( ) const

Compute log_n and padding indicator array based on flavor configuration.

Handles all combinations of native/recursive, ZK/non-ZK, and padding/no-padding:

  • Non-ZK flavors: log_n from USE_PADDING, all 1s array
  • ZK without padding: log_n from VK, all 1s array
  • Native ZK with padding: VIRTUAL_LOG_N, simple loop comparison
  • Recursive ZK with padding: VIRTUAL_LOG_N, in-circuit Lagrange computation
    Returns
    PaddingData containing log_n and padding_indicator_array
    Handles all combinations of native/recursive, ZK/non-ZK, and padding/no-padding
    Returns
    PaddingData containing log_n and padding_indicator_array

Definition at line 30 of file ultra_verifier.cpp.

◆ reduce_to_pairing_check()

template<typename Flavor , class IO >
UltraVerifier_< Flavor, IO >::ReductionResult bb::UltraVerifier_< Flavor, IO >::reduce_to_pairing_check ( const Proof proof)

Reduce ultra proof to verification claims (works for both native and recursive)

Contains all shared verification logic: Oink, Sumcheck, Shplemini

Returns
ReductionResult with pairing points and intermediate consistency checks

Definition at line 124 of file ultra_verifier.cpp.

◆ split_rollup_proof()

template<typename Flavor , class IO >
requires (HasIPAAccumulator<Flavor>)
std::pair< typename UltraVerifier_< Flavor, IO >::Proof, typename UltraVerifier_< Flavor, IO >::Proof > bb::UltraVerifier_< Flavor, IO >::split_rollup_proof ( const Proof combined_proof) const

Split a combined rollup proof into honk and IPA components.

Parameters
combined_proofThe concatenated [honk_proof | ipa_proof]
Returns
std::pair<Proof, Proof> The {honk_proof, ipa_proof} pair

Definition at line 74 of file ultra_verifier.cpp.

◆ verify_ipa()

template<typename Flavor , class IO >
requires (!IsRecursiveFlavor<Flavor> && HasIPAAccumulator<Flavor>)
bool bb::UltraVerifier_< Flavor, IO >::verify_ipa ( const Proof ipa_proof,
const IPAClaim ipa_claim 
)

Verify IPA proof for rollup circuits (native verifier only)

Parameters
ipa_proofThe IPA proof to verify
ipa_claimThe IPA opening claim from public inputs
Returns
bool True if IPA verification succeeds

Definition at line 103 of file ultra_verifier.cpp.

◆ verify_proof()

template<typename Flavor , class IO >
UltraVerifier_< Flavor, IO >::Output bb::UltraVerifier_< Flavor, IO >::verify_proof ( const Proof proof)

Perform ultra verification.

For Rollup flavors, the proof is expected to be a combined [honk_proof | ipa_proof] and will be split internally. For non-Rollup flavors, the proof is used as-is.

  • Native: Performs immediate pairing check (+ IPA verification for Rollup)
  • Recursive: Returns pairing points (+ IPA proof for Rollup) for deferred verification
Parameters
proofThe proof (combined with IPA for Rollup flavors)
Returns
Output (UltraVerifierOutput for native, UltraRecursiveVerifierOutput for recursive)

For Rollup flavors, splits the combined proof internally.

  • Native: Performs immediate pairing verification (+ IPA for Rollup)
  • Recursive: Returns pairing points (+ IPA proof for Rollup) for deferred verification

Definition at line 214 of file ultra_verifier.cpp.

Member Data Documentation

◆ builder

template<typename Flavor , class IO >
Builder* bb::UltraVerifier_< Flavor, IO >::builder
private

Definition at line 243 of file ultra_verifier.hpp.

◆ ipa_transcript

template<typename Flavor , class IO >
std::shared_ptr<Transcript> bb::UltraVerifier_< Flavor, IO >::ipa_transcript
private

Definition at line 240 of file ultra_verifier.hpp.

◆ IsRecursive

template<typename Flavor , class IO >
constexpr bool bb::UltraVerifier_< Flavor, IO >::IsRecursive = IsRecursiveFlavor<Flavor>
staticconstexpr

Definition at line 91 of file ultra_verifier.hpp.

◆ transcript

template<typename Flavor , class IO >
std::shared_ptr<Transcript> bb::UltraVerifier_< Flavor, IO >::transcript
private

Definition at line 239 of file ultra_verifier.hpp.

◆ verifier_instance

template<typename Flavor , class IO >
std::shared_ptr<Instance> bb::UltraVerifier_< Flavor, IO >::verifier_instance
private

Definition at line 238 of file ultra_verifier.hpp.

◆ vk_and_hash

template<typename Flavor , class IO >
std::shared_ptr<VKAndHash> bb::UltraVerifier_< Flavor, IO >::vk_and_hash
private

Definition at line 237 of file ultra_verifier.hpp.


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