2#include "barretenberg/common/serialize.hpp"
3#include "barretenberg/common/throw_or_abort.hpp"
4#include "barretenberg/crypto/sha256/sha256.hpp"
5#include "barretenberg/polynomials/serialize.hpp"
6#include "proving_key.hpp"
14template <
typename B>
inline void read(B& any, proving_key_data& key)
16 using serialize::read;
19 read(any,
static_cast<uint32_t&
>(key.circuit_type));
20 read(any,
static_cast<uint32_t&
>(key.circuit_size));
21 read(any,
static_cast<uint32_t&
>(key.num_public_inputs));
24 read(any, (uint32_t&)amount);
26 for (
size_t next = 0; next < amount; ++next) {
33 key.polynomial_store.put(label, std::move(value));
36 read(any, key.contains_recursive_proof);
37 read(any, key.recursive_proof_public_input_indices);
38 read(any, key.memory_read_records);
39 read(any, key.memory_write_records);
43template <
typename B>
inline void write(B& buf, proving_key
const& key)
45 using serialize::write;
46 write(buf,
static_cast<uint32_t
>(key.circuit_type));
47 write(buf,
static_cast<uint32_t
>(key.circuit_size));
48 write(buf,
static_cast<uint32_t
>(key.num_public_inputs));
51 PrecomputedPolyList precomputed_poly_list(key.circuit_type);
52 size_t num_polys = precomputed_poly_list.size();
53 write(buf,
static_cast<uint32_t
>(num_polys));
55 for (
size_t i = 0; i < num_polys; ++i) {
56 std::string poly_id = precomputed_poly_list[i];
62 write(buf, key.contains_recursive_proof);
63 write(buf, key.recursive_proof_public_input_indices);
64 write(buf, key.memory_read_records);
65 write(buf, key.memory_write_records);
68template <
typename B>
inline void read_from_file(B& is, std::string
const& path, proving_key_data& key)
70 using serialize::read;
73 read(is, key.circuit_type);
74 read(is, key.circuit_size);
75 read(is, key.num_public_inputs);
79 for (
size_t i = 0; i < size; ++i) {
82 std::string filepath = format(path,
"/", file_num++,
"_", name);
85 if (stat(filepath.c_str(), &st) != 0) {
86 throw_or_abort(
"Filename not found: " + filepath);
88 size_t file_size = (size_t)st.st_size;
89 size_t num_fields = file_size / 32;
93 std::ifstream file(filepath, std::ios::binary);
95 file.read(
reinterpret_cast<char*
>(value.data().get()), (std::streamsize)file_size);
98 throw_or_abort(
"Failed to open file: " + filepath);
101 key.polynomial_store.put(name, std::move(value));
103 read(is, key.contains_recursive_proof);
104 read(is, key.recursive_proof_public_input_indices);
105 read(is, key.memory_read_records);
106 read(is, key.memory_write_records);
109template <
typename B>
inline void write_to_file(B& os, std::string
const& path, proving_key& key)
111 using serialize::write;
114 write(os,
static_cast<uint32_t
>(key.circuit_type));
115 write(os,
static_cast<uint32_t
>(key.circuit_size));
116 write(os,
static_cast<uint32_t
>(key.num_public_inputs));
119 PrecomputedPolyList precomputed_poly_list(key.circuit_type);
120 size_t num_polys = precomputed_poly_list.size();
121 write(os,
static_cast<uint32_t
>(num_polys));
123 for (
size_t i = 0; i < num_polys; ++i) {
124 std::string poly_id = precomputed_poly_list[i];
125 auto filename = format(path,
"/", file_num++,
"_", poly_id);
127 auto value = key.polynomial_store.get(poly_id);
128 auto size = value.size();
129 std::ofstream ofs(filename);
130 ofs.write((
char*)value.data().get(), (std::streamsize)(size *
sizeof(
barretenberg::fr)));
132 throw_or_abort(format(
"Failed to write: ", filename));
135 write(os, key.contains_recursive_proof);
136 write(os, key.recursive_proof_public_input_indices);
137 write(os, key.memory_read_records);
138 write(os, key.memory_write_records);
Definition: widget.bench.cpp:13