Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Functions
demo_arithmetization.cpp File Reference
#include <algorithm>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <boost/program_options.hpp>
#include <libff/common/default_types/ec_pp.hpp>
#include <libff/common/profiling.hpp>
#include <libsnark/common/default_types/tinyram_ppzksnark_pp.hpp>
#include <libsnark/reductions/ram_to_r1cs/ram_to_r1cs.hpp>
#include <libsnark/relations/ram_computations/rams/tinyram/tinyram_params.hpp>
#include <libsnark/zk_proof_systems/ppzksnark/ram_ppzksnark/ram_ppzksnark.hpp>
Include dependency graph for demo_arithmetization.cpp:

Go to the source code of this file.

Functions

bool process_arithm_command_line (const int argc, const char **argv, std::string &assembly_fn, std::string &processed_assembly_fn, std::string &architecture_params_fn, std::string &computation_bounds_fn, std::string &primary_input_fn, std::string &auxiliary_input_fn)
 
int main (int argc, const char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
const char *  argv[] 
)

Definition at line 71 of file demo_arithmetization.cpp.

72 {
73  typedef libff::Fr<libff::default_ec_pp> FieldT;
74  typedef ram_tinyram<FieldT> default_ram;
75 
76  libff::default_ec_pp::init_public_params();
77 
78 #ifdef MINDEPS
79  std::string assembly_fn = "assembly.s";
80  std::string processed_assembly_fn = "processed.txt";
81  std::string architecture_params_fn = "architecture_params.txt";
82  std::string computation_bounds_fn = "computation_bounds.txt";
83  std::string primary_input_fn = "primary_input.txt";
84  std::string auxiliary_input_fn = "auxiliary_input.txt";
85 #else
86  std::string assembly_fn;
87  std::string processed_assembly_fn;
88  std::string architecture_params_fn;
89  std::string computation_bounds_fn;
90  std::string primary_input_fn;
91  std::string auxiliary_input_fn;
92 
94  argc,
95  argv,
96  assembly_fn,
97  processed_assembly_fn,
98  architecture_params_fn,
99  computation_bounds_fn,
100  primary_input_fn,
101  auxiliary_input_fn)) {
102  return 1;
103  }
104 #endif
105  libff::start_profiling();
106 
107  printf("==================================================================="
108  "=============\n");
109  printf("TinyRAM example loader\n");
110  printf("==================================================================="
111  "=============\n\n");
112 
113  /* load everything */
115  std::ifstream f_ap(architecture_params_fn);
116  f_ap >> ap;
117 
118  printf("Will run on %zu register machine (word size = %zu)\n", ap.k, ap.w);
119 
120  std::ifstream f_rp(computation_bounds_fn);
121  size_t tinyram_input_size_bound, tinyram_program_size_bound, time_bound;
122  f_rp >> tinyram_input_size_bound >> tinyram_program_size_bound >>
123  time_bound;
124 
125  std::ifstream processed(processed_assembly_fn);
126  std::ifstream raw(assembly_fn);
127  tinyram_program program = load_preprocessed_program(ap, processed);
128  printf(
129  "Program:\n%s\n",
130  std::string(
131  (std::istreambuf_iterator<char>(raw)),
132  std::istreambuf_iterator<char>())
133  .c_str());
134 
135  std::ifstream f_primary_input(primary_input_fn);
136  std::ifstream f_auxiliary_input(auxiliary_input_fn);
137 
138  libff::enter_block("Loading primary input");
139  tinyram_input_tape primary_input(load_tape(f_primary_input));
140  libff::leave_block("Loading primary input");
141 
142  libff::enter_block("Loading auxiliary input");
143  tinyram_input_tape auxiliary_input = load_tape(f_auxiliary_input);
144  libff::leave_block("Loading auxiliary input");
145 
146  const size_t boot_trace_size_bound =
147  tinyram_input_size_bound + tinyram_program_size_bound;
148  const ram_boot_trace<default_ram> boot_trace =
150  ap, boot_trace_size_bound, program, primary_input);
151 
153 
154  ram_to_r1cs<default_ram> r(ap, boot_trace_size_bound, time_bound);
155  r.instance_map();
156 
159  ap, boot_trace_size_bound, boot_trace);
161  r.auxiliary_input_map(boot_trace, auxiliary_input);
162  const r1cs_constraint_system<FieldT> constraint_system =
163  r.get_constraint_system();
164 
165  r.print_execution_trace();
166  assert(constraint_system.is_satisfied(
168 }
Here is the call graph for this function:

◆ process_arithm_command_line()

bool process_arithm_command_line ( const int  argc,
const char **  argv,
std::string &  assembly_fn,
std::string &  processed_assembly_fn,
std::string &  architecture_params_fn,
std::string &  computation_bounds_fn,
std::string &  primary_input_fn,
std::string &  auxiliary_input_fn 
)
Author
This file is part of libsnark, developed by SCIPR Lab and contributors (see AUTHORS).

Definition at line 26 of file demo_arithmetization.cpp.

35 {
36  try {
37  po::options_description desc("Usage");
38  desc.add_options()("help", "print this help message")(
39  "assembly", po::value<std::string>(&assembly_fn)->required())(
40  "processed_assembly",
41  po::value<std::string>(&processed_assembly_fn)->required())(
42  "architecture_params",
43  po::value<std::string>(&architecture_params_fn)->required())(
44  "computation_bounds",
45  po::value<std::string>(&computation_bounds_fn)->required())(
46  "primary_input",
47  po::value<std::string>(&primary_input_fn)->required())(
48  "auxiliary_input",
49  po::value<std::string>(&auxiliary_input_fn)->required());
50 
51  po::variables_map vm;
52  po::store(po::parse_command_line(argc, argv, desc), vm);
53 
54  if (vm.count("help")) {
55  std::cout << desc << "\n";
56  return false;
57  }
58 
59  po::notify(vm);
60  } catch (std::exception &e) {
61  std::cerr << "Error: " << e.what() << "\n";
62  return false;
63  }
64 
65  return true;
66 }
Here is the caller graph for this function:
libsnark::ram_architecture_params
typename ramT::architecture_params_type ram_architecture_params
Definition: ram_params.hpp:53
libsnark::r1cs_constraint_system::is_satisfied
bool is_satisfied(const r1cs_primary_input< FieldT > &primary_input, const r1cs_auxiliary_input< FieldT > &auxiliary_input) const
libsnark::load_preprocessed_program
tinyram_program load_preprocessed_program(const tinyram_architecture_params &ap, std::istream &preprocessed)
Definition: tinyram_aux.cpp:312
libsnark::tinyram_input_tape
std::vector< size_t > tinyram_input_tape
Definition: tinyram_aux.hpp:122
process_arithm_command_line
bool process_arithm_command_line(const int argc, const char **argv, std::string &assembly_fn, std::string &processed_assembly_fn, std::string &architecture_params_fn, std::string &computation_bounds_fn, std::string &primary_input_fn, std::string &auxiliary_input_fn)
Definition: demo_arithmetization.cpp:26
libsnark::ram_tinyram
Definition: tinyram_params.hpp:22
libsnark::ram_to_r1cs
Definition: ram_to_r1cs.hpp:25
libsnark::ram_ppzksnark_machine_pp
typename ram_ppzksnark_ppT::machine_pp ram_ppzksnark_machine_pp
Definition: ram_ppzksnark_params.hpp:64
libsnark::memory_store_trace
Definition: memory_store_trace.hpp:29
libsnark::r1cs_auxiliary_input
std::vector< FieldT > r1cs_auxiliary_input
Definition: r1cs.hpp:84
libsnark::load_tape
tinyram_input_tape load_tape(std::istream &tape)
Definition: tinyram_aux.cpp:369
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
libsnark::tinyram_boot_trace_from_program_and_input
memory_store_trace tinyram_boot_trace_from_program_and_input(const tinyram_architecture_params &ap, const size_t boot_trace_size_bound, const tinyram_program &program, const tinyram_input_tape &primary_input)
Definition: tinyram_aux.cpp:338
libsnark::tinyram_program
Definition: tinyram_aux.hpp:200
libsnark::r1cs_primary_input
std::vector< FieldT > r1cs_primary_input
Definition: r1cs.hpp:82