Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
chonk_proof.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Complete, auditors: [Sergei], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
9
10namespace bb {
11
15template <bool IsRecursive>
17{
18 HonkProof proof;
19
20 proof.insert(proof.end(), mega_proof.begin(), mega_proof.end());
21 proof.insert(proof.end(), goblin_proof.merge_proof.begin(), goblin_proof.merge_proof.end());
22 proof.insert(proof.end(), goblin_proof.eccvm_proof.begin(), goblin_proof.eccvm_proof.end());
23 proof.insert(proof.end(), goblin_proof.ipa_proof.begin(), goblin_proof.ipa_proof.end());
24 proof.insert(proof.end(), goblin_proof.translator_proof.begin(), goblin_proof.translator_proof.end());
25 return proof;
26};
27
31template <bool IsRecursive>
33{
34 HonkProof mega_proof;
35 GoblinProof goblin_proof;
36
37 // Calculate custom public inputs size from total proof size
38 BB_ASSERT_GTE(fields.size(), PROOF_LENGTH, "Proof size is less than minimum proof length");
39 size_t custom_public_inputs_size = fields.size() - PROOF_LENGTH;
40
41 // Mega proof
42 auto start_idx = fields.begin();
43 auto end_idx =
44 start_idx + static_cast<std::ptrdiff_t>(HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS +
45 bb::HidingKernelIO::PUBLIC_INPUTS_SIZE + custom_public_inputs_size);
46 mega_proof.insert(mega_proof.end(), start_idx, end_idx);
47
48 // Merge proof
49 start_idx = end_idx;
50 end_idx += static_cast<std::ptrdiff_t>(MERGE_PROOF_SIZE);
51 goblin_proof.merge_proof.insert(goblin_proof.merge_proof.end(), start_idx, end_idx);
52
53 // ECCVM proof
54 start_idx = end_idx;
56 goblin_proof.eccvm_proof.insert(goblin_proof.eccvm_proof.end(), start_idx, end_idx);
57
58 // IPA proof
59 start_idx = end_idx;
60 end_idx += static_cast<std::ptrdiff_t>(IPA_PROOF_LENGTH);
61 goblin_proof.ipa_proof.insert(goblin_proof.ipa_proof.end(), start_idx, end_idx);
62
63 // Translator proof
64 start_idx = end_idx;
66 goblin_proof.translator_proof.insert(goblin_proof.translator_proof.end(), start_idx, end_idx);
67
68 return ChonkProof_{ std::move(mega_proof), std::move(goblin_proof) };
69}
70
71// Explicit template instantiations
72template std::vector<bb::fr> ChonkProof_<false>::to_field_elements() const;
74
75template ChonkProof_<false> ChonkProof_<false>::from_field_elements(const std::vector<bb::fr>& fields);
77 const std::vector<stdlib::field_t<UltraCircuitBuilder>>& fields);
78
79} // namespace bb
#define BB_ASSERT_GTE(left, right,...)
Definition assert.hpp:138
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
static constexpr size_t PUBLIC_INPUTS_SIZE
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Chonk proof type.
std::conditional_t< IsRecursive, GoblinStdlibProof, ::bb::GoblinProof > GoblinProof
static ChonkProof_ from_field_elements(const std::vector< FF > &fields)
Common logic to reconstruct proof from field elements.
std::conditional_t< IsRecursive, stdlib::Proof< Builder >, ::bb::HonkProof > HonkProof
std::vector< FF > to_field_elements() const
Serialize proof to field elements (native mode)