Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
db_interfaces.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <span>
5
14
15namespace bb::avm2::simulation {
16
18 public:
19 virtual ~ContractDBInterface() = default;
20
23};
24
25// Aliases.
32template <typename LeafValueType>
34
35// The sibling path and root after the insertion.
40
41// Low level access to a merkle db. In general these will not be constrained.
43 public:
44 virtual ~LowLevelMerkleDBInterface() = default;
45
46 virtual const TreeSnapshots& get_tree_roots() const = 0;
47
48 virtual SiblingPath get_sibling_path(MerkleTreeId tree_id, index_t leaf_index) const = 0;
50 // Returns the value if it exists, 0 otherwise.
51 virtual FF get_leaf_value(MerkleTreeId tree_id, index_t leaf_index) const = 0;
52 // We don't template the preimage methods because templated methods cannot be virtual.
55
57 const PublicDataLeafValue& leaf_value) = 0;
59 const NullifierLeafValue& leaf_value) = 0;
60
62
63 virtual void pad_tree(MerkleTreeId tree_id, size_t num_leaves) = 0;
64
65 virtual void create_checkpoint() = 0;
66 virtual void commit_checkpoint() = 0;
67 virtual void revert_checkpoint() = 0;
68 // Returns the id of the current checkpoint.
69 // This is a unique id for the lifetime of the db.
70 virtual uint32_t get_checkpoint_id() const = 0;
71};
72
73// High level access to a merkle db. In general these will be constrained.
75 public:
76 virtual ~HighLevelMerkleDBInterface() = default;
77
78 virtual TreeStates get_tree_state() const = 0;
79
80 virtual FF storage_read(const AztecAddress& contract_address, const FF& slot) const = 0;
82 const FF& slot,
83 const FF& value,
84 bool is_protocol_write) = 0;
85 virtual bool was_storage_written(const AztecAddress& contract_address, const FF& slot) const = 0;
86
87 virtual bool nullifier_exists(const AztecAddress& contract_address, const FF& nullifier) const = 0;
88 virtual bool siloed_nullifier_exists(const FF& nullifier) const = 0;
89 virtual bool nullifier_write(const AztecAddress& contract_address, const FF& nullifier) = 0;
90 virtual bool siloed_nullifier_write(const FF& nullifier) = 0;
91
92 virtual bool note_hash_exists(uint64_t leaf_index, const FF& unique_note_hash) const = 0;
93 virtual void note_hash_write(const AztecAddress& contract_address, const FF& note_hash) = 0;
94 virtual void siloed_note_hash_write(const FF& note_hash) = 0;
95 virtual void unique_note_hash_write(const FF& note_hash) = 0;
96 virtual bool l1_to_l2_msg_exists(uint64_t leaf_index, const FF& msg_hash) const = 0;
97
98 virtual void create_checkpoint() = 0;
99 virtual void commit_checkpoint() = 0;
100 virtual void revert_checkpoint() = 0;
101 virtual uint32_t get_checkpoint_id() const = 0;
102
103 virtual void pad_trees() = 0;
104
106};
107
109 public:
110 virtual ~CheckpointNotifiable() = default;
111 virtual void on_checkpoint_created() = 0;
112 virtual void on_checkpoint_committed() = 0;
113 virtual void on_checkpoint_reverted() = 0;
114};
115
116} // namespace bb::avm2::simulation
virtual std::optional< ContractInstance > get_contract_instance(const AztecAddress &address) const =0
virtual std::optional< ContractClass > get_contract_class(const ContractClassId &class_id) const =0
virtual bool note_hash_exists(uint64_t leaf_index, const FF &unique_note_hash) const =0
virtual void unique_note_hash_write(const FF &note_hash)=0
virtual bool siloed_nullifier_write(const FF &nullifier)=0
virtual FF storage_read(const AztecAddress &contract_address, const FF &slot) const =0
virtual uint32_t get_checkpoint_id() const =0
virtual bool was_storage_written(const AztecAddress &contract_address, const FF &slot) const =0
virtual void note_hash_write(const AztecAddress &contract_address, const FF &note_hash)=0
virtual bool nullifier_exists(const AztecAddress &contract_address, const FF &nullifier) const =0
virtual void siloed_note_hash_write(const FF &note_hash)=0
virtual void storage_write(const AztecAddress &contract_address, const FF &slot, const FF &value, bool is_protocol_write)=0
virtual bool siloed_nullifier_exists(const FF &nullifier) const =0
virtual bool l1_to_l2_msg_exists(uint64_t leaf_index, const FF &msg_hash) const =0
virtual bool nullifier_write(const AztecAddress &contract_address, const FF &nullifier)=0
virtual TreeStates get_tree_state() const =0
virtual LowLevelMerkleDBInterface & as_unconstrained() const =0
virtual IndexedLeaf< PublicDataLeafValue > get_leaf_preimage_public_data_tree(index_t leaf_index) const =0
virtual std::vector< AppendLeafResult > append_leaves(MerkleTreeId tree_id, std::span< const FF > leaves)=0
virtual void pad_tree(MerkleTreeId tree_id, size_t num_leaves)=0
virtual IndexedLeaf< NullifierLeafValue > get_leaf_preimage_nullifier_tree(index_t leaf_index) const =0
virtual SequentialInsertionResult< NullifierLeafValue > insert_indexed_leaves_nullifier_tree(const NullifierLeafValue &leaf_value)=0
virtual GetLowIndexedLeafResponse get_low_indexed_leaf(MerkleTreeId tree_id, const FF &value) const =0
virtual SiblingPath get_sibling_path(MerkleTreeId tree_id, index_t leaf_index) const =0
virtual uint32_t get_checkpoint_id() const =0
virtual SequentialInsertionResult< PublicDataLeafValue > insert_indexed_leaves_public_data_tree(const PublicDataLeafValue &leaf_value)=0
virtual const TreeSnapshots & get_tree_roots() const =0
virtual FF get_leaf_value(MerkleTreeId tree_id, index_t leaf_index) const =0
::bb::crypto::merkle_tree::fr_sibling_path SiblingPath
::bb::crypto::merkle_tree::index_t index_t
FF ContractClassId
AvmFlavorSettings::FF FF
Definition field.hpp:10
std::vector< fr > fr_sibling_path
Definition hash_path.hpp:16
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13