20 msgpack::pack(buf,
value);
21 return std::vector<uint8_t>(buf.data(), buf.data() + buf.size());
28template <
typename LeafType>
32 leaves.reserve(raw_leaves.size());
33 for (
const auto& raw : raw_leaves) {
34 auto unpacked = msgpack::unpack(
reinterpret_cast<const char*
>(raw.data()), raw.size());
36 unpacked.get().convert(leaf);
57 auto info = request.world_state.get_tree_info(revision, treeId);
63 auto state = request.world_state.get_state_reference(revision);
69 auto state = request.world_state.get_initial_state_reference();
80 case MerkleTreeId::NOTE_HASH_TREE:
81 case MerkleTreeId::L1_TO_L2_MESSAGE_TREE:
82 case MerkleTreeId::ARCHIVE: {
83 auto leaf = request.world_state.get_leaf<
bb::fr>(revision, treeId, leafIndex);
84 if (!leaf.has_value()) {
87 return Response{ .
value = serialize_to_msgpack(leaf.value()) };
89 case MerkleTreeId::PUBLIC_DATA_TREE: {
91 if (!leaf.has_value()) {
94 return Response{ .
value = serialize_to_msgpack(leaf.value()) };
96 case MerkleTreeId::NULLIFIER_TREE: {
97 auto leaf = request.world_state.get_leaf<
NullifierLeafValue>(revision, treeId, leafIndex);
98 if (!leaf.has_value()) {
101 return Response{ .
value = serialize_to_msgpack(leaf.value()) };
104 throw std::runtime_error(
"Unsupported tree type for get_leaf_value");
111 case MerkleTreeId::NULLIFIER_TREE: {
112 auto leaf = request.world_state.get_indexed_leaf<
NullifierLeafValue>(revision, treeId, leafIndex);
113 if (!leaf.has_value()) {
118 case MerkleTreeId::PUBLIC_DATA_TREE: {
119 auto leaf = request.world_state.get_indexed_leaf<
PublicDataLeafValue>(revision, treeId, leafIndex);
120 if (!leaf.has_value()) {
126 throw std::runtime_error(
"Unsupported tree type for get_leaf_preimage");
132 fr_sibling_path path = request.world_state.get_sibling_path(revision, treeId, leafIndex);
139 request.world_state.get_block_numbers_for_leaf_indices(revision, treeId, leafIndices, response.
blockNumbers);
151 case MerkleTreeId::NOTE_HASH_TREE:
152 case MerkleTreeId::L1_TO_L2_MESSAGE_TREE:
153 case MerkleTreeId::ARCHIVE: {
154 auto typed_leaves = deserialize_leaves<bb::fr>(leaves);
155 request.world_state.find_leaf_indices<
bb::fr>(revision, treeId, typed_leaves, response.
indices, startIndex);
158 case MerkleTreeId::PUBLIC_DATA_TREE: {
159 auto typed_leaves = deserialize_leaves<PublicDataLeafValue>(leaves);
161 revision, treeId, typed_leaves, response.
indices, startIndex);
164 case MerkleTreeId::NULLIFIER_TREE: {
165 auto typed_leaves = deserialize_leaves<NullifierLeafValue>(leaves);
167 revision, treeId, typed_leaves, response.
indices, startIndex);
171 throw std::runtime_error(
"Unsupported tree type for find_leaf_indices");
178 auto low_leaf_info = request.world_state.find_low_leaf_index(revision, treeId,
key);
186 case MerkleTreeId::NOTE_HASH_TREE:
187 case MerkleTreeId::L1_TO_L2_MESSAGE_TREE:
188 case MerkleTreeId::ARCHIVE: {
189 auto typed_leaves = deserialize_leaves<bb::fr>(leaves);
190 request.world_state.find_sibling_paths<
bb::fr>(revision, treeId, typed_leaves, response.
paths);
193 case MerkleTreeId::PUBLIC_DATA_TREE: {
194 auto typed_leaves = deserialize_leaves<PublicDataLeafValue>(leaves);
198 case MerkleTreeId::NULLIFIER_TREE: {
199 auto typed_leaves = deserialize_leaves<NullifierLeafValue>(leaves);
204 throw std::runtime_error(
"Unsupported tree type for find_sibling_paths");
216 case MerkleTreeId::NOTE_HASH_TREE:
217 case MerkleTreeId::L1_TO_L2_MESSAGE_TREE:
218 case MerkleTreeId::ARCHIVE: {
219 auto typed_leaves = deserialize_leaves<bb::fr>(leaves);
220 request.world_state.append_leaves<
bb::fr>(treeId, typed_leaves, forkId);
223 case MerkleTreeId::PUBLIC_DATA_TREE: {
224 auto typed_leaves = deserialize_leaves<PublicDataLeafValue>(leaves);
228 case MerkleTreeId::NULLIFIER_TREE: {
229 auto typed_leaves = deserialize_leaves<NullifierLeafValue>(leaves);
234 throw std::runtime_error(
"Unsupported tree type for append_leaves");
242 case MerkleTreeId::PUBLIC_DATA_TREE: {
243 auto typed_leaves = deserialize_leaves<PublicDataLeafValue>(leaves);
245 treeId, typed_leaves, subtreeDepth, forkId);
248 case MerkleTreeId::NULLIFIER_TREE: {
249 auto typed_leaves = deserialize_leaves<NullifierLeafValue>(leaves);
251 treeId, typed_leaves, subtreeDepth, forkId);
255 throw std::runtime_error(
"Unsupported tree type for batch_insert");
262 case MerkleTreeId::PUBLIC_DATA_TREE: {
263 auto typed_leaves = deserialize_leaves<PublicDataLeafValue>(leaves);
264 auto result = request.world_state.insert_indexed_leaves<
PublicDataLeafValue>(treeId, typed_leaves, forkId);
267 case MerkleTreeId::NULLIFIER_TREE: {
268 auto typed_leaves = deserialize_leaves<NullifierLeafValue>(leaves);
269 auto result = request.world_state.insert_indexed_leaves<
NullifierLeafValue>(treeId, typed_leaves, forkId);
273 throw std::runtime_error(
"Unsupported tree type for sequential_insert");
279 request.world_state.update_archive(blockStateRef, blockHeaderHash, forkId);
290 request.world_state.commit(status);
296 request.world_state.rollback();
307 blockStateRef, blockHeaderHash, paddedNoteHashes, paddedL1ToL2Messages, paddedNullifiers, publicDataWrites);
318 uint64_t
id = request.world_state.create_fork(block);
324 request.world_state.delete_fork(forkId);
357 request.world_state.get_status_summary(status);
367 request.world_state.checkpoint(forkId);
373 request.world_state.commit_checkpoint(forkId);
379 request.world_state.revert_checkpoint(forkId);
385 request.world_state.commit_all_checkpoints_to(forkId, 0);
391 request.world_state.revert_all_checkpoints_to(forkId, 0);
401 request.world_state.copy_stores(dstPath, compact.value_or(
false));
A wrapper around std::variant that provides msgpack serialization based on type names.
std::vector< fr > fr_sibling_path
std::vector< uint8_t > serialize_to_msgpack(const T &data)
Serializes data to msgpack format.
WsdbCommandResponse wsdb(WsdbRequest &request, WsdbCommand &&command)
Top-level wsdb API entry point. Takes a WsdbRequest and dispatches the command.
WsdbCommandResponse execute(WsdbRequest &request, WsdbCommand &&command)
Execute a wsdb command using the visitor pattern.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Response execute(WsdbRequest &request) &&
std::vector< uint8_t > result
Response execute(WsdbRequest &request) &&
WorldStateStatusFull status
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
WorldStateStatusSummary status
Response execute(WsdbRequest &request) &&
std::vector< std::optional< index_t > > indices
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
std::vector< std::optional< SiblingPathAndIndex > > paths
Response execute(WsdbRequest &request) &&
std::vector< std::optional< block_number_t > > blockNumbers
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
std::optional< std::vector< uint8_t > > preimage
Response execute(WsdbRequest &request) &&
std::optional< std::vector< uint8_t > > value
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
WorldStateStatusSummary status
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
WorldStateStatusFull status
Response execute(WsdbRequest &request) &&
Context passed to each command's execute() method, providing access to the WorldState.
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
std::vector< uint8_t > result
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
WorldStateStatusFull status
Response execute(WsdbRequest &request) &&
WorldStateStatusFull status
Response execute(WsdbRequest &request) &&
Response execute(WsdbRequest &request) &&
WsdbCommand NamedUnion, WsdbRequest context, and dispatch function.