Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
cdb_ipc_client.cpp
Go to the documentation of this file.
2
5
6namespace bb::cdb {
7
8namespace {
9
10template <typename T> std::vector<uint8_t> serialize_to_msgpack(const T& value)
11{
12 msgpack::sbuffer buf;
13 msgpack::pack(buf, value);
14 return std::vector<uint8_t>(buf.data(), buf.data() + buf.size());
15}
16
17template <typename T> T deserialize_from_msgpack(const std::vector<uint8_t>& bytes)
18{
19 auto unpacked = msgpack::unpack(reinterpret_cast<const char*>(bytes.data()), bytes.size());
20 T value;
21 unpacked.get().convert(value);
22 return value;
23}
24
25template <typename Alias> Alias field_to_wire(const avm2::FF& field)
26{
27 Alias wire{};
28 avm2::FF::serialize_to_buffer(field, wire.data());
29 return wire;
30}
31
32template <typename Alias> avm2::FF field_from_wire(const Alias& wire)
33{
34 return avm2::FF::serialize_from_buffer(wire.data());
35}
36
37template <typename T> std::optional<T> decode_optional_msgpack(const std::optional<std::vector<uint8_t>>& bytes)
38{
39 if (!bytes.has_value()) {
40 return std::nullopt;
41 }
42 return deserialize_from_msgpack<T>(*bytes);
43}
44
45} // namespace
46
47CdbIpcContractDB::CdbIpcContractDB(const std::string& ipc_path)
48 : client_(std::make_unique<CdbIpcClient>(ipc_path))
49{}
50
52
54{
55 auto resp = client_->get_contract_instance(
56 CdbGetContractInstance{ .address = field_to_wire<AztecAddress>(address), .forkId = fork_id_ });
57 return decode_optional_msgpack<avm2::ContractInstance>(resp.instance);
58}
59
61{
62 auto resp = client_->get_contract_class(
63 CdbGetContractClass{ .classId = field_to_wire<ContractClassId>(class_id), .forkId = fork_id_ });
64 return decode_optional_msgpack<avm2::ContractClass>(resp.contractClass);
65}
66
68{
69 auto resp = client_->get_bytecode_commitment(
70 CdbGetBytecodeCommitment{ .classId = field_to_wire<ContractClassId>(class_id), .forkId = fork_id_ });
71 return resp.commitment.has_value() ? std::optional<avm2::FF>(field_from_wire(*resp.commitment)) : std::nullopt;
72}
73
75 const avm2::FunctionSelector& selector) const
76{
77 auto resp =
78 client_->get_debug_function_name(CdbGetDebugFunctionName{ .address = field_to_wire<AztecAddress>(address),
79 .selector = field_to_wire<FunctionSelector>(selector),
80 .forkId = fork_id_ });
81 return resp.name;
82}
83
85{
86 client_->add_contracts(CdbAddContracts{ .contractDeploymentData = serialize_to_msgpack(contract_deployment_data),
87 .forkId = fork_id_ });
88}
89
91{
92 client_->create_checkpoint(CdbCreateCheckpoint{ .forkId = fork_id_ });
93}
94
96{
97 client_->commit_checkpoint(CdbCommitCheckpoint{ .forkId = fork_id_ });
98}
99
101{
102 client_->revert_checkpoint(CdbRevertCheckpoint{ .forkId = fork_id_ });
103}
104
105} // namespace bb::cdb
std::optional< avm2::ContractInstance > get_contract_instance(const avm2::AztecAddress &address) const override
void commit_checkpoint() override
void add_contracts(const avm2::ContractDeploymentData &contract_deployment_data) override
void revert_checkpoint() override
void create_checkpoint() override
CdbIpcContractDB(const std::string &ipc_path)
std::optional< avm2::FF > get_bytecode_commitment(const avm2::ContractClassId &class_id) const override
std::optional< avm2::ContractClass > get_contract_class(const avm2::ContractClassId &class_id) const override
std::optional< std::string > get_debug_function_name(const avm2::AztecAddress &address, const avm2::FunctionSelector &selector) const override
std::unique_ptr< CdbIpcClient > client_
AvmFlavorSettings::FF FF
Definition field.hpp:10
FF ContractClassId
FF FunctionSelector
ContractDBInterface adapter over the generated CDB IPC client.
STL namespace.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
General class for prime fields see Prime field documentation["field documentation"] for general imple...