barretenberg
Loading...
Searching...
No Matches
plonk_flavors.hpp
1#pragma once
3#include "barretenberg/plonk/proof_system/proving_key/proving_key.hpp"
4#include "barretenberg/plonk/transcript/transcript.hpp"
5#include "barretenberg/proof_system/circuit_builder/standard_circuit_builder.hpp"
6#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp"
7
8namespace proof_system::plonk::flavor {
9class Standard {
10 public:
13 using Curve = curve::BN254;
14 using FF = Curve::ScalarField;
16 static constexpr size_t NUM_WIRES = CircuitBuilder::NUM_WIRES;
17 // Whether or not the first row of the execution trace is reserved for 0s to enable shifts
18 static constexpr bool has_zero_row = false;
19};
20
21class Ultra {
22 public:
25 using Curve = curve::BN254;
26 using FF = Curve::ScalarField;
28 static constexpr size_t NUM_WIRES = CircuitBuilder::NUM_WIRES;
29 // Whether or not the first row of the execution trace is reserved for 0s to enable shifts
30 static constexpr bool has_zero_row = false;
31
39 static transcript::Manifest create_manifest(const size_t num_public_inputs)
40 {
41 // add public inputs....
42 constexpr size_t g1_size = 64;
43 constexpr size_t fr_size = 32;
44 const size_t public_input_size = fr_size * num_public_inputs;
46
48 { // { name, num_bytes, derived_by_verifier }
49 { "circuit_size", 4, true },
50 { "public_input_size", 4, true } },
51 "init", // challenge_name
52 1 // num_challenges_in
53 ),
54
56 { // { name, num_bytes, derived_by_verifier }
57 { "public_inputs", public_input_size, false },
58 { "W_1", g1_size, false },
59 { "W_2", g1_size, false },
60 { "W_3", g1_size, false } },
61 "eta", // challenge_name
62 1 // num_challenges_in
63 ),
64
66 { // { name, num_bytes, derived_by_verifier }
67 { "W_4", g1_size, false },
68 { "S", g1_size, false } },
69 "beta", // challenge_name
70 2 // num_challenges_in
71 ),
72
74 { // { name, num_bytes, derived_by_verifier }
75 { "Z_PERM", g1_size, false },
76 { "Z_LOOKUP", g1_size, false } },
77 "alpha", // challenge_name
78 1 // num_challenges_in
79 ),
80
82 { // { name, num_bytes, derived_by_verifier }
83 { "T_1", g1_size, false },
84 { "T_2", g1_size, false },
85 { "T_3", g1_size, false },
86 { "T_4", g1_size, false } },
87 "z", // challenge_name
88 1 // num_challenges_in
89 ),
90
91 // N.B. THE SHFITED EVALS (_omega) MUST HAVE THE SAME CHALLENGE INDEX AS THE NON SHIFTED VALUES
93 {
94 // { name, num_bytes, derived_by_verifier, challenge_map_index }
95 { "t", fr_size, true, -1 }, // *
96 { "w_1", fr_size, false, 0 },
97 { "w_2", fr_size, false, 1 },
98 { "w_3", fr_size, false, 2 },
99 { "w_4", fr_size, false, 3 },
100 { "s", fr_size, false, 4 },
101 { "z_perm", fr_size, false, 5 }, // *
102 { "z_lookup", fr_size, false, 6 },
103 { "q_1", fr_size, false, 7 },
104 { "q_2", fr_size, false, 8 },
105 { "q_3", fr_size, false, 9 },
106 { "q_4", fr_size, false, 10 },
107 { "q_m", fr_size, false, 11 },
108 { "q_c", fr_size, false, 12 },
109 { "q_arith", fr_size, false, 13 },
110 { "q_sort", fr_size, false, 14 }, // *
111 { "q_elliptic", fr_size, false, 15 }, // *
112 { "q_aux", fr_size, false, 16 },
113 { "sigma_1", fr_size, false, 17 },
114 { "sigma_2", fr_size, false, 18 },
115 { "sigma_3", fr_size, false, 19 },
116 { "sigma_4", fr_size, false, 20 },
117 { "table_value_1", fr_size, false, 21 },
118 { "table_value_2", fr_size, false, 22 },
119 { "table_value_3", fr_size, false, 23 },
120 { "table_value_4", fr_size, false, 24 },
121 { "table_type", fr_size, false, 25 },
122 { "id_1", fr_size, false, 26 },
123 { "id_2", fr_size, false, 27 },
124 { "id_3", fr_size, false, 28 },
125 { "id_4", fr_size, false, 29 },
126 { "w_1_omega", fr_size, false, 0 },
127 { "w_2_omega", fr_size, false, 1 },
128 { "w_3_omega", fr_size, false, 2 },
129 { "w_4_omega", fr_size, false, 3 },
130 { "s_omega", fr_size, false, 4 },
131 { "z_perm_omega", fr_size, false, 5 },
132 { "z_lookup_omega", fr_size, false, 6 },
133 { "table_value_1_omega", fr_size, false, 21 },
134 { "table_value_2_omega", fr_size, false, 22 },
135 { "table_value_3_omega", fr_size, false, 23 },
136 { "table_value_4_omega", fr_size, false, 24 },
137 },
138 "nu", // challenge_name
139 ULTRA_MANIFEST_SIZE, // num_challenges_in
140 true // map_challenges_in
141 ),
142
144 { // { name, num_bytes, derived_by_verifier, challenge_map_index }
145 { "PI_Z", g1_size, false },
146 { "PI_Z_OMEGA", g1_size, false } },
147 "separator", // challenge_name
148 3 // num_challenges_in
149 ) });
150
151 return output;
152 }
153};
154} // namespace proof_system::plonk::flavor
Definition: polynomial.hpp:12
Definition: bn254.hpp:10
Definition: standard_circuit_builder.hpp:12
Definition: ultra_circuit_builder.hpp:31
Definition: plonk_flavors.hpp:9
Definition: plonk_flavors.hpp:21
static transcript::Manifest create_manifest(const size_t num_public_inputs)
Create a manifest object.
Definition: plonk_flavors.hpp:39
Definition: manifest.hpp:11
Base class templates for structures that contain data parameterized by the fundamental polynomials of...
Definition: proving_key.hpp:38
Definition: manifest.hpp:28