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  ReductionResult
 Result of reducing ultra proof to pairing points check. Contains pairing points and the aggregate result of intermediate checks. More...
 

Public Types

using FF = typename Flavor::FF
 
using Commitment = typename Flavor::Commitment
 
using Curve = typename Flavor::Curve
 
using PCS = typename Flavor::PCS
 
using VerificationKey = typename Flavor::VerificationKey
 
using VerifierCommitments = typename Flavor::VerifierCommitments
 
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 >())
 
size_t compute_log_n () const
 Compute log_n based on flavor.
 
std::vector< FFcompute_padding_indicator_array (size_t log_n) const
 Compute 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 = nullptr
 

Detailed Description

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

Definition at line 79 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 93 of file ultra_verifier.hpp.

◆ Commitment

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

Definition at line 82 of file ultra_verifier.hpp.

◆ Curve

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

Definition at line 83 of file ultra_verifier.hpp.

◆ FF

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

Definition at line 81 of file ultra_verifier.hpp.

◆ Instance

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

Definition at line 88 of file ultra_verifier.hpp.

◆ IPAClaim

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

Definition at line 107 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 106 of file ultra_verifier.hpp.

◆ Output

◆ PairingPoints

Definition at line 94 of file ultra_verifier.hpp.

◆ PCS

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

Definition at line 84 of file ultra_verifier.hpp.

◆ Proof

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

Definition at line 98 of file ultra_verifier.hpp.

◆ PublicInputs

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

Definition at line 97 of file ultra_verifier.hpp.

◆ Transcript

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

Definition at line 87 of file ultra_verifier.hpp.

◆ VerificationKey

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

Definition at line 85 of file ultra_verifier.hpp.

◆ VerifierCommitments

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

Definition at line 86 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 124 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 125 of file ultra_verifier.hpp.

Member Function Documentation

◆ compute_log_n()

template<typename Flavor , class IO >
size_t bb::UltraVerifier_< Flavor, IO >::compute_log_n ( ) const

Compute log_n based on flavor.

Returns VIRTUAL_LOG_N for padded flavors, or VK's log_circuit_size otherwise.

Returns VIRTUAL_LOG_N for padded flavors, or VK's log_circuit_size otherwise. Called early in verification to derive num_public_inputs from proof size.

Definition at line 27 of file ultra_verifier.cpp.

◆ compute_padding_indicator_array()

template<typename Flavor , class IO >
std::vector< typename Flavor::FF > bb::UltraVerifier_< Flavor, IO >::compute_padding_indicator_array ( size_t  log_n) const

Compute padding indicator array based on flavor configuration.

Must be called AFTER OinkVerifier::verify() so VK fields are properly tagged.

Must be called AFTER OinkVerifier::verify() so that VK fields are properly tagged through the transcript (for recursive ZK flavors).

Parameters
log_nThe log circuit size (from compute_log_n)
Returns
std::vector<FF> padding indicator array

Definition at line 45 of file ultra_verifier.cpp.

◆ 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 212 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 221 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 199 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 189 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 194 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 204 of file ultra_verifier.hpp.

◆ 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 132 of file ultra_verifier.cpp.

◆ split_rollup_proof()

template<typename Flavor , class IO >
requires (IO::HasIPA)
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

Two-level proof structure for rollup circuits:

Prover Level (UltraProver_::export_proof()): Creates: [public_inputs | honk_proof | ipa_proof]

  • IPA proof appended if prover_instance->ipa_proof is non-empty

Verifier Level (this function): Splits: [honk_proof | ipa_proof] -> (honk_proof, ipa_proof)

Note
IPA_PROOF_LENGTH is defined in ipa.hpp as 4*CONST_ECCVM_LOG_N + 4
See also
UltraProver_::export_proof() for the proof construction side

Definition at line 89 of file ultra_verifier.cpp.

◆ verify_ipa()

template<typename Flavor , class IO >
requires (!IsRecursiveFlavor<Flavor> && IO::HasIPA)
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 111 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 232 of file ultra_verifier.cpp.

Member Data Documentation

◆ builder

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

Definition at line 234 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 231 of file ultra_verifier.hpp.

◆ IsRecursive

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

Definition at line 90 of file ultra_verifier.hpp.

◆ transcript

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

Definition at line 230 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 229 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 228 of file ultra_verifier.hpp.


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