Skip to content

Commit 0af37d7

Browse files
akokoshnakokoshn
authored andcommitted
Set public input sizes
1 parent df994b4 commit 0af37d7

File tree

7 files changed

+49
-50
lines changed

7 files changed

+49
-50
lines changed

.github/workflows/build_linux.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -306,10 +306,10 @@ jobs:
306306
always() && !cancelled() &&
307307
(needs.handle-syncwith.result == 'success' || needs.handle-syncwith.result == 'skipped') &&
308308
needs.build-and-test-linux.result == 'success'
309-
uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@5bb7c4b0790f56b3a339e33ba442816fac17ab88
309+
uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d
310310
with:
311311
artifact-name: ${{ needs.build-and-test-linux.outputs.transpiler-artifact-name }}
312-
evm-placeholder-verification-ref: 202fbd0402eda22ae91348800dea7366110b1501
312+
evm-placeholder-verification-ref: 2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d
313313
refs: ${{ needs.handle-syncwith.outputs.prs-refs }}
314314
test-names: ${{ needs.build-and-test-linux.outputs.evm-targets }}
315315

@@ -323,11 +323,11 @@ jobs:
323323
always() && !cancelled() &&
324324
(needs.handle-syncwith.result == 'success' || needs.handle-syncwith.result == 'skipped') &&
325325
needs.build-and-test-linux.result == 'success'
326-
uses: NilFoundation/proof-producer/.github/workflows/reusable-generate-proofs-linux.yml@b1e380040b4714b6ad5fe9223555d854c49cf065
326+
uses: NilFoundation/proof-producer/.github/workflows/reusable-generate-proofs-linux.yml@4ddd85878d66f9b916e9fbdafe51180058e5bdaa
327327
with:
328328
artifact-name: ${{ needs.build-and-test-linux.outputs.examples-artifact-name }}
329329
# Update next line if you need new version of proof producer
330-
proof-producer-ref: d6d8d18cd7a6e15dd9497140350efadb6af5179b
330+
proof-producer-ref: 4ddd85878d66f9b916e9fbdafe51180058e5bdaa
331331
refs: ${{ needs.handle-syncwith.outputs.prs-refs }}
332332
targets: ${{ needs.build-and-test-linux.outputs.prover-targets }}
333333

@@ -401,10 +401,10 @@ jobs:
401401
(needs.handle-syncwith.result == 'success' || needs.handle-syncwith.result == 'skipped') &&
402402
needs.build-and-test-linux.result == 'success' &&
403403
needs.merge-proofs-to-transpiler-output.result == 'success'
404-
uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@5bb7c4b0790f56b3a339e33ba442816fac17ab88
404+
uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d
405405
with:
406406
artifact-name: ${{ needs.merge-proofs-to-transpiler-output.outputs.merged-artifact-name }}
407-
evm-placeholder-verification-ref: 202fbd0402eda22ae91348800dea7366110b1501
407+
evm-placeholder-verification-ref: 2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d
408408
refs: ${{ needs.handle-syncwith.outputs.prs-refs }}
409409
test-names: ${{ needs.build-and-test-linux.outputs.evm-targets }}
410410

bin/assigner/src/main.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ using namespace nil::blueprint;
6969
template<typename Endianness, typename ArithmetizationType, typename ConstraintSystemType>
7070
void print_circuit(const circuit_proxy<ArithmetizationType> &circuit_proxy,
7171
const assignment_proxy<ArithmetizationType> &table_proxy,
72-
bool rename_required, std::ostream &out = std::cout) {
72+
bool multi_prover, std::uint32_t idx, std::ostream &out = std::cout) {
7373
using TTypeBase = nil::marshalling::field_type<Endianness>;
7474
using value_marshalling_type =
7575
nil::crypto3::marshalling::types::plonk_constraint_system<TTypeBase, ConstraintSystemType>;
@@ -90,7 +90,7 @@ void print_circuit(const circuit_proxy<ArithmetizationType> &circuit_proxy,
9090
used_copy_constraints.push_back(copy_constraints[it]);
9191
}
9292

93-
if (rename_required) {
93+
if (multi_prover && idx > 0) {
9494
const auto& used_rows = table_proxy.get_used_rows();
9595
std::uint32_t local_row = 0;
9696
for (const auto &row : used_rows) {
@@ -128,13 +128,26 @@ void print_circuit(const circuit_proxy<ArithmetizationType> &circuit_proxy,
128128
used_lookup_tables.push_back(lookup_tables[it]);
129129
}
130130

131+
132+
// fill public input sizes
133+
nil::crypto3::marshalling::types::public_input_sizes_type<TTypeBase> public_input_sizes;
134+
using public_input_size_type = typename nil::crypto3::marshalling::types::public_input_sizes_type<TTypeBase>::element_type;
135+
const auto public_input_size = table_proxy.public_inputs_amount();
136+
for (std::uint32_t i = 0; i < public_input_size; i++) {
137+
public_input_sizes.value().push_back(public_input_size_type(table_proxy.public_input_column_size(i)));
138+
}
139+
if (multi_prover) {
140+
public_input_sizes.value().push_back(public_input_size_type(table_proxy.shared_column_size(0)));
141+
}
142+
131143
auto filled_val =
132144
value_marshalling_type(std::make_tuple(
133145
nil::crypto3::marshalling::types::fill_plonk_gates<Endianness, typename ConstraintSystemType::gates_container_type::value_type>(used_gates),
134146
nil::crypto3::marshalling::types::fill_plonk_copy_constraints<Endianness, typename ConstraintSystemType::variable_type>(used_copy_constraints),
135147
nil::crypto3::marshalling::types::fill_plonk_lookup_gates<Endianness, typename ConstraintSystemType::lookup_gates_container_type::value_type>(used_lookup_gates),
136-
nil::crypto3::marshalling::types::fill_plonk_lookup_tables<Endianness, typename ConstraintSystemType::lookup_tables_type::value_type>(used_lookup_tables)
137-
));
148+
nil::crypto3::marshalling::types::fill_plonk_lookup_tables<Endianness, typename ConstraintSystemType::lookup_tables_type::value_type>(used_lookup_tables),
149+
public_input_sizes
150+
));
138151

139152
std::vector<std::uint8_t> cv;
140153
cv.resize(filled_val.length(), 0x00);
@@ -559,7 +572,7 @@ int curve_dependent_main(std::string bytecode_file_name,
559572
}
560573

561574
print_circuit<nil::marshalling::option::big_endian, ArithmetizationType, ConstraintSystemType>(
562-
assigner_instance.circuits[0], assigner_instance.assignments[0], false, ocircuit);
575+
assigner_instance.circuits[0], assigner_instance.assignments[0], false, 0, ocircuit);
563576
ocircuit.close();
564577
}
565578
} else if (assigner_instance.assignments.size() > 1 &&
@@ -596,7 +609,7 @@ int curve_dependent_main(std::string bytecode_file_name,
596609

597610
ASSERT_MSG(idx < assigner_instance.circuits.size(), "Not found circuit");
598611
print_circuit<nil::marshalling::option::big_endian, ArithmetizationType, ConstraintSystemType>(
599-
assigner_instance.circuits[idx], assigner_instance.assignments[idx], (idx > 0), ocircuit);
612+
assigner_instance.circuits[idx], assigner_instance.assignments[idx], true, idx, ocircuit);
600613

601614
ocircuit.close();
602615
}

bin/recursive_gen/src/main.cpp

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,6 @@ int main(int argc, char *argv[]) {
177177
It'll be better to create an empty folder for output")
178178
("skip-verification", "Used with gen-test-proof, if set - skips verifiyng the generated proof")
179179
("multi-prover", "Pass this flag if input circuit is a part of larger circuit, divided for faster paralel proving")
180-
("public-input-rows,p", boost::program_options::value<int>(), "Used public input column rows")
181-
("shared-rows,s", boost::program_options::value<int>(), "Used shared rows")
182180
("elliptic-curve-type,e", boost::program_options::value<std::string>(), "Native elliptic curve type (pallas, vesta, ed25519, bls12381)");
183181

184182
// clang-format on
@@ -303,38 +301,12 @@ int curve_dependent_main(
303301
return 1;
304302
}
305303

306-
std::uint32_t public_input_rows = 50;
307-
if (vm.count("public-input-rows")) {
308-
public_input_rows = vm["public-input-rows"].as<int>(); }
309-
310-
std::uint32_t shared_rows = 50;
311-
if (vm.count("shared-rows")) {
312-
if( !vm.count("shared-rows") )
313-
std::cout << "shared-rows parameter will be ignored because it is single-prover example" << std::endl;
314-
shared_rows = vm["shared-rows"].as<int>();
315-
}
316-
317304
using parameters_policy = ParametersPolicy<BlueprintFieldType>;
318305
constexpr std::size_t WitnessColumns = parameters_policy::WitnessColumns;
319306
constexpr std::size_t PublicInputColumns = is_multi_prover? parameters_policy::PublicInputColumns + 1: parameters_policy::PublicInputColumns;
320307
constexpr std::size_t ConstantColumns = parameters_policy::ComponentConstantColumns + parameters_policy::LookupConstantColumns;
321308
constexpr std::size_t SelectorColumns = parameters_policy::ComponentSelectorColumns + parameters_policy::LookupSelectorColumns;
322309

323-
std::cout << "WitnessColumns = " << WitnessColumns << std::endl;
324-
std::cout << "PublicInputColumns = " << PublicInputColumns << std::endl;
325-
std::cout << "ConstantColumns = " << ConstantColumns << ": LookupConstantColumns = " << parameters_policy::LookupConstantColumns << std::endl;
326-
std::cout << "SelectorColumns = " << SelectorColumns << ": LookupSelectorColumns = " << parameters_policy::LookupSelectorColumns << std::endl;
327-
328-
std::vector<std::size_t> public_input_sizes(PublicInputColumns);
329-
for(std::size_t i = 0; i < PublicInputColumns; i++){
330-
public_input_sizes[i] = public_input_rows;
331-
}
332-
if( is_multi_prover )
333-
public_input_sizes[PublicInputColumns - 1] = shared_rows;
334-
335-
zk::snark::plonk_table_description<BlueprintFieldType> desc(
336-
WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns);
337-
338310
// Circuit-specific parameter
339311
using ConstraintSystemType =
340312
nil::crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>;
@@ -364,6 +336,7 @@ int curve_dependent_main(
364336
}
365337

366338
ConstraintSystemType constraint_system;
339+
std::vector<std::size_t> public_input_sizes(PublicInputColumns);
367340
{
368341
std::ifstream ifile;
369342
ifile.open(circuit_file_name, std::ios_base::binary | std::ios_base::in);
@@ -389,9 +362,16 @@ int curve_dependent_main(
389362
constraint_system = nil::crypto3::marshalling::types::make_plonk_constraint_system<Endianness, ConstraintSystemType>(
390363
marshalled_data
391364
);
365+
366+
for(std::size_t i = 0; i < constraint_system.public_input_sizes_num(); i++){
367+
public_input_sizes[i] = constraint_system.public_input_size(i);
368+
std::cout << "Public input size " << i << " = " << public_input_sizes[i] << std::endl;
369+
}
392370
}
393371

394372
AssignmentTableType assignment_table;
373+
zk::snark::plonk_table_description<BlueprintFieldType> desc(
374+
WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns);
395375
{
396376
std::ifstream iassignment;
397377
iassignment.open(assignment_table_file_name, std::ios_base::binary | std::ios_base::in);
@@ -419,6 +399,12 @@ int curve_dependent_main(
419399
);
420400
desc.rows_amount = assignment_table.rows_amount();
421401
}
402+
403+
std::cout << "WitnessColumns = " << desc.witness_columns << std::endl;
404+
std::cout << "PublicInputColumns = " << desc.public_input_columns << std::endl;
405+
std::cout << "ConstantColumns = " << desc.constant_columns << ": LookupConstantColumns = " << parameters_policy::LookupConstantColumns << std::endl;
406+
std::cout << "SelectorColumns = " << desc.selector_columns << ": LookupSelectorColumns = " << parameters_policy::LookupSelectorColumns << std::endl;
407+
422408
std::vector<std::set<int>> columns_rotations;
423409

424410
const std::size_t Lambda = parameters_policy::lambda;

libs/assigner

Submodule assigner updated 81 files

libs/blueprint

Submodule blueprint updated 64 files

multi_gen_and_check.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ mkdir -p ./recursive
33
ninja -C build merkle_poseidon_3provers_cpp_example_generate_both -j4
44

55
# Generate proof and verifier for 1st piece
6-
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
7-
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
6+
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas --multi-prover
7+
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas --multi-prover
88

99
# Copy 1st piece files to placeholder_verifier example
1010
cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp
@@ -15,8 +15,8 @@ ninja -C build placeholder_verifier_cpp_example -j4
1515
./build/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check --column-sizes {15,1,2,0,60,0}
1616

1717
# Generate proof and verifier for 2nd piece
18-
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
19-
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
18+
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas --multi-prover
19+
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas --multi-prover
2020

2121
# Copy 2nd piece files to placeholder_verifier example
2222
cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp
@@ -27,13 +27,13 @@ ninja -C build placeholder_verifier_cpp_example -j4
2727
./build/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check --column-sizes {15,1,2,0,60,0}
2828

2929
# Generate proof and verifier for 3rd piece
30-
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
31-
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas -p 1 -s 3 --multi-prover
30+
./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas --multi-prover
31+
./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas --multi-prover
3232

3333
# Copy 3rd piece files to placeholder_verifier example
3434
cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp
3535
cp -rf ./recursive/placeholder_verifier.inp ./examples/inputs/placeholder_verifier.inp
3636

3737
# Assign it
3838
ninja -C build placeholder_verifier_cpp_example -j4
39-
./build/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check --column-sizes {15,1,2,0,60,0}
39+
./build/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check --column-sizes {15,1,2,0,60,0}

0 commit comments

Comments
 (0)