Test suite for recursive verification of Honk proofs for both Ultra and Mega arithmetisation.
More...
|
| static void | SetUpTestSuite () |
| |
| static void | test_inner_circuit () |
| | Create inner circuit and call check_circuit on it.
|
| |
| static void | test_recursive_verification_key_creation () |
| | Instantiate a recursive verification key from the native verification key produced by the inner cicuit builder. Check consistency between the native and stdlib types.
|
| |
| static void | test_independent_vk_hash () |
| | Ensures that the recursive verifier circuit for two inner circuits of different size is the same as the proofs are currently constant. This is done by taking each trace block in part and checking all its selector values.
|
| |
| static void | test_recursive_verification () |
| | Construct a recursive verification circuit for the proof of an inner circuit then call check_circuit on it.
|
| |
| static void | test_recursive_verification_fails () |
| | Construct verifier circuits for proofs whose data have been tampered with. Expect failure.
|
| |
| static void | test_recursive_verification_fails () |
| | Tamper with a MegaZK proof in two ways. First, we modify the first non-zero value in the proof, which has to lead to a CircuitChecker failure. Then we also modify the last commitment ("KZG:W") in the proof, in this case, CircuitChecker succeeds, but the pairing check must fail.
|
| |
|
| using | InnerFlavor = typename RecursiveFlavor::NativeFlavor |
| |
| using | InnerProver = UltraProver_< InnerFlavor > |
| |
| using | InnerBuilder = typename InnerFlavor::CircuitBuilder |
| |
| using | InnerProverInstance = ProverInstance_< InnerFlavor > |
| |
| using | InnerCommitment = InnerFlavor::Commitment |
| |
| using | InnerFF = InnerFlavor::FF |
| |
| using | InnerProof = std::vector< InnerFF > |
| |
| using | NativeInnerIO = std::conditional_t< HasIPAAccumulator< InnerFlavor >, bb::RollupIO, bb::DefaultIO > |
| |
| using | InnerVerifier = bb::UltraVerifier_< InnerFlavor, NativeInnerIO > |
| |
| using | InnerIO = std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO< InnerBuilder > > |
| |
| using | OuterBuilder = typename RecursiveFlavor::CircuitBuilder |
| |
| using | OuterFlavor = std::conditional_t< IsMegaBuilder< OuterBuilder >, MegaFlavor, std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, UltraRollupFlavor, UltraFlavor > > |
| |
| using | OuterProver = UltraProver_< OuterFlavor > |
| |
| using | NativeOuterIO = std::conditional_t< HasIPAAccumulator< OuterFlavor >, bb::RollupIO, bb::DefaultIO > |
| |
| using | OuterVerifier = bb::UltraVerifier_< OuterFlavor, NativeOuterIO > |
| |
| using | OuterProverInstance = ProverInstance_< OuterFlavor > |
| |
| using | OuterStdlibProof = bb::stdlib::Proof< OuterBuilder > |
| |
| using | OuterIO = std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO< OuterBuilder > > |
| |
| using | RecursiveVerifier = bb::UltraVerifier_< RecursiveFlavor, DefaultRecursiveIO< RecursiveFlavor > > |
| |
| using | VerificationKey = typename RecursiveVerifier::VerificationKey |
| |
| using | PairingObject = PairingPoints< OuterBuilder > |
| |
| using | VerifierOutput = bb::stdlib::recursion::honk::UltraRecursiveVerifierOutput< OuterBuilder > |
| |
| using | NativeVerifierCommitmentKey = typename InnerFlavor::VerifierCommitmentKey |
| |
template<typename RecursiveFlavor>
class bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >
Test suite for recursive verification of Honk proofs for both Ultra and Mega arithmetisation.
Inner* types describe the type of circuits (and everything else required to generate a proof) that we aim to recursively verify. Outer* describes the arithmetisation of the recursive verifier circuit and the types required to ensure the recursive verifier circuit is correct (i.e. by producing a proof and verifying it).
- Template Parameters
-
| RecursiveFlavor | defines the recursive verifier, what the arithmetisation of its circuit should be and what types of proofs it recursively verifies. |
Definition at line 34 of file ultra_recursive_verifier.test.cpp.