Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
acir_loader.cpp
Go to the documentation of this file.
1
#include "
acir_loader.hpp
"
2
#include "
barretenberg/dsl/acir_format/acir_format.hpp
"
3
#include "
barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp
"
4
#include "barretenberg/serialize/msgpack_impl.hpp
5
#include "
barretenberg/smt_verification/circuit/ultra_circuit.hpp
"
6
#include "
barretenberg/smt_verification/terms/term.hpp
"
7
#include <fstream>
8
#include <string>
9
#include <vector>
10
11
std::vector<uint8_t> readFile(std::string filename)
12
{
13
std::ifstream file(filename, std::ios::binary);
14
file.unsetf(std::ios::skipws);
15
16
std::streampos fileSize;
17
18
file.seekg(0, std::ios::end);
19
fileSize = file.tellg();
20
file.seekg(0, std::ios::beg);
21
22
std::vector<uint8_t> vec;
23
24
vec.insert(vec.begin(), std::istream_iterator<uint8_t>(file), std::istream_iterator<uint8_t>());
25
file.close();
26
return vec;
27
}
28
29
AcirToSmtLoader::AcirToSmtLoader(std::string filename)
30
{
31
this->acir_program_buf = readFile(filename);
32
this->instruction_name = filename;
33
this->constraint_system = acir_format::program_buf_to_acir_format(this->acir_program_buf, false).at(0);
34
this->circuit_buf = this->get_circuit_builder().export_circuit();
35
}
36
37
bb::UltraCircuitBuilder AcirToSmtLoader::get_circuit_builder()
38
{
39
bb::UltraCircuitBuilder builder = acir_format::create_circuit(this->constraint_system, false);
40
builder.set_variable_name(0, "
a
");
41
builder.set_variable_name(1, "
b
");
42
builder.set_variable_name(2, "
c
");
43
return builder;
44
}
45
46
smt_solver::Solver AcirToSmtLoader::get_smt_solver()
47
{
48
smt_circuit::CircuitSchema circuit_info = this->get_circuit_schema();
49
// In circuits generated by the shift left (shl) opcode, there is a variable with bit length 197.
50
// This is likely because the shl operation internally calls truncate opcode to handle overflow
51
return smt_solver::Solver(circuit_info.modulus, smt_circuit::default_solver_config, 16, 240);
52
}
53
54
smt_circuit::CircuitSchema AcirToSmtLoader::get_circuit_schema()
55
{
56
return smt_circuit_schema::unpack_from_buffer(this->circuit_buf);
57
}
58
59
smt_circuit::UltraCircuit AcirToSmtLoader::get_bitvec_smt_circuit(smt_solver::Solver* solver)
60
{
61
smt_circuit::CircuitSchema circuit_info = smt_circuit_schema::unpack_from_buffer(this->circuit_buf);
62
return smt_circuit::UltraCircuit(circuit_info, solver, smt_terms::TermType::BVTerm);
63
}
64
65
smt_circuit::UltraCircuit AcirToSmtLoader::get_field_smt_circuit(smt_solver::Solver* solver)
66
{
67
smt_circuit::CircuitSchema circuit_info = smt_circuit_schema::unpack_from_buffer(this->circuit_buf);
68
return smt_circuit::UltraCircuit(circuit_info, solver, smt_terms::TermType::FFTerm);
69
}
70
71
smt_circuit::UltraCircuit AcirToSmtLoader::get_integer_smt_circuit(smt_solver::Solver* solver)
72
{
73
smt_circuit::CircuitSchema circuit_info = smt_circuit_schema::unpack_from_buffer(this->circuit_buf);
74
return smt_circuit::UltraCircuit(circuit_info, solver, smt_terms::TermType::ITerm);
75
}
acir_format.hpp
acir_loader.hpp
acir_to_constraint_buf.hpp
a
FF a
Definition
field_gt.test.cpp:51
b
FF b
Definition
field_gt.test.cpp:52
src
barretenberg
acir_formal_proofs
acir_loader.cpp
Generated by
1.9.8