Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
utils.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Completed, auditors: [Federico], commit: d4aff8893338c31425565db5a5a560048c33f27a}
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
8
11#include <vector>
12
13namespace acir_format {
14
15using namespace bb;
16using namespace bb::stdlib;
17
19
22
32template <typename Builder>
33std::vector<field_t<Builder>> fields_from_witnesses(Builder& builder, std::span<const uint32_t> witness_indices);
34
43template <typename Builder>
45
57std::vector<uint32_t> add_public_inputs_to_proof(const std::vector<uint32_t>& proof_in,
58 const std::vector<uint32_t>& public_inputs);
59
61
63
72RecursionConstraint recursion_data_to_recursion_constraint(std::vector<bb::fr>& witness,
73 const std::vector<bb::fr>& proof,
74 const std::vector<bb::fr>& key,
75 const bb::fr& key_hash,
76 const bb::fr& predicate,
77 const size_t num_public_inputs_to_extract,
78 const uint32_t proof_type);
79
89template <typename T>
90std::vector<uint32_t> add_to_witness_and_track_indices(std::vector<bb::fr>& witness, const T& input)
91{
92 std::vector<uint32_t> indices;
93
95 indices.emplace_back(witness.size());
96 witness.emplace_back(input.x);
97 indices.emplace_back(witness.size());
98 witness.emplace_back(input.y);
99 indices.emplace_back(witness.size());
100 witness.emplace_back(input.is_point_at_infinity() ? bb::fr(1) : bb::fr(0));
101 } else if constexpr (requires {
102 input.data();
103 input.size();
104 }) {
105 // T is a span or span-like container of values
106 indices.reserve(input.size());
107 auto witness_idx = static_cast<uint32_t>(witness.size());
108 for (const auto& value : input) {
109 witness.push_back(bb::fr(value));
110 indices.push_back(witness_idx++);
111 }
112 } else {
113 bb::assert_failure("Unsupported type for add_to_witness_and_track_indices");
114 }
115
116 return indices;
117}
118
122inline uint32_t add_to_witness_and_track_indices(std::vector<bb::fr>& witness, const bb::fr& input)
123{
124 uint32_t index = static_cast<uint32_t>(witness.size());
125 witness.emplace_back(input);
126
127 return index;
128}
129
133template <typename T, size_t N>
134std::array<uint32_t, N> add_to_witness_and_track_indices(std::vector<bb::fr>& witness, const T& input)
135{
136 std::vector<uint32_t> tracked_indices = add_to_witness_and_track_indices(witness, input);
137 BB_ASSERT_LTE(tracked_indices.size(), N, "Number of witnesses added is greater than the size of the output array.");
138
140 std::ranges::copy(tracked_indices, indices.begin());
141 return indices;
142}
143
145
147
152template <typename Builder>
153void populate_fields(Builder& builder, const std::vector<field_t<Builder>>& fields, const std::vector<bb::fr>& values);
154
155} // namespace acir_format
#define BB_ASSERT_LTE(left, right,...)
Definition assert.hpp:168
AluTraceBuilder builder
Definition alu.test.cpp:124
void populate_fields(Builder &builder, const std::vector< field_t< Builder > > &fields, const std::vector< bb::fr > &values)
========== WRITE_VK UTILITIES ========== ///
Definition utils.cpp:78
std::vector< field_t< Builder > > fields_from_witnesses(Builder &builder, std::span< const uint32_t > witness_indices)
========== ACIR TO BARRETENBERG ========== ///
Definition utils.cpp:16
RecursionConstraint recursion_data_to_recursion_constraint(std::vector< bb::fr > &witness, const std::vector< bb::fr > &proof, const std::vector< bb::fr > &key, const bb::fr &key_hash, const bb::fr &predicate, const size_t num_public_inputs_to_extract, const uint32_t proof_type)
========== TESTING UTILITIES ========== ///
Definition utils.cpp:53
std::vector< uint32_t > add_to_witness_and_track_indices(std::vector< bb::fr > &witness, const T &input)
Append values to a witness vector and track their indices.
Definition utils.hpp:90
std::vector< uint32_t > add_public_inputs_to_proof(const std::vector< uint32_t > &proof_in, const std::vector< uint32_t > &public_inputs)
Reconstruct a barretenberg style proof from an ACIR style proof + public inputs.
Definition utils.cpp:40
byte_array< Builder > fields_to_bytes(Builder &builder, std::vector< field_t< Builder > > &fields)
Convert a vector of field_t elements to a byte_array enforcing each element to fit in one byte.
Definition utils.cpp:26
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
field< Bn254FrParams > fr
Definition fr.hpp:174
void assert_failure(std::string const &err)
Definition assert.cpp:11
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
stdlib::byte_array< Builder > byte_array