Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
raw_data_dbs.cpp
Go to the documentation of this file.
2
3#include <cassert>
4#include <optional>
5#include <span>
6#include <stdexcept>
7#include <string>
8
13
14namespace bb::avm2::simulation {
15
16namespace {
17
18std::string to_string(const TreeSnapshots& snapshots)
19{
20 return format("PUBLIC_DATA_TREE: ",
21 snapshots.publicDataTree,
22 "\nNULLIFIER_TREE: ",
23 snapshots.nullifierTree,
24 "\nNOTE_HASH_TREE: ",
25 snapshots.noteHashTree,
26 "\nL1_TO_L2_MESSAGE_TREE: ",
27 snapshots.l1ToL2MessageTree);
28}
29
30std::string get_tree_name(world_state::MerkleTreeId tree_id)
31{
32 switch (tree_id) {
34 return "PUBLIC_DATA_TREE";
36 return "NULLIFIER_TREE";
38 return "NOTE_HASH_TREE";
40 return "L1_TO_L2_MESSAGE_TREE";
42 return "ARCHIVE";
43 }
44
45 return "UNKNOWN"; // To make GCC happy.
46}
47
48// We need this helper to avoid having const and non-const versions methods in the class.
49auto& get_tree_info_helper(world_state::MerkleTreeId tree_id, auto& tree_roots)
50{
51 switch (tree_id) {
53 return tree_roots.nullifierTree;
55 return tree_roots.publicDataTree;
57 return tree_roots.noteHashTree;
59 return tree_roots.l1ToL2MessageTree;
60 default:
61 throw std::runtime_error("AVM cannot process tree id: " + std::to_string(static_cast<uint64_t>(tree_id)));
62 }
63}
64
65} // namespace
66
67// HintedRawContractDB starts.
69{
70 vinfo("Initializing HintedRawContractDB with...",
71 "\n * contractInstances: ",
72 hints.contractInstances.size(),
73 "\n * contractClasses: ",
74 hints.contractClasses.size(),
75 "\n * bytecodeCommitments: ",
76 hints.bytecodeCommitments.size());
77
78 for (const auto& contract_instance_hint : hints.contractInstances) {
79 // TODO(fcarreiro): We are currently generating duplicates in TS.
80 // assert(!contract_instances.contains(contract_instance_hint.address));
81 contract_instances[contract_instance_hint.address] = contract_instance_hint;
82 }
83
84 for (const auto& contract_class_hint : hints.contractClasses) {
85 // TODO(fcarreiro): We are currently generating duplicates in TS.
86 // assert(!contract_classes.contains(contract_class_hint.classId));
87 contract_classes[contract_class_hint.classId] = contract_class_hint;
88 }
89
90 for (const auto& bytecode_commitment_hint : hints.bytecodeCommitments) {
91 // TODO(fcarreiro): We are currently generating duplicates in TS.
92 // assert(!bytecode_commitments.contains(bytecode_commitment_hint.classId));
93 bytecode_commitments[bytecode_commitment_hint.classId] = bytecode_commitment_hint.commitment;
94 }
95}
96
98{
99 auto it = contract_instances.find(address);
100 // If we don't find the instance hint, this is not a catastrohic failure. It means that on the TS side,
101 // the instance was also not found, and should be handled.
102 if (it == contract_instances.end()) {
103 vinfo("Contract instance not found: ", address);
104 return std::nullopt;
105 }
106 const auto& contract_instance_hint = it->second;
107
109 .salt = contract_instance_hint.salt,
110 .deployer_addr = contract_instance_hint.deployer,
111 .current_class_id = contract_instance_hint.currentContractClassId,
112 .original_class_id = contract_instance_hint.originalContractClassId,
113 .initialisation_hash = contract_instance_hint.initializationHash,
114 .public_keys =
116 .nullifier_key = contract_instance_hint.publicKeys.masterNullifierPublicKey,
117 .incoming_viewing_key = contract_instance_hint.publicKeys.masterIncomingViewingPublicKey,
118 .outgoing_viewing_key = contract_instance_hint.publicKeys.masterOutgoingViewingPublicKey,
119 .tagging_key = contract_instance_hint.publicKeys.masterTaggingPublicKey,
120 },
121 });
122}
123
125{
126 auto it = contract_classes.find(class_id);
127 // If we don't find the class hint, this is not a catastrohic failure. It means that on the TS side,
128 // the class was also not found, and should be handled.
129 if (it == contract_classes.end()) {
130 vinfo("Contract class not found: ", class_id);
131 return std::nullopt;
132 }
133 const auto& contract_class_hint = it->second;
134
136 .artifact_hash = contract_class_hint.artifactHash,
137 .private_function_root = contract_class_hint.privateFunctionsRoot,
138 // We choose to embed the bytecode commitment in the contract class.
139 .public_bytecode_commitment = get_bytecode_commitment(class_id),
140 .packed_bytecode = contract_class_hint.packedBytecode,
141 });
142}
143
145{
146 assert(bytecode_commitments.contains(class_id));
147 return bytecode_commitments.at(class_id);
148}
149
150// Hinted MerkleDB starts.
152 : tree_roots(hints.startingTreeRoots)
153{
154 vinfo("Initializing HintedRawMerkleDB with...",
155 "\n * get_sibling_path_hints: ",
156 hints.getSiblingPathHints.size(),
157 "\n * get_previous_value_index_hints: ",
158 hints.getPreviousValueIndexHints.size(),
159 "\n * get_leaf_preimage_hints_public_data_tree: ",
161 "\n * get_leaf_preimage_hints_nullifier_tree: ",
163 "\n * get_leaf_value_hints: ",
164 hints.getLeafValueHints.size(),
165 "\n * sequential_insert_hints_public_data_tree: ",
167 "\n * sequential_insert_hints_nullifier_tree: ",
169 "\n * append_leaves_hints: ",
170 hints.appendLeavesHints.size(),
171 "\n * create_checkpoint_hints: ",
172 hints.createCheckpointHints.size(),
173 "\n * commit_checkpoint_hints: ",
174 hints.commitCheckpointHints.size(),
175 "\n * revert_checkpoint_hints: ",
176 hints.revertCheckpointHints.size());
177 debug("Initializing HintedRawMerkleDB with snapshots...\n", to_string(tree_roots));
178
179 for (const auto& get_sibling_path_hint : hints.getSiblingPathHints) {
180 GetSiblingPathKey key = { get_sibling_path_hint.hintKey,
181 get_sibling_path_hint.treeId,
182 get_sibling_path_hint.index };
183 get_sibling_path_hints[key] = get_sibling_path_hint.path;
184 }
185
186 for (const auto& get_previous_value_index_hint : hints.getPreviousValueIndexHints) {
187 GetPreviousValueIndexKey key = { get_previous_value_index_hint.hintKey,
188 get_previous_value_index_hint.treeId,
189 get_previous_value_index_hint.value };
191 get_previous_value_index_hint.alreadyPresent,
192 get_previous_value_index_hint.index,
193 };
194 }
195
196 for (const auto& get_leaf_preimage_hint : hints.getLeafPreimageHintsPublicDataTree) {
197 GetLeafPreimageKey key = { get_leaf_preimage_hint.hintKey, get_leaf_preimage_hint.index };
198 get_leaf_preimage_hints_public_data_tree[key] = get_leaf_preimage_hint.leafPreimage;
199 }
200
201 for (const auto& get_leaf_preimage_hint : hints.getLeafPreimageHintsNullifierTree) {
202 GetLeafPreimageKey key = { get_leaf_preimage_hint.hintKey, get_leaf_preimage_hint.index };
203 get_leaf_preimage_hints_nullifier_tree[key] = get_leaf_preimage_hint.leafPreimage;
204 }
205
206 for (const auto& get_leaf_value_hint : hints.getLeafValueHints) {
207 GetLeafValueKey key = { get_leaf_value_hint.hintKey, get_leaf_value_hint.treeId, get_leaf_value_hint.index };
208 get_leaf_value_hints[key] = get_leaf_value_hint.value;
209 }
210
211 for (const auto& sequential_insert_hint : hints.sequentialInsertHintsPublicDataTree) {
212 SequentialInsertHintPublicDataTreeKey key = { sequential_insert_hint.hintKey,
213 sequential_insert_hint.treeId,
214 sequential_insert_hint.leaf };
215 sequential_insert_hints_public_data_tree[key] = sequential_insert_hint;
216 }
217
218 for (const auto& sequential_insert_hint : hints.sequentialInsertHintsNullifierTree) {
219 SequentialInsertHintNullifierTreeKey key = { sequential_insert_hint.hintKey,
220 sequential_insert_hint.treeId,
221 sequential_insert_hint.leaf };
222 sequential_insert_hints_nullifier_tree[key] = sequential_insert_hint;
223 }
224
225 for (const auto& append_leaves_hint : hints.appendLeavesHints) {
226 // Convert the span from the hint to a vector for the key
227 AppendLeavesHintKey key = { append_leaves_hint.hintKey, append_leaves_hint.treeId, append_leaves_hint.leaves };
228 append_leaves_hints[key] = append_leaves_hint.stateAfter;
229 }
230
231 for (const auto& create_checkpoint_hint : hints.createCheckpointHints) {
232 create_checkpoint_hints[create_checkpoint_hint.actionCounter] = create_checkpoint_hint;
233 }
234
235 for (const auto& commit_checkpoint_hint : hints.commitCheckpointHints) {
236 commit_checkpoint_hints[commit_checkpoint_hint.actionCounter] = commit_checkpoint_hint;
237 }
238
239 for (const auto& revert_checkpoint_hint : hints.revertCheckpointHints) {
240 revert_checkpoint_hints[revert_checkpoint_hint.actionCounter] = revert_checkpoint_hint;
241 }
242}
243
245{
246 return get_tree_info_helper(tree_id, tree_roots);
247}
248
250{
251 return get_tree_info_helper(tree_id, tree_roots);
252}
253
255{
256 auto tree_info = get_tree_info(tree_id);
257 GetSiblingPathKey key = { tree_info, tree_id, leaf_index };
258 auto it = get_sibling_path_hints.find(key);
259 if (it == get_sibling_path_hints.end()) {
260 throw std::runtime_error(format("Sibling path not found for key (root: ",
261 tree_info.root,
262 ", size: ",
263 tree_info.nextAvailableLeafIndex,
264 ", tree: ",
265 get_tree_name(tree_id),
266 ", leaf_index: ",
267 leaf_index,
268 ")"));
269 }
270 return it->second;
271}
272
274 const FF& value) const
275{
276 auto tree_info = get_tree_info(tree_id);
277 GetPreviousValueIndexKey key = { tree_info, tree_id, value };
278 auto it = get_previous_value_index_hints.find(key);
279 if (it == get_previous_value_index_hints.end()) {
280 throw std::runtime_error(format("Low indexed leaf not found for key (root: ",
281 tree_info.root,
282 ", size: ",
283 tree_info.nextAvailableLeafIndex,
284 ", tree: ",
285 get_tree_name(tree_id),
286 ", value: ",
287 value,
288 ")"));
289 }
290 return it->second;
291}
292
294{
295 auto tree_info = get_tree_info(tree_id);
296 GetLeafValueKey key = { tree_info, tree_id, leaf_index };
297 auto it = get_leaf_value_hints.find(key);
298 return it == get_leaf_value_hints.end() ? 0 : it->second;
299}
300
302{
304 GetLeafPreimageKey key = { tree_info, leaf_index };
307 throw std::runtime_error(format("Leaf preimage (PUBLIC_DATA_TREE) not found for key (root: ",
308 tree_info.root,
309 ", size: ",
310 tree_info.nextAvailableLeafIndex,
311 ", leaf_index: ",
312 leaf_index,
313 ")"));
314 }
315 return it->second;
316}
317
319{
321 GetLeafPreimageKey key = { tree_info, leaf_index };
324 throw std::runtime_error(format("Leaf preimage (NULLIFIER_TREE) not found for key (root: ",
325 tree_info.root,
326 ", size: ",
327 tree_info.nextAvailableLeafIndex,
328 ", leaf_index: ",
329 leaf_index,
330 ")"));
331 }
332 return it->second;
333}
334
336 const PublicDataLeafValue& leaf_value)
337{
342 throw std::runtime_error(format("Sequential insert hint (PUBLIC_DATA_TREE) not found for key (root: ",
343 tree_info.root,
344 ", size: ",
345 tree_info.nextAvailableLeafIndex,
346 ", leaf_value: ",
347 leaf_value,
348 ")"));
349 }
350 const auto& hint = it->second;
351
353
354 // Convert low leaves witness data
355 result.low_leaf_witness_data.emplace_back(
356 hint.lowLeavesWitnessData.leaf, hint.lowLeavesWitnessData.index, hint.lowLeavesWitnessData.path);
357
358 // Convert insertion witness data
359 result.insertion_witness_data.emplace_back(
360 hint.insertionWitnessData.leaf, hint.insertionWitnessData.index, hint.insertionWitnessData.path);
361
362 // Evolve state.
363 tree_roots.publicDataTree = hint.stateAfter;
364
365 debug("Evolved state of PUBLIC_DATA_TREE: ",
367 " (size: ",
369 ")");
370
371 return result;
372}
373
375 const NullifierLeafValue& leaf_value)
376{
381 throw std::runtime_error(format("Sequential insert hint (NULLIFIER_TREE) not found for key (root: ",
382 tree_info.root,
383 ", size: ",
384 tree_info.nextAvailableLeafIndex,
385 ", leaf_value: ",
386 leaf_value,
387 ")"));
388 }
389 const auto& hint = it->second;
390
392
393 // Convert low leaves witness data
394 result.low_leaf_witness_data.emplace_back(
395 hint.lowLeavesWitnessData.leaf, hint.lowLeavesWitnessData.index, hint.lowLeavesWitnessData.path);
396
397 // Convert insertion witness data
398 result.insertion_witness_data.emplace_back(
399 hint.insertionWitnessData.leaf, hint.insertionWitnessData.index, hint.insertionWitnessData.path);
400
401 // Evolve state.
402 tree_roots.nullifierTree = hint.stateAfter;
403
404 debug("Evolved state of NULLIFIER_TREE: ",
406 " (size: ",
408 ")");
409
410 return result;
411}
412
414{
416 if (it == create_checkpoint_hints.end()) {
417 throw std::runtime_error(
418 format("[create_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
419 }
420 const auto& hint = it->second;
421
422 // Sanity check.
423 if (hint.oldCheckpointId != checkpoint_stack.top()) {
424 throw std::runtime_error(format("[create_checkpoint@",
426 "] Old checkpoint id does not match the current checkpoint id: ",
427 hint.oldCheckpointId,
428 " != ",
429 checkpoint_stack.top()));
430 }
431
432 debug("[create_checkpoint@",
434 "] Checkpoint evolved ",
435 hint.oldCheckpointId,
436 " -> ",
437 hint.newCheckpointId);
438
439 checkpoint_stack.push(hint.newCheckpointId);
441}
442
444{
446 if (it == commit_checkpoint_hints.end()) {
447 throw std::runtime_error(
448 format("[commit_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
449 }
450 const auto& hint = it->second;
451
452 // Sanity check.
453 if (hint.oldCheckpointId != checkpoint_stack.top()) {
454 throw std::runtime_error(format("[commit_checkpoint@",
456 "] Old checkpoint id does not match the current checkpoint id: ",
457 hint.oldCheckpointId,
458 " != ",
459 checkpoint_stack.top()));
460 }
461
462 checkpoint_stack.pop();
463
464 // Sanity check.
465 if (hint.newCheckpointId != checkpoint_stack.top()) {
466 throw std::runtime_error(format("[commit_checkpoint@",
468 "] New checkpoint id does not match the current checkpoint id: ",
469 hint.newCheckpointId,
470 " != ",
471 checkpoint_stack.top()));
472 }
473
474 debug("[commit_checkpoint@",
476 "] Checkpoint evolved ",
477 hint.oldCheckpointId,
478 " -> ",
479 hint.newCheckpointId);
480
482}
483
485{
487 if (it == revert_checkpoint_hints.end()) {
488 throw std::runtime_error(
489 format("[revert_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
490 }
491 const auto& hint = it->second;
492
493 // Sanity check of checkpoint stack.
494 if (hint.oldCheckpointId != checkpoint_stack.top()) {
495 throw std::runtime_error(format("[revert_checkpoint@",
497 "] Old checkpoint id does not match the current checkpoint id: ",
498 hint.oldCheckpointId,
499 " != ",
500 checkpoint_stack.top()));
501 }
502
503 // Sanity check of tree snapshots.
504 if (hint.stateBefore != tree_roots) {
505 vinfo("Hint tree snapshots: ", to_string(hint.stateBefore));
506 vinfo("Current tree roots: ", to_string(tree_roots));
507 throw std::runtime_error(format("[revert_checkpoint@",
509 "] Hint tree snapshots do not match the current tree roots."));
510 }
511
512 checkpoint_stack.pop();
513
514 // Sanity check.
515 if (hint.newCheckpointId != checkpoint_stack.top()) {
516 throw std::runtime_error(format("[revert_checkpoint@",
518 "] New checkpoint id does not match the current checkpoint id: ",
519 hint.newCheckpointId,
520 " != ",
521 checkpoint_stack.top()));
522 }
523
524 // Evolve trees.
525 tree_roots = hint.stateAfter;
526
527 debug("[revert_checkpoint@",
529 "] Checkpoint evolved ",
530 hint.oldCheckpointId,
531 " -> ",
532 hint.newCheckpointId);
533
535}
536
538 std::span<const FF> leaves)
539{
541 results.reserve(leaves.size());
542
543 // We need to process each leaf individually because we need the sibling path after insertion, to be able to
544 // constraint the insertion.
545 // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13380): This can be changed if the world state
546 // appendLeaves returns the sibling paths.
547 for (const auto& leaf : leaves) {
548 results.push_back(appendLeafInternal(tree_id, leaf));
549 }
550
551 return results;
552}
553
555{
556 auto& tree_info = get_tree_info(tree_id);
557 auto size_before = tree_info.nextAvailableLeafIndex;
558 tree_info.nextAvailableLeafIndex += num_leaves;
559
560 debug("Padded tree ", get_tree_name(tree_id), " from size ", size_before, " to ", tree_info.nextAvailableLeafIndex);
561}
562
564{
565 auto tree_info = get_tree_info(tree_id);
566 AppendLeavesHintKey key = { tree_info, tree_id, { leaf } };
567 auto it = append_leaves_hints.find(key);
568 if (it == append_leaves_hints.end()) {
569 throw std::runtime_error(format("Append leaves hint not found for key (root: ",
570 tree_info.root,
571 ", size: ",
572 tree_info.nextAvailableLeafIndex,
573 ", tree: ",
574 get_tree_name(tree_id),
575 ", leaf: ",
576 leaf,
577 ")"));
578 }
579 const auto& stateAfter = it->second;
580
581 // Update the tree state based on the hint.
582 switch (tree_id) {
584 tree_roots.noteHashTree = stateAfter;
585 debug("Evolved state of NOTE_HASH_TREE: ",
587 " (size: ",
589 ")");
590 break;
592 tree_roots.l1ToL2MessageTree = stateAfter;
593 debug("Evolved state of L1_TO_L2_MESSAGE_TREE: ",
595 " (size: ",
597 ")");
598 break;
599 default:
600 throw std::runtime_error("append_leaves is only supported for NOTE_HASH_TREE and L1_TO_L2_MESSAGE_TREE");
601 }
602
603 // Get the sibling path for the newly inserted leaf.
604 return { .root = tree_info.root, .path = get_sibling_path(tree_id, tree_info.nextAvailableLeafIndex) };
605}
606
608{
609 return checkpoint_stack.top();
610}
611
612} // namespace bb::avm2::simulation
HintedRawContractDB(const ExecutionHints &hints)
std::optional< ContractInstance > get_contract_instance(const AztecAddress &address) const override
unordered_flat_map< ContractClassId, FF > bytecode_commitments
FF get_bytecode_commitment(const ContractClassId &class_id) const
std::optional< ContractClass > get_contract_class(const ContractClassId &class_id) const override
unordered_flat_map< ContractClassId, ContractClassHint > contract_classes
unordered_flat_map< AztecAddress, ContractInstanceHint > contract_instances
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, std::vector< FF > > AppendLeavesHintKey
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeafValue > SequentialInsertHintNullifierTreeKey
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, FF > GetPreviousValueIndexKey
unordered_flat_map< GetLeafValueKey, FF > get_leaf_value_hints
unordered_flat_map< uint32_t, RevertCheckpointHint > revert_checkpoint_hints
unordered_flat_map< SequentialInsertHintNullifierTreeKey, SequentialInsertHint< NullifierLeafValue > > sequential_insert_hints_nullifier_tree
GetLowIndexedLeafResponse get_low_indexed_leaf(MerkleTreeId tree_id, const FF &value) const override
unordered_flat_map< AppendLeavesHintKey, AppendOnlyTreeSnapshot > append_leaves_hints
SiblingPath get_sibling_path(MerkleTreeId tree_id, index_t leaf_index) const override
unordered_flat_map< uint32_t, CommitCheckpointHint > commit_checkpoint_hints
unordered_flat_map< GetSiblingPathKey, SiblingPath > get_sibling_path_hints
SequentialInsertionResult< NullifierLeafValue > insert_indexed_leaves_nullifier_tree(const NullifierLeafValue &leaf_value) override
unordered_flat_map< uint32_t, CreateCheckpointHint > create_checkpoint_hints
std::vector< AppendLeafResult > append_leaves(MerkleTreeId tree_id, std::span< const FF > leaves) override
AppendLeafResult appendLeafInternal(MerkleTreeId tree_id, const FF &leaf)
IndexedLeaf< PublicDataLeafValue > get_leaf_preimage_public_data_tree(index_t leaf_index) const override
IndexedLeaf< NullifierLeafValue > get_leaf_preimage_nullifier_tree(index_t leaf_index) const override
FF get_leaf_value(MerkleTreeId tree_id, index_t leaf_index) const override
unordered_flat_map< GetLeafPreimageKey, IndexedLeaf< NullifierLeafValue > > get_leaf_preimage_hints_nullifier_tree
unordered_flat_map< SequentialInsertHintPublicDataTreeKey, SequentialInsertHint< PublicDataLeafValue > > sequential_insert_hints_public_data_tree
HintedRawMerkleDB(const ExecutionHints &hints)
unordered_flat_map< GetLeafPreimageKey, IndexedLeaf< PublicDataLeafValue > > get_leaf_preimage_hints_public_data_tree
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, index_t > GetLeafValueKey
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, index_t > GetSiblingPathKey
std::tuple< AppendOnlyTreeSnapshot, index_t > GetLeafPreimageKey
uint32_t get_checkpoint_id() const override
std::tuple< AppendOnlyTreeSnapshot, MerkleTreeId, PublicDataLeafValue > SequentialInsertHintPublicDataTreeKey
SequentialInsertionResult< PublicDataLeafValue > insert_indexed_leaves_public_data_tree(const PublicDataLeafValue &leaf_value) override
unordered_flat_map< GetPreviousValueIndexKey, GetLowIndexedLeafResponse > get_previous_value_index_hints
const AppendOnlyTreeSnapshot & get_tree_info(MerkleTreeId tree_id) const
void pad_tree(MerkleTreeId tree_id, size_t num_leaves) override
std::string format(Args... args)
Definition log.hpp:20
void debug(Args... args)
Definition log.hpp:59
void vinfo(Args... args)
Definition log.hpp:76
::bb::crypto::merkle_tree::fr_sibling_path SiblingPath
std::string to_string(AddressingEventError e)
::bb::crypto::merkle_tree::index_t index_t
FF ContractClassId
AvmFlavorSettings::FF FF
Definition field.hpp:10
@ L1_TO_L2_MESSAGE_TREE
Definition types.hpp:22
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::string to_string(bb::avm2::ValueTag tag)
std::vector< RevertCheckpointHint > revertCheckpointHints
std::vector< SequentialInsertHint< crypto::merkle_tree::NullifierLeafValue > > sequentialInsertHintsNullifierTree
std::vector< ContractClassHint > contractClasses
std::vector< GetPreviousValueIndexHint > getPreviousValueIndexHints
std::vector< AppendLeavesHint > appendLeavesHints
std::vector< GetLeafPreimageHint< crypto::merkle_tree::IndexedLeaf< crypto::merkle_tree::NullifierLeafValue > > > getLeafPreimageHintsNullifierTree
std::vector< CommitCheckpointHint > commitCheckpointHints
std::vector< SequentialInsertHint< crypto::merkle_tree::PublicDataLeafValue > > sequentialInsertHintsPublicDataTree
std::vector< GetSiblingPathHint > getSiblingPathHints
std::vector< GetLeafValueHint > getLeafValueHints
std::vector< GetLeafPreimageHint< crypto::merkle_tree::IndexedLeaf< crypto::merkle_tree::PublicDataLeafValue > > > getLeafPreimageHintsPublicDataTree
std::vector< ContractInstanceHint > contractInstances
std::vector< BytecodeCommitmentHint > bytecodeCommitments
std::vector< CreateCheckpointHint > createCheckpointHints
AffinePoint nullifier_key
AppendOnlyTreeSnapshot noteHashTree
AppendOnlyTreeSnapshot nullifierTree
AppendOnlyTreeSnapshot l1ToL2MessageTree
AppendOnlyTreeSnapshot publicDataTree
std::vector< crypto::merkle_tree::LeafUpdateWitnessData< LeafValueType > > low_leaf_witness_data
std::vector< crypto::merkle_tree::LeafUpdateWitnessData< LeafValueType > > insertion_witness_data