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
11
12namespace bb {
13
17template <bool IsRecursive>
19{
20 HonkProof proof;
21
22 proof.insert(proof.end(), hiding_oink_proof.begin(), hiding_oink_proof.end());
23 proof.insert(proof.end(), merge_proof.begin(), merge_proof.end());
24 proof.insert(proof.end(), eccvm_proof.begin(), eccvm_proof.end());
25 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
26 proof.insert(proof.end(), joint_proof.begin(), joint_proof.end());
27 return proof;
28};
29
35template <bool IsRecursive>
37{
38 // Fixed-size components
39 constexpr size_t merge_size = MERGE_PROOF_SIZE;
40 constexpr size_t eccvm_size = ECCVMFlavor::PROOF_LENGTH;
41 constexpr size_t ipa_size = IPA_PROOF_LENGTH;
42 constexpr size_t joint_size = JOINT_PROOF_LENGTH;
43
44 // MegaZK Oink proof size = total - all other fixed-size components.
45 // This correctly accounts for any ACIR public inputs prepended to the oink portion.
46 constexpr size_t fixed_total = merge_size + eccvm_size + ipa_size + joint_size;
47 if (fields.size() < fixed_total) {
48 throw_or_abort("ChonkProof::from_field_elements: proof too short");
49 }
50 const size_t mega_zk_oink_length = fields.size() - fixed_total;
51
52 auto it = fields.begin();
53
54 HonkProof hiding_oink_proof(it, it + static_cast<std::ptrdiff_t>(mega_zk_oink_length));
55 it += static_cast<std::ptrdiff_t>(mega_zk_oink_length);
56
57 HonkProof merge_proof_out(it, it + static_cast<std::ptrdiff_t>(merge_size));
58 it += static_cast<std::ptrdiff_t>(merge_size);
59
60 HonkProof eccvm_proof_out(it, it + static_cast<std::ptrdiff_t>(eccvm_size));
61 it += static_cast<std::ptrdiff_t>(eccvm_size);
62
63 HonkProof ipa_proof_out(it, it + static_cast<std::ptrdiff_t>(ipa_size));
64 it += static_cast<std::ptrdiff_t>(ipa_size);
65
66 // Remainder is the joint_proof
67 HonkProof joint_proof_out(it, fields.end());
68
69 return ChonkProof_{ std::move(hiding_oink_proof),
70 std::move(merge_proof_out),
71 std::move(eccvm_proof_out),
72 std::move(ipa_proof_out),
73 std::move(joint_proof_out) };
74}
75
76// Explicit template instantiations
77template std::vector<bb::fr> ChonkProof_<false>::to_field_elements() const;
79
80template ChonkProof_<false> ChonkProof_<false>::from_field_elements(const std::vector<bb::fr>& fields);
82 const std::vector<stdlib::field_t<UltraCircuitBuilder>>& fields);
83
84} // namespace bb
static constexpr size_t PROOF_LENGTH
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.
static ChonkProof_ from_field_elements(const std::vector< FF > &fields)
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)
void throw_or_abort(std::string const &err)