|
| size_t | get_num_circuits () const |
| |
| Goblin & | get_goblin () override |
| |
| const Goblin & | get_goblin () const override |
| |
| | Chonk (size_t num_circuits) |
| |
| void | instantiate_stdlib_verification_queue (ClientCircuit &circuit, const std::vector< std::shared_ptr< RecursiveVKAndHash > > &input_keys={}) |
| | Instantiate a stdlib verification queue for use in the kernel completion logic.
|
| |
| std::tuple< std::optional< RecursiveVerifierAccumulator >, std::vector< PairingPoints >, TableCommitments > | perform_recursive_verification_and_databus_consistency_checks (ClientCircuit &circuit, const StdlibVerifierInputs &verifier_inputs, const std::optional< RecursiveVerifierAccumulator > &input_verifier_accumulator, const TableCommitments &T_prev_commitments, const std::shared_ptr< RecursiveTranscript > &accumulation_recursive_transcript) |
| | Populate the provided circuit with constraints for (1) recursive verification of the provided accumulation proof and (2) the associated databus commitment consistency checks.
|
| |
| void | complete_kernel_circuit_logic (ClientCircuit &circuit) |
| | Append logic to complete a kernel circuit.
|
| |
| void | accumulate (ClientCircuit &circuit, const std::shared_ptr< MegaVerificationKey > &precomputed_vk) override |
| | Perform prover work for accumulation (e.g. HN folding, merge proving)
|
| |
| ChonkProof | prove () |
| | Construct Chonk proof, which, if verified, fully establishes the correctness of RCG.
|
| |
| std::shared_ptr< MegaZKFlavor::VKAndHash > | get_hiding_kernel_vk_and_hash () const |
| | Get the hiding kernel verification key and hash for Chonk verification.
|
| |
| virtual | ~IVCBase ()=default |
| |
The IVC scheme used by the aztec client for private function execution.
Combines HyperNova with Goblin to accumulate one circuit at a time with efficient EC group operations. It is assumed that the circuits being accumulated correspond alternatingly to an app and a kernel, as is the case in Aztec. Two recursive folding verifiers are appended to each kernel (except the first one) to verify the folding of a previous kernel and an app/function circuit. Due to this structure it is enforced that the total number of circuits being accumulated is even.
Definition at line 38 of file chonk.hpp.
Proof type determining recursive verification logic in kernel circuits.
This enum has dual semantics depending on context:
PROVER PERSPECTIVE (in accumulate): Type assigned to the circuit being accumulated. State machine transitions based on num_circuits_accumulated:
- OINK: First app (circuit 0) - no prior accumulator, just Oink verification
- HN: Apps 1..n-3, inner kernels, and reset kernels - full HyperNova folding verification
- HN_TAIL: Circuit n-3 (last kernel before tail) - adds ZK masking at op queue start
- HN_FINAL: Circuit n-2 (tail kernel) - final folding + decider verification
- MEGA: Circuit n-1 (hiding kernel) - MegaZK proof, no folding
VERIFIER PERSPECTIVE (in complete_kernel_circuit_logic): Type of the proof being verified.
- If verifying OINK proof → this kernel is the init kernel (circuit 1)
- If verifying HN proof → this kernel is an inner/reset kernel
- If verifying HN_TAIL proof → this kernel IS the tail kernel (circuit n-2)
- If verifying HN_FINAL proof → this kernel IS the hiding kernel (circuit n-1)
See get_queue_type() for assignment logic and README.md::circuit-structure for overview.
| Enumerator |
|---|
| OINK | |
| HN | |
| HN_TAIL | |
| HN_FINAL | |
| MEGA | |
Definition at line 105 of file chonk.hpp.
Perform prover work for accumulation (e.g. HN folding, merge proving)
Execute prover work for accumulation.
- Parameters
-
| circuit | The incoming statement |
| precomputed_vk | The verification key of the incoming statement OR a mocked key whose metadata needs to be set using the proving key produced from circuit in order to pass some assertions in the Oink prover. |
| mock_vk | A boolean to say whether the precomputed vk should have its metadata set. |
Creates proofs that will later be recursively verified in kernel circuits.
Prover actions per QUEUE_TYPE (see chonk.hpp for verifier perspective):
- OINK: instance_to_accumulator (first app, circuit 0)
- HN: fold (circuits 1..n-4: apps, inner kernels, reset kernels)
- HN_TAIL: fold (circuit n-3)
- HN_FINAL: fold + decider (tail kernel, circuit n-2)
- MEGA: MegaZK proof (hiding kernel, circuit n-1)
- Parameters
-
| circuit | The circuit to accumulate |
| precomputed_vk | Precomputed verification key for the circuit |
Implements bb::IVCBase.
Definition at line 397 of file chonk.cpp.
| void bb::Chonk::hide_op_queue_accumulation_result |
( |
ClientCircuit & |
circuit | ) |
|
|
static |
Add a hiding op with fully random Px, Py field elements to prevent information leakage in Translator proof.
The Translator circuit builder evaluates a batched polynomial (representing the four op queue polynomials in UltraOp format) at a random challenge x. This evaluation result (called accumulated_result in translator) is included in the translator proof and verified against the equivalent computation performed by ECCVM (in verify_translation, establishing equivalence between ECCVM and UltraOp format).
Definition at line 496 of file chonk.cpp.
| void bb::Chonk::instantiate_stdlib_verification_queue |
( |
ClientCircuit & |
circuit, |
|
|
const std::vector< std::shared_ptr< RecursiveVKAndHash > > & |
input_keys = {} |
|
) |
| |
Instantiate a stdlib verification queue for use in the kernel completion logic.
Construct a stdlib proof/verification_key for each entry in the native verification queue. By default, both are constructed from their counterpart in the native queue. Alternatively, Stdlib verification keys can be provided directly as input to this method. (The later option is used, for example, when constructing recursive verifiers based on the verification key witnesses from an acir recursion constraint. This option is not provided for proofs since valid proof witnesses are in general not known at the time of acir constraint generation).
- Parameters
-
Definition at line 45 of file chonk.cpp.