Skip to content
This repository was archived by the owner on Feb 17, 2025. It is now read-only.

Commit c2c7bc8

Browse files
authored
Removed ArithmetizationParams from template arguments. (#333)
1 parent c1ab9d3 commit c2c7bc8

File tree

221 files changed

+3957
-4528
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

221 files changed

+3957
-4528
lines changed

example/plonk/addition_component.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_addition_example) {
5757
constexpr std::size_t SelectorColumns = 1;
5858
using ArithmetizationParams =
5959
zk::snark::plonk_arithmetization_params<WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns>;
60-
using ArithmetizationType = zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>;
60+
using ArithmetizationType = zk::snark::plonk_constraint_system<BlueprintFieldType>;
6161
using hash_type = nil::crypto3::hashes::keccak_1600<256>;
6262
constexpr std::size_t Lambda = 40;
6363

@@ -76,7 +76,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_addition_example) {
7676

7777
std::vector<typename BlueprintFieldType::value_type> public_input = {x, y, sum};
7878

79-
test_component<component_type, BlueprintFieldType, ArithmetizationParams, hash_type, Lambda>(params, public_input);
79+
test_component<component_type, BlueprintFieldType, hash_type, Lambda>(params, public_input);
8080
}
8181

8282
BOOST_AUTO_TEST_SUITE_END()

example/plonk/addition_component.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ namespace nil {
5959
/// Constraints:
6060
/// x + y = sum <=> W0 + W1 = W2
6161
template<typename BlueprintFieldType,
62-
typename ArithmetizationParams,
6362
std::size_t W0,
6463
std::size_t W1,
6564
std::size_t W2>
@@ -151,7 +150,7 @@ namespace nil {
151150
private:
152151
static void generate_gates(
153152
blueprint<ArithmetizationType> &bp,
154-
blueprint_assignment_table<ArithmetizationType> &assignment,
153+
blueprint_assignment_table<ArithmetizationType> &assignment,
155154
const params_type &params,
156155
allocated_data_type &allocated_data,
157156
const std::size_t start_row_index) {
@@ -163,7 +162,7 @@ namespace nil {
163162
allocated_data.add_selector = selector_index;
164163
} else {
165164
selector_index = allocated_data.add_selector;
166-
assignment.enable_selector(selector_index, start_row_index);
165+
assignment.enable_selector(selector_index, start_row_index);
167166
}
168167

169168
// var(i, 0) defines cell at the column i with rotation 0 (we'll elaborate rotation in the next examples)
@@ -172,7 +171,7 @@ namespace nil {
172171

173172
if (!allocated_data.previously_allocated) {
174173
// gate composes multiple constraints together
175-
bp.add_gate(selector_index,
174+
bp.add_gate(selector_index,
176175
{ constraint_1
177176
});
178177
allocated_data.previously_allocated = true;

example/plonk/component_template.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace nil {
5050
class component_template;
5151

5252
template<typename BlueprintFieldType,
53-
typename ArithmetizationParams,
53+
5454
typename CurveType,
5555
std::size_t W0,
5656
std::size_t W1,
@@ -129,13 +129,13 @@ namespace nil {
129129
private:
130130
static void generate_gates(
131131
blueprint<ArithmetizationType> &bp,
132-
blueprint_assignment_table<ArithmetizationType> &assignment,
132+
blueprint_assignment_table<ArithmetizationType> &assignment,
133133
const params_type &params,
134134
allocated_data_type &allocated_data,
135135
const std::size_t start_row_index) {
136136

137137
if (!allocated_data.previously_allocated) {
138-
} else {
138+
} else {
139139
}
140140

141141
}

include/nil/blueprint/blueprint/plonk/assignment.hpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,19 @@
4242
namespace nil {
4343
namespace blueprint {
4444

45-
template<typename ArithmetizationType, std::size_t... BlueprintParams>
45+
template<typename ArithmetizationType>
4646
class assignment;
4747

48-
template<typename ArithmetizationType, std::size_t... BlueprintParams>
48+
template<typename ArithmetizationType>
4949
class circuit;
5050

51-
template<typename BlueprintFieldType,
52-
typename ArithmetizationParams>
53-
class assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
54-
ArithmetizationParams>>
55-
: public crypto3::zk::snark::plonk_assignment_table<BlueprintFieldType,
56-
ArithmetizationParams> {
51+
template<typename BlueprintFieldType>
52+
class assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
53+
: public crypto3::zk::snark::plonk_assignment_table<BlueprintFieldType> {
5754

58-
using zk_type = crypto3::zk::snark::plonk_assignment_table<BlueprintFieldType,
59-
ArithmetizationParams>;
55+
using zk_type = crypto3::zk::snark::plonk_assignment_table<BlueprintFieldType>;
6056

61-
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
62-
ArithmetizationParams> ArithmetizationType;
57+
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType> ArithmetizationType;
6358

6459
using var = crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>;
6560
using value_type = typename BlueprintFieldType::value_type;
@@ -75,9 +70,14 @@ namespace nil {
7570
public:
7671
static constexpr const std::size_t private_storage_index = std::numeric_limits<std::size_t>::max();
7772

78-
assignment() :
79-
crypto3::zk::snark::plonk_assignment_table<BlueprintFieldType,
80-
ArithmetizationParams>() {
73+
assignment(std::size_t witness_amount, std::size_t public_input_amount,
74+
std::size_t constant_amount, std::size_t selector_amount)
75+
: zk_type(witness_amount, public_input_amount, constant_amount, selector_amount) {
76+
}
77+
78+
assignment(const crypto3::zk::snark::plonk_table_description<BlueprintFieldType> &desc)
79+
: zk_type(desc.witness_columns, desc.public_input_columns,
80+
desc.constant_columns, desc.selector_columns) {
8181
}
8282

8383
virtual value_type &selector(std::size_t selector_index, std::uint32_t row_index) {
@@ -172,7 +172,7 @@ namespace nil {
172172
}
173173

174174
virtual value_type &witness(std::uint32_t witness_index, std::uint32_t row_index) {
175-
BLUEPRINT_ASSERT(witness_index < ArithmetizationParams::WitnessColumns);
175+
BLUEPRINT_ASSERT(witness_index < this->_private_table._witnesses.size());
176176

177177
if (this->_private_table._witnesses[witness_index].size() <= row_index)
178178
this->_private_table._witnesses[witness_index].resize(row_index + 1);
@@ -182,7 +182,7 @@ namespace nil {
182182
}
183183

184184
virtual value_type witness(std::uint32_t witness_index, std::uint32_t row_index) const {
185-
BLUEPRINT_ASSERT(witness_index < ArithmetizationParams::WitnessColumns);
185+
BLUEPRINT_ASSERT(witness_index < this->_private_table._witnesses.size());
186186
BLUEPRINT_ASSERT(row_index < this->_private_table._witnesses[witness_index].size());
187187

188188
return this->_private_table._witnesses[witness_index][row_index];
@@ -235,7 +235,7 @@ namespace nil {
235235
virtual value_type &constant(
236236
std::uint32_t constant_index, std::uint32_t row_index) {
237237

238-
assert(constant_index < zk_type::constants_amount());
238+
BLUEPRINT_ASSERT(constant_index < zk_type::constants_amount());
239239

240240
if (zk_type::constant_column_size(constant_index) <= row_index)
241241
this->_public_table._constants[constant_index].resize(row_index + 1);
@@ -374,17 +374,15 @@ namespace nil {
374374
}
375375
};
376376

377-
template<typename BlueprintFieldType,
378-
typename ArithmetizationParams>
377+
template<typename BlueprintFieldType>
379378
typename BlueprintFieldType::value_type var_value(
380-
const assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
381-
ArithmetizationParams>> &input_assignment,
379+
const assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &input_assignment,
382380
const crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type> &input_var) {
383381
using var_column_type =
384382
typename crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>::column_type;
385-
using assignment_type =
386-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>;
383+
using assignment_type = assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>;
387384
// This SHOULD be handled by a separate variable type
385+
// (Or even better: properly extracted from the component)
388386
// But adding a new variable type breaks assigner
389387
// So we add a type without actually adding a type
390388
if (input_var.index == assignment_type::private_storage_index) {

include/nil/blueprint/blueprint/plonk/assignment_proxy.hpp

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@
3030

3131
namespace nil {
3232
namespace blueprint {
33-
template<typename ArithmetizationType, std::size_t... BlueprintParams>
33+
34+
template<typename ArithmetizationType>
3435
class assignment_proxy;
3536

36-
template<typename BlueprintFieldType,
37-
typename ArithmetizationParams>
38-
class assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
39-
ArithmetizationParams>>
40-
: public assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
41-
ArithmetizationParams>> {
37+
template<typename ArithmetizationType>
38+
class circuit;
39+
40+
template<typename BlueprintFieldType>
41+
class assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
42+
: public assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> {
4243

43-
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
44-
ArithmetizationParams> ArithmetizationType;
44+
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType> ArithmetizationType;
4545

4646
using value_type = typename BlueprintFieldType::value_type;
4747
using column_type = typename crypto3::zk::snark::plonk_column<BlueprintFieldType>;
@@ -53,9 +53,14 @@ namespace nil {
5353
std::set<std::uint32_t> used_rows;
5454
std::set<std::uint32_t> used_selector_rows;
5555
public:
56-
assignment_proxy(std::shared_ptr<assignment<ArithmetizationType>> assignment,
56+
assignment_proxy(std::shared_ptr<assignment<ArithmetizationType>> assignment_,
5757
std::uint32_t _id) :
58-
assignment_ptr(assignment),
58+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>(
59+
assignment_->witnesses_amount(),
60+
assignment_->public_inputs_amount(),
61+
assignment_->constants_amount(),
62+
assignment_->selectors_amount()),
63+
assignment_ptr(assignment_),
5964
id(_id),
6065
check(false) {
6166
assert(assignment_ptr);
@@ -265,6 +270,22 @@ namespace nil {
265270
return assignment_ptr->get_lookup_constant_amount();
266271
}
267272

273+
void resize_witnesses(std::uint32_t new_size) override {
274+
assignment_ptr->resize_witnesses(new_size);
275+
}
276+
277+
void resize_public_inputs(std::uint32_t new_size) override {
278+
assignment_ptr->resize_public_inputs(new_size);
279+
}
280+
281+
void resize_constants(std::uint32_t new_size) override {
282+
assignment_ptr->resize_constants(new_size);
283+
}
284+
285+
void resize_selectors(std::uint32_t new_size) override {
286+
assignment_ptr->resize_selectors(new_size);
287+
}
288+
268289
value_type private_storage(std::uint32_t storage_index) const override {
269290
return assignment_ptr->private_storage(storage_index);
270291
}
@@ -398,11 +419,9 @@ namespace nil {
398419
}
399420
};
400421

401-
template<typename BlueprintFieldType,
402-
typename ArithmetizationParams>
422+
template<typename BlueprintFieldType>
403423
crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type> save_shared_var(
404-
assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
405-
ArithmetizationParams>> &input_assignment,
424+
assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &input_assignment,
406425
const crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type> &input_var) {
407426
using var = crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>;
408427
std::uint32_t row_index = input_assignment.shared_column_size(0);
@@ -411,11 +430,9 @@ namespace nil {
411430
return res;
412431
}
413432

414-
template<typename BlueprintFieldType,
415-
typename ArithmetizationParams>
433+
template<typename BlueprintFieldType>
416434
std::vector<crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>> save_shared_var(
417-
assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
418-
ArithmetizationParams>> &input_assignment,
435+
assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &input_assignment,
419436
const std::vector<crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>> &input_vars) {
420437
std::vector<crypto3::zk::snark::plonk_variable<typename BlueprintFieldType::value_type>> res;
421438
for (const auto &it : input_vars) {
@@ -424,12 +441,11 @@ namespace nil {
424441
return res;
425442
}
426443

427-
template<typename BlueprintFieldType,
428-
typename ArithmetizationParams>
429-
bool is_satisfied(const circuit_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
430-
ArithmetizationParams>> &bp,
431-
const assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
432-
ArithmetizationParams>> &assignments){
444+
template<typename BlueprintFieldType>
445+
bool is_satisfied(const circuit_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
446+
&bp,
447+
const assignment_proxy<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
448+
&assignments) {
433449

434450
const auto& used_gates = bp.get_used_gates();
435451

include/nil/blueprint/blueprint/plonk/circuit.hpp

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,38 +36,35 @@
3636
#include <nil/crypto3/zk/snark/arithmetization/plonk/copy_constraint.hpp>
3737
#include <nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp>
3838
#include <nil/crypto3/zk/snark/arithmetization/plonk/variable.hpp>
39-
#include <nil/blueprint/blueprint/plonk/assignment.hpp>
4039

40+
#include <nil/blueprint/blueprint/plonk/assignment.hpp>
41+
#include <nil/blueprint/gate_id.hpp>
4142
#include <nil/blueprint/lookup_library.hpp>
4243

4344
namespace nil {
4445
namespace blueprint {
4546

46-
template<typename ArithmetizationType, std::size_t... BlueprintParams>
47+
template<typename ArithmetizationType>
4748
class circuit;
4849

49-
template<typename ArithmetizationType, std::size_t... BlueprintParams>
50+
template<typename ArithmetizationType>
5051
class assignment;
5152

52-
template<typename BlueprintFieldType,
53-
typename ArithmetizationParams>
54-
class circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
55-
ArithmetizationParams>>
56-
: public crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
57-
ArithmetizationParams> {
53+
template<typename BlueprintFieldType>
54+
class circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
55+
: public crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType> {
5856

59-
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
60-
ArithmetizationParams> ArithmetizationType;
57+
typedef crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType> ArithmetizationType;
6158

6259
private:
63-
using gate_id_type = gate_id<BlueprintFieldType, ArithmetizationParams>;
60+
using gate_id_type = gate_id<BlueprintFieldType>;
6461
using constraint_type = crypto3::zk::snark::plonk_constraint<BlueprintFieldType>;
6562
using gate_selector_map = std::map<gate_id_type, std::size_t>;
6663
using gate_type = crypto3::zk::snark::plonk_gate<BlueprintFieldType, constraint_type>;
6764

6865
using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint<BlueprintFieldType>;
6966
using lookup_gate_type = crypto3::zk::snark::plonk_lookup_gate<BlueprintFieldType, lookup_constraint_type>;
70-
using lookup_gate_id_type = lookup_gate_id<BlueprintFieldType, ArithmetizationParams>;
67+
using lookup_gate_id_type = lookup_gate_id<BlueprintFieldType>;
7168
using lookup_gate_selector_map = std::map<lookup_gate_id_type, std::size_t>;
7269

7370
using lookup_table_definition = typename nil::crypto3::zk::snark::lookup_table_definition<BlueprintFieldType>;
@@ -80,8 +77,7 @@ namespace nil {
8077
public:
8178
typedef BlueprintFieldType blueprint_field_type;
8279

83-
circuit(crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType,
84-
ArithmetizationParams> constraint_system) :
80+
circuit(ArithmetizationType constraint_system) :
8581
ArithmetizationType(constraint_system) { }
8682

8783
circuit() : ArithmetizationType() {}
@@ -191,8 +187,7 @@ namespace nil {
191187

192188
virtual void add_copy_constraint(const crypto3::zk::snark::plonk_copy_constraint<BlueprintFieldType> &copy_constraint) {
193189
static const std::size_t private_storage_index =
194-
assignment<crypto3::zk::snark::plonk_constraint_system<
195-
BlueprintFieldType, ArithmetizationParams>>::private_storage_index;
190+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>::private_storage_index;
196191
if (copy_constraint.first == copy_constraint.second) {
197192
return;
198193
}

0 commit comments

Comments
 (0)