22template <
typename Circuit>
void generate_keys_honk(
const std::string& output_path, std::string circuit_name)
24 uint256_t public_inputs[6] = { 0, 0, 0, 0, 0, 0 };
36 circuit_name.at(0) =
static_cast<char>(
std::toupper(
static_cast<unsigned char>(circuit_name.at(0))));
37 std::string flavor_prefix =
"Honk";
39 std::string vk_class_name = circuit_name + flavor_prefix +
"VerificationKey";
40 std::string base_class_name =
"Base" + flavor_prefix +
"Verifier";
41 std::string instance_class_name = circuit_name + flavor_prefix +
"Verifier";
44 auto vk_filename = output_path +
"/keys/" + vk_class_name +
".sol";
45 std::ofstream os(vk_filename);
47 info(
"VK contract written to: ", vk_filename);
57int main(
int argc,
char** argv)
59 std::vector<std::string> args(argv, argv + argc);
61 if (args.size() < 4) {
62 info(
"usage: ", args[0],
" [circuit type] [output path] [srs path]");
66 const std::string circuit_flavor = args[1];
67 const std::string output_path = args[2];
68 const std::string srs_path = args[3];
72 info(
"Generating keys for ", circuit_flavor,
" circuit");
74 if (circuit_flavor ==
"add2") {
75 generate_keys_honk<Add2Circuit>(output_path, circuit_flavor);
76 }
else if (circuit_flavor ==
"blake") {
77 generate_keys_honk<BlakeCircuit>(output_path, circuit_flavor);
78 }
else if (circuit_flavor ==
"ecdsa") {
79 generate_keys_honk<bb::EcdsaCircuit>(output_path, circuit_flavor);
80 }
else if (circuit_flavor ==
"recursive") {
81 generate_keys_honk<bb::RecursiveCircuit>(output_path, circuit_flavor);
83 info(
"Unsupported circuit");