@@ -680,7 +680,12 @@ int curve_dependent_main(std::string bytecode_file_name,
680680 }
681681
682682 using var = crypto3::zk::snark::plonk_variable<typename AssignmentTableType::field_type::value_type>;
683+
683684 std::vector<table_piece<var>> table_pieces = {}; // we create table pieces in any case and pass into assigner by reference
685+ std::vector<std::vector<std::uint32_t >> all_used_rows;
686+ int provers_amount;
687+ std::vector<std::pair<std::uint32_t , var>> to_be_shared;
688+
684689 if (gen_mode.has_fast_tbl ()) { // if we are generating tables in a fast way then need to parse table_pieces from file
685690
686691 std::ifstream inp_json (table_pieces_file_name);
@@ -693,11 +698,31 @@ int curve_dependent_main(std::string bytecode_file_name,
693698 std::string str ((std::istreambuf_iterator<char >(inp_json)),
694699 std::istreambuf_iterator<char >());
695700 auto parsed = boost::json::parse (str);
696- boost::json::array arr = parsed.as_array ();
701+ boost::json::object obj = parsed.as_object ();
697702
703+ boost::json::array arr = obj[" table_pieces" ].as_array ();
698704 for (const auto & item : arr) {
699705 table_pieces.emplace_back (item.as_object ());
700706 }
707+
708+ provers_amount = obj[" provers_amount" ].as_int64 ();
709+
710+ boost::json::array used_rows_json = obj[" used_rows" ].as_array ();
711+ for (const auto & row : used_rows_json) {
712+ std::vector<std::uint32_t > current_used_rows = {};
713+ for (const auto & elem : row.as_array ()) {
714+ current_used_rows.push_back (elem.as_int64 ());
715+ }
716+ all_used_rows.push_back (current_used_rows);
717+ }
718+
719+ boost::json::array to_be_shared_json = obj[" to_be_shared" ].as_array ();
720+ for (const auto & pair_json : to_be_shared_json) {
721+ boost::json::object pair_obj = pair_json.as_object ();
722+ std::uint32_t first = pair_obj[" first" ].as_int64 ();
723+ var second = var (pair_obj[" second" ].as_object ());
724+ to_be_shared.emplace_back (first, second);
725+ }
701726 }
702727
703728 auto assigner_instance_creation_start = std::chrono::high_resolution_clock::now ();
@@ -767,6 +792,8 @@ int curve_dependent_main(std::string bytecode_file_name,
767792 public_input_json_value.as_array (),
768793 private_input_json_value.as_array (),
769794 all_constant_columns,
795+ all_used_rows,
796+ to_be_shared,
770797 table_pieces
771798 )
772799 ) {
@@ -781,14 +808,38 @@ int curve_dependent_main(std::string bytecode_file_name,
781808 return 0 ;
782809 }
783810
784- if (gen_mode.has_circuit ()) { // if we are generation circuit then we are generation table pieces in the same time. Need to write itno file
811+ if (gen_mode.has_circuit ()) {
812+
813+ boost::json::object top_level_json;
814+ top_level_json[" provers_amount" ] = assigner_instance.assignments .size ();
815+
785816 boost::json::array pieces_json;
786- // for (const auto& piece : nil::blueprint::table_pieces) {
787- for (const auto & piece : table_pieces) {
817+ for (const auto & piece : assigner_instance.get_table_pieces ()) {
788818 pieces_json.push_back (piece.to_json ());
789819 }
820+ top_level_json[" table_pieces" ] = pieces_json;
821+
822+ boost::json::array used_rows_json;
823+ for (std::size_t i = 0 ; i < assigner_instance.assignments .size (); i++) {
824+ boost::json::array current_row;
825+ for (const auto & r : assigner_instance.assignments [i].get_used_rows ()) {
826+ current_row.push_back (r);
827+ }
828+ used_rows_json.push_back (current_row);
829+ }
830+ top_level_json[" used_rows" ] = used_rows_json;
831+
832+ boost::json::array to_be_shared_json;
833+
834+ for (const auto & pair : assigner_instance.get_to_be_shared ()) {
835+ boost::json::object pair_json;
836+ pair_json[" first" ] = pair.first ;
837+ pair_json[" second" ] = pair.second .to_json ();
838+ to_be_shared_json.push_back (pair_json);
839+ }
840+ top_level_json[" to_be_shared" ] = to_be_shared_json;
790841
791- std::string serialized = boost::json::serialize (pieces_json );
842+ std::string serialized = boost::json::serialize (top_level_json );
792843
793844 std::ofstream file (table_pieces_file_name);
794845 file << serialized;
0 commit comments