21template <
typename Circuit>
void generate_keys_honk(
const std::string& output_path, std::string circuit_name)
23 uint256_t public_inputs[6] = { 0, 0, 0, 0, 0, 0 };
35 circuit_name.at(0) =
static_cast<char>(
std::toupper(
static_cast<unsigned char>(circuit_name.at(0))));
36 std::string flavor_prefix =
"Honk";
38 std::string vk_class_name = circuit_name + flavor_prefix +
"VerificationKey";
39 std::string base_class_name =
"Base" + flavor_prefix +
"Verifier";
40 std::string instance_class_name = circuit_name + flavor_prefix +
"Verifier";
43 auto vk_filename = output_path +
"/keys/" + vk_class_name +
".sol";
44 std::ofstream os(vk_filename);
46 info(
"VK contract written to: ", vk_filename);
56int main(
int argc,
char** argv)
58 std::vector<std::string> args(argv, argv + argc);
60 if (args.size() < 4) {
61 info(
"usage: ", args[0],
" [circuit type] [output path] [srs path]");
65 const std::string circuit_flavor = args[1];
66 const std::string output_path = args[2];
67 const std::string srs_path = args[3];
71 info(
"Generating keys for ", circuit_flavor,
" circuit");
73 if (circuit_flavor ==
"add2") {
74 generate_keys_honk<Add2Circuit>(output_path, circuit_flavor);
75 }
else if (circuit_flavor ==
"blake") {
76 generate_keys_honk<BlakeCircuit>(output_path, circuit_flavor);
77 }
else if (circuit_flavor ==
"ecdsa") {
78 generate_keys_honk<bb::EcdsaCircuit>(output_path, circuit_flavor);
79 }
else if (circuit_flavor ==
"recursive") {
80 generate_keys_honk<bb::RecursiveCircuit>(output_path, circuit_flavor);
82 info(
"Unsupported circuit");