barretenberg
Loading...
Searching...
No Matches
acir_format.hpp
1#pragma once
2#include "barretenberg/common/slab_allocator.hpp"
3#include "barretenberg/dsl/types.hpp"
4#include "barretenberg/serialize/msgpack.hpp"
5#include "blake2s_constraint.hpp"
6#include "block_constraint.hpp"
7#include "ecdsa_secp256k1.hpp"
8#include "ecdsa_secp256r1.hpp"
9#include "fixed_base_scalar_mul.hpp"
10#include "hash_to_field.hpp"
11#include "keccak_constraint.hpp"
12#include "logic_constraint.hpp"
13#include "pedersen.hpp"
14#include "range_constraint.hpp"
15#include "recursion_constraint.hpp"
16#include "schnorr_verify.hpp"
17#include "sha256_constraint.hpp"
18
19namespace acir_format {
20
22 // The number of witnesses in the circuit
23 uint32_t varnum;
24
25 std::vector<uint32_t> public_inputs;
26
27 std::vector<LogicConstraint> logic_constraints;
28 std::vector<RangeConstraint> range_constraints;
29 std::vector<Sha256Constraint> sha256_constraints;
30 std::vector<SchnorrConstraint> schnorr_constraints;
31 std::vector<EcdsaSecp256k1Constraint> ecdsa_k1_constraints;
32 std::vector<EcdsaSecp256r1Constraint> ecdsa_r1_constraints;
33 std::vector<Blake2sConstraint> blake2s_constraints;
34 std::vector<KeccakConstraint> keccak_constraints;
35 std::vector<KeccakVarConstraint> keccak_var_constraints;
36 std::vector<PedersenConstraint> pedersen_constraints;
37 std::vector<PedersenHashConstraint> pedersen_hash_constraints;
38 std::vector<HashToFieldConstraint> hash_to_field_constraints;
39 std::vector<FixedBaseScalarMul> fixed_base_scalar_mul_constraints;
40 std::vector<RecursionConstraint> recursion_constraints;
41
42 // A standard plonk arithmetic constraint, as defined in the poly_triple struct, consists of selector values
43 // for q_M,q_L,q_R,q_O,q_C and indices of three variables taking the role of left, right and output wire
44 // This could be a large vector so use slab allocator, we don't expect the blackbox implementations to be so large.
45 std::vector<poly_triple_<curve::BN254::ScalarField>,
47 constraints;
48 std::vector<BlockConstraint> block_constraints;
49
50 // For serialization, update with any new fields
51 MSGPACK_FIELDS(varnum,
52 public_inputs,
53 logic_constraints,
54 range_constraints,
55 sha256_constraints,
56 schnorr_constraints,
57 ecdsa_k1_constraints,
58 ecdsa_r1_constraints,
59 blake2s_constraints,
60 keccak_constraints,
61 keccak_var_constraints,
62 pedersen_constraints,
63 pedersen_hash_constraints,
64 hash_to_field_constraints,
65 fixed_base_scalar_mul_constraints,
66 recursion_constraints,
67 constraints,
68 block_constraints);
69
70 friend bool operator==(acir_format const& lhs, acir_format const& rhs) = default;
71};
72
73using WitnessVector = std::vector<fr, ContainerSlabAllocator<fr>>;
74
75template <typename Builder> void read_witness(Builder& builder, std::vector<barretenberg::fr> const& witness);
76
77template <typename Builder> void create_circuit(Builder& builder, const acir_format& constraint_system);
78
79template <typename Builder = UltraCircuitBuilder>
80Builder create_circuit(const acir_format& constraint_system, size_t size_hint = 0);
81
82Builder create_circuit_with_witness(const acir_format& constraint_system,
83 WitnessVector const& witness,
84 size_t size_hint = 0);
85
86template <typename Builder>
87void create_circuit_with_witness(Builder& builder, const acir_format& constraint_system, WitnessVector const& witness);
88
89template <typename Builder> void apply_wire_index_offset(Builder& builder);
90
91} // namespace acir_format
Definition: slab_allocator.hpp:47
Definition: ultra_circuit_builder.hpp:31
Definition: acir_format.hpp:21