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

Unified test fixture for native and recursive merge verification. More...

Inheritance diagram for bb::MergeTests< Curve >:

Public Types

enum class  TamperProofMode : uint8_t { None , Shift , MCommitment , LEval }
 
using FF = typename Curve::ScalarField
 
using Commitment = typename Curve::AffineElement
 
using GroupElement = typename Curve::Element
 
using MergeVerifierType = MergeVerifier_< Curve >
 
using Transcript = typename MergeVerifierType::Transcript
 
using PairingPoints = typename MergeVerifierType::PairingPoints
 
using TableCommitments = typename MergeVerifierType::TableCommitments
 
using InputCommitments = typename MergeVerifierType::InputCommitments
 
using Proof = typename MergeVerifierType::Proof
 
using BuilderType = typename BuilderTypeHelper< Curve >::type
 

Static Public Member Functions

static void SetUpTestSuite ()
 
static std::shared_ptr< ECCOpQueueconstruct_final_merge_op_queue (const size_t num_subtables_up_to_tail=1)
 
template<typename T >
static auto to_native (const T &val)
 Convert a stdlib type to its native value.
 
static Commitment create_commitment (BuilderType &builder, const curve::BN254::AffineElement &native_commitment)
 Create a commitment from a native commitment value.
 
static Proof create_proof (BuilderType &builder, const std::vector< bb::fr > &native_proof)
 Create a proof object from a vector of field elements.
 
static bool check_circuit (BuilderType &builder)
 Check circuit validity (only relevant in recursive context)
 
static void tamper_with_proof (std::vector< bb::fr > &merge_proof, const TamperProofMode tampering_mode)
 Tamper with the merge proof for failure testing.
 
static void prove_and_verify_merge (const std::shared_ptr< ECCOpQueue > &op_queue, const TamperProofMode tampering_mode=TamperProofMode::None, const bool expected=true)
 Prove and verify a merge proof in both native and recursive contexts.
 
static void test_merge_proof_size ()
 Test that merge proof size matches the expected constant.
 
static void test_single_merge ()
 Test basic merge proof construction and verification.
 
static void test_multiple_merges ()
 Test a final merge proof with multiple historical subtables up to the tail.
 
static void test_degree_check_failure ()
 Test failure when degree(l) > shift_size (as read from the proof)
 
static void test_merge_failure ()
 Test failure when m ≠ l + X^k r.
 
static void test_eval_failure ()
 Test failure when g_j(kappa) ≠ kappa^{k-1} * l_j(1/kappa)
 
static void test_honest_empty_left_table ()
 Test that an honestly constructed merge proof with shift_size = 0 (empty left table) verifies.
 

Static Public Attributes

static constexpr bool IsRecursive = Curve::is_stdlib_type
 
static constexpr size_t NUM_WIRES = MegaExecutionTraceBlocks::NUM_WIRES
 

Detailed Description

template<typename Curve>
class bb::MergeTests< Curve >

Unified test fixture for native and recursive merge verification.

Templates on Curve type to handle both native (curve::BN254) and recursive (bn254<Builder>) contexts

Template Parameters
CurveThe curve type (native or stdlib)

Definition at line 31 of file merge.test.cpp.

Member Typedef Documentation

◆ BuilderType

template<typename Curve >
using bb::MergeTests< Curve >::BuilderType = typename BuilderTypeHelper<Curve>::type

Definition at line 49 of file merge.test.cpp.

◆ Commitment

template<typename Curve >
using bb::MergeTests< Curve >::Commitment = typename Curve::AffineElement

Definition at line 36 of file merge.test.cpp.

◆ FF

template<typename Curve >
using bb::MergeTests< Curve >::FF = typename Curve::ScalarField

Definition at line 35 of file merge.test.cpp.

◆ GroupElement

template<typename Curve >
using bb::MergeTests< Curve >::GroupElement = typename Curve::Element

Definition at line 37 of file merge.test.cpp.

◆ InputCommitments

template<typename Curve >
using bb::MergeTests< Curve >::InputCommitments = typename MergeVerifierType::InputCommitments

Definition at line 42 of file merge.test.cpp.

◆ MergeVerifierType

template<typename Curve >
using bb::MergeTests< Curve >::MergeVerifierType = MergeVerifier_<Curve>

Definition at line 38 of file merge.test.cpp.

◆ PairingPoints

template<typename Curve >
using bb::MergeTests< Curve >::PairingPoints = typename MergeVerifierType::PairingPoints

Definition at line 40 of file merge.test.cpp.

◆ Proof

template<typename Curve >
using bb::MergeTests< Curve >::Proof = typename MergeVerifierType::Proof

Definition at line 43 of file merge.test.cpp.

◆ TableCommitments

template<typename Curve >
using bb::MergeTests< Curve >::TableCommitments = typename MergeVerifierType::TableCommitments

Definition at line 41 of file merge.test.cpp.

◆ Transcript

template<typename Curve >
using bb::MergeTests< Curve >::Transcript = typename MergeVerifierType::Transcript

Definition at line 39 of file merge.test.cpp.

Member Enumeration Documentation

◆ TamperProofMode

template<typename Curve >
enum class bb::MergeTests::TamperProofMode : uint8_t
strong
Enumerator
None 
Shift 
MCommitment 
LEval 

Definition at line 51 of file merge.test.cpp.

Member Function Documentation

◆ check_circuit()

template<typename Curve >
static bool bb::MergeTests< Curve >::check_circuit ( BuilderType builder)
inlinestatic

Check circuit validity (only relevant in recursive context)

Definition at line 122 of file merge.test.cpp.

◆ construct_final_merge_op_queue()

template<typename Curve >
static std::shared_ptr< ECCOpQueue > bb::MergeTests< Curve >::construct_final_merge_op_queue ( const size_t  num_subtables_up_to_tail = 1)
inlinestatic

Definition at line 53 of file merge.test.cpp.

◆ create_commitment()

template<typename Curve >
static Commitment bb::MergeTests< Curve >::create_commitment ( BuilderType builder,
const curve::BN254::AffineElement native_commitment 
)
inlinestatic

Create a commitment from a native commitment value.

In native context, returns commitment as-is; in recursive context, creates witness commitment

Definition at line 89 of file merge.test.cpp.

◆ create_proof()

template<typename Curve >
static Proof bb::MergeTests< Curve >::create_proof ( BuilderType builder,
const std::vector< bb::fr > &  native_proof 
)
inlinestatic

Create a proof object from a vector of field elements.

In native context, returns vector as-is; in recursive context, creates stdlib::Proof which is then converted to std::vector<FF>

Definition at line 106 of file merge.test.cpp.

◆ prove_and_verify_merge()

template<typename Curve >
static void bb::MergeTests< Curve >::prove_and_verify_merge ( const std::shared_ptr< ECCOpQueue > &  op_queue,
const TamperProofMode  tampering_mode = TamperProofMode::None,
const bool  expected = true 
)
inlinestatic

Prove and verify a merge proof in both native and recursive contexts.

Creates a merge proof, optionally tampers with it, then verifies in the appropriate context

Definition at line 172 of file merge.test.cpp.

◆ SetUpTestSuite()

template<typename Curve >
static void bb::MergeTests< Curve >::SetUpTestSuite ( )
inlinestatic

Definition at line 33 of file merge.test.cpp.

◆ tamper_with_proof()

template<typename Curve >
static void bb::MergeTests< Curve >::tamper_with_proof ( std::vector< bb::fr > &  merge_proof,
const TamperProofMode  tampering_mode 
)
inlinestatic

Tamper with the merge proof for failure testing.

Definition at line 135 of file merge.test.cpp.

◆ test_degree_check_failure()

template<typename Curve >
static void bb::MergeTests< Curve >::test_degree_check_failure ( )
inlinestatic

Test failure when degree(l) > shift_size (as read from the proof)

Definition at line 273 of file merge.test.cpp.

◆ test_eval_failure()

template<typename Curve >
static void bb::MergeTests< Curve >::test_eval_failure ( )
inlinestatic

Test failure when g_j(kappa) ≠ kappa^{k-1} * l_j(1/kappa)

Definition at line 293 of file merge.test.cpp.

◆ test_honest_empty_left_table()

template<typename Curve >
static void bb::MergeTests< Curve >::test_honest_empty_left_table ( )
inlinestatic

Test that an honestly constructed merge proof with shift_size = 0 (empty left table) verifies.

Manually constructs a merge proof where the left table is empty, M = R, and all PCS openings are computed honestly. This bypasses the op queue (which structurally prevents empty subtables) to test the protocol math directly.

Definition at line 306 of file merge.test.cpp.

◆ test_merge_failure()

template<typename Curve >
static void bb::MergeTests< Curve >::test_merge_failure ( )
inlinestatic

Test failure when m ≠ l + X^k r.

Definition at line 283 of file merge.test.cpp.

◆ test_merge_proof_size()

template<typename Curve >
static void bb::MergeTests< Curve >::test_merge_proof_size ( )
inlinestatic

Test that merge proof size matches the expected constant.

Useful for ensuring correct construction of mock merge proofs

Definition at line 239 of file merge.test.cpp.

◆ test_multiple_merges()

template<typename Curve >
static void bb::MergeTests< Curve >::test_multiple_merges ( )
inlinestatic

Test a final merge proof with multiple historical subtables up to the tail.

Definition at line 264 of file merge.test.cpp.

◆ test_single_merge()

template<typename Curve >
static void bb::MergeTests< Curve >::test_single_merge ( )
inlinestatic

Test basic merge proof construction and verification.

Definition at line 254 of file merge.test.cpp.

◆ to_native()

template<typename Curve >
template<typename T >
static auto bb::MergeTests< Curve >::to_native ( const T &  val)
inlinestatic

Convert a stdlib type to its native value.

In native context, returns value as-is; in recursive context, extracts the native value

Definition at line 76 of file merge.test.cpp.

Member Data Documentation

◆ IsRecursive

template<typename Curve >
constexpr bool bb::MergeTests< Curve >::IsRecursive = Curve::is_stdlib_type
staticconstexpr

Definition at line 45 of file merge.test.cpp.

◆ NUM_WIRES

template<typename Curve >
constexpr size_t bb::MergeTests< Curve >::NUM_WIRES = MegaExecutionTraceBlocks::NUM_WIRES
staticconstexpr

Definition at line 46 of file merge.test.cpp.


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