Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
joinsplit_circuit_cmd.cpp
Go to the documentation of this file.
1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
2 //
3 // SPDX-License-Identifier: LGPL-3.0+
4 
6 
7 #include "libtool/tool_util.hpp"
11 
12 namespace zethtool
13 {
14 
15 namespace commands
16 {
17 
18 class joinsplit_circuit_cmd : public generic_subcommand<joinsplit_circuit_cmd>
19 {
20 public:
22 
24  const std::string &subcommand_name, const std::string &description)
26  {
27  }
28 
29  template<typename ppT, typename snarkT>
31  {
32  using Field = libff::Fr<ppT>;
34 
35  ppT::init_public_params();
36  libff::inhibit_profiling_info = true;
37  libff::inhibit_profiling_counters = true;
38 
39  circuit_wrapper circuit;
40  const libsnark::r1cs_constraint_system<Field> &r1cs =
41  circuit.get_constraint_system();
42 
43  std::cout << "r1cs: num_variables: " << r1cs.num_variables()
44  << ", num_constraints: " << r1cs.num_constraints() << "\n";
45 
46  if (!r1cs_file.empty()) {
47  std::cout << "writing r1cs to '" << r1cs_file << "'";
48  std::ofstream out_s = libtool::open_binary_output_file(r1cs_file);
49  libzeth::r1cs_write_bytes(r1cs, out_s);
50  std::cout << "\n";
51  }
52 
53  return 0;
54  };
55 
56 protected:
58  boost::program_options::options_description &options,
59  boost::program_options::options_description &all_options,
60  boost::program_options::positional_options_description &pos) override
61  {
62  base_class::initialize_suboptions(options, all_options, pos);
63  options.add_options()(
64  "r1cs_file", po::value<std::string>(), "R1CS output file");
65  all_options.add(options);
66  }
67 
69  const boost::program_options::variables_map &vm) override
70  {
72  if (vm.count("r1cs_file")) {
73  r1cs_file = vm["r1cs_file"].as<std::string>();
74  }
75  }
76 
77  void subcommand_usage(const char *argv0) override
78  {
79  std::cout << "Usage:\n " << argv0 << "\n";
80  }
81 
82  std::string r1cs_file;
83 };
84 
85 } // namespace commands
86 
88  "joinsplit-circuit",
89  "Statistics relating to (and export of) the joinsplit circuit");
90 
91 } // namespace zethtool
libzeth::circuit_wrapper
Definition: circuit_wrapper.hpp:27
zethtool::generic_subcommand< joinsplit_circuit_cmd >::parse_suboptions
void parse_suboptions(const boost::program_options::variables_map &vm) override
Definition: tool_common.hpp:111
libtool::subcommand::description
const std::string & description() const
commands
Definition: __init__.py:1
libzeth::r1cs_write_bytes
void r1cs_write_bytes(const libsnark::r1cs_constraint_system< FieldT > &r1cs, std::ostream &out_s)
zethtool::generic_subcommand< joinsplit_circuit_cmd >::initialize_suboptions
void initialize_suboptions(boost::program_options::options_description &options, boost::program_options::options_description &, boost::program_options::positional_options_description &) override
Definition: tool_common.hpp:97
r1cs_serialization.hpp
libzeth::circuit_wrapper::get_constraint_system
const libsnark::r1cs_constraint_system< Field > & get_constraint_system() const
tool_util.hpp
zethtool::commands::joinsplit_circuit_cmd::joinsplit_circuit_cmd
joinsplit_circuit_cmd(const std::string &subcommand_name, const std::string &description)
Definition: joinsplit_circuit_cmd.cpp:23
zethtool::commands::joinsplit_circuit_cmd::initialize_suboptions
void initialize_suboptions(boost::program_options::options_description &options, boost::program_options::options_description &all_options, boost::program_options::positional_options_description &pos) override
Instantiation can now set up the boost program_options structures.
Definition: joinsplit_circuit_cmd.cpp:57
Field
libzeth::defaults::Field Field
Definition: mpc_subcommand.hpp:11
zethtool::generic_subcommand
Definition: tool_common.hpp:87
global_options
Definition: mpc_subcommand.hpp:15
zethtool::commands::joinsplit_circuit_cmd::execute_generic
int execute_generic(const global_options &)
Definition: joinsplit_circuit_cmd.cpp:30
libtool::open_binary_output_file
std::ofstream open_binary_output_file(const std::string &filename)
Utility function to open a binary file for writing, with appropriate flags.
Definition: tool_util.cpp:19
libtool::subcommand::subcommand_name
std::string subcommand_name
Definition: subcommand.hpp:54
joinsplit_circuit_cmd.hpp
zethtool::commands::joinsplit_circuit_cmd
Definition: joinsplit_circuit_cmd.cpp:18
zethtool::commands::joinsplit_circuit_cmd::subcommand_usage
void subcommand_usage(const char *argv0) override
Any command-specific output for usage.
Definition: joinsplit_circuit_cmd.cpp:77
zethtool::joinsplit_circuit_cmd
zeth_subcommand * joinsplit_circuit_cmd
Definition: joinsplit_circuit_cmd.cpp:87
circuit_types.hpp
zethtool::commands::joinsplit_circuit_cmd::r1cs_file
std::string r1cs_file
Definition: joinsplit_circuit_cmd.cpp:82
circuit_wrapper.hpp
libtool::subcommand
Class representing a tool subcommand.
Definition: subcommand.hpp:18
zethtool::commands::joinsplit_circuit_cmd::parse_suboptions
void parse_suboptions(const boost::program_options::variables_map &vm) override
Definition: joinsplit_circuit_cmd.cpp:68
zethtool
Definition: dump_proof_cmd.cpp:11