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
14
15namespace bb::avm2::simulation {
16
17namespace {
18
19std::string to_string(const TreeSnapshots& snapshots)
20{
21 return format("PUBLIC_DATA_TREE: ",
22 snapshots.publicDataTree,
23 "\nNULLIFIER_TREE: ",
24 snapshots.nullifierTree,
25 "\nNOTE_HASH_TREE: ",
26 snapshots.noteHashTree,
27 "\nL1_TO_L2_MESSAGE_TREE: ",
28 snapshots.l1ToL2MessageTree);
29}
30
31std::string get_tree_name(world_state::MerkleTreeId tree_id)
32{
33 switch (tree_id) {
35 return "PUBLIC_DATA_TREE";
37 return "NULLIFIER_TREE";
39 return "NOTE_HASH_TREE";
41 return "L1_TO_L2_MESSAGE_TREE";
43 return "ARCHIVE";
44 }
45
46 return "UNKNOWN"; // To make GCC happy.
47}
48
49// We need this helper to avoid having const and non-const versions methods in the class.
50auto& get_tree_info_helper(world_state::MerkleTreeId tree_id, auto& tree_roots)
51{
52 switch (tree_id) {
54 return tree_roots.nullifierTree;
56 return tree_roots.publicDataTree;
58 return tree_roots.noteHashTree;
60 return tree_roots.l1ToL2MessageTree;
61 default:
62 throw std::runtime_error("AVM cannot process tree id: " + std::to_string(static_cast<uint64_t>(tree_id)));
63 }
64}
65
66} // namespace
67
68// HintedRawContractDB starts.
70{
71 BB_BENCH_NAME("HintedRawContractDB::HintedRawContractDB");
72
73 vinfo("Initializing HintedRawContractDB with...",
74 "\n * contractInstances: ",
75 hints.contractInstances.size(),
76 "\n * contractClasses: ",
77 hints.contractClasses.size(),
78 "\n * bytecodeCommitments: ",
79 hints.bytecodeCommitments.size());
80
81 for (const auto& contract_instance_hint : hints.contractInstances) {
82 // TODO(fcarreiro): We are currently generating duplicates in TS.
83 // assert(!contract_instances.contains(contract_instance_hint.address));
84 contract_instances[contract_instance_hint.address] = contract_instance_hint;
85 }
86
87 for (const auto& contract_class_hint : hints.contractClasses) {
88 // TODO(fcarreiro): We are currently generating duplicates in TS.
89 // assert(!contract_classes.contains(contract_class_hint.classId));
90 contract_classes[contract_class_hint.classId] = contract_class_hint;
91 }
92
93 for (const auto& bytecode_commitment_hint : hints.bytecodeCommitments) {
94 // TODO(fcarreiro): We are currently generating duplicates in TS.
95 // assert(!bytecode_commitments.contains(bytecode_commitment_hint.classId));
96 bytecode_commitments[bytecode_commitment_hint.classId] = bytecode_commitment_hint.commitment;
97 }
98}
99
101{
102 auto it = contract_instances.find(address);
103 // If we don't find the instance hint, this is not a catastrohic failure. It means that on the TS side,
104 // the instance was also not found, and should be handled.
105 if (it == contract_instances.end()) {
106 vinfo("Contract instance not found: ", address);
107 return std::nullopt;
108 }
109 const auto& contract_instance_hint = it->second;
110
112 .salt = contract_instance_hint.salt,
113 .deployer_addr = contract_instance_hint.deployer,
114 .current_class_id = contract_instance_hint.currentContractClassId,
115 .original_class_id = contract_instance_hint.originalContractClassId,
116 .initialisation_hash = contract_instance_hint.initializationHash,
117 .public_keys =
119 .nullifier_key = contract_instance_hint.publicKeys.masterNullifierPublicKey,
120 .incoming_viewing_key = contract_instance_hint.publicKeys.masterIncomingViewingPublicKey,
121 .outgoing_viewing_key = contract_instance_hint.publicKeys.masterOutgoingViewingPublicKey,
122 .tagging_key = contract_instance_hint.publicKeys.masterTaggingPublicKey,
123 },
124 });
125}
126
128{
129 auto it = contract_classes.find(class_id);
130 // If we don't find the class hint, this is not a catastrohic failure. It means that on the TS side,
131 // the class was also not found, and should be handled.
132 if (it == contract_classes.end()) {
133 vinfo("Contract class not found: ", class_id);
134 return std::nullopt;
135 }
136 const auto& contract_class_hint = it->second;
137
139 .artifact_hash = contract_class_hint.artifactHash,
140 .private_function_root = contract_class_hint.privateFunctionsRoot,
141 // We choose to embed the bytecode commitment in the contract class.
142 .public_bytecode_commitment = get_bytecode_commitment(class_id),
143 .packed_bytecode = contract_class_hint.packedBytecode,
144 });
145}
146
152
153// Hinted MerkleDB starts.
155 : tree_roots(hints.startingTreeRoots)
156{
157 BB_BENCH_NAME("HintedRawMerkleDB::HintedRawMerkleDB");
158
159 vinfo("Initializing HintedRawMerkleDB with...",
160 "\n * get_sibling_path_hints: ",
161 hints.getSiblingPathHints.size(),
162 "\n * get_previous_value_index_hints: ",
163 hints.getPreviousValueIndexHints.size(),
164 "\n * get_leaf_preimage_hints_public_data_tree: ",
166 "\n * get_leaf_preimage_hints_nullifier_tree: ",
168 "\n * get_leaf_value_hints: ",
169 hints.getLeafValueHints.size(),
170 "\n * sequential_insert_hints_public_data_tree: ",
172 "\n * sequential_insert_hints_nullifier_tree: ",
174 "\n * append_leaves_hints: ",
175 hints.appendLeavesHints.size(),
176 "\n * create_checkpoint_hints: ",
177 hints.createCheckpointHints.size(),
178 "\n * commit_checkpoint_hints: ",
179 hints.commitCheckpointHints.size(),
180 "\n * revert_checkpoint_hints: ",
181 hints.revertCheckpointHints.size());
182 debug("Initializing HintedRawMerkleDB with snapshots...\n", to_string(tree_roots));
183
184 for (const auto& get_sibling_path_hint : hints.getSiblingPathHints) {
185 GetSiblingPathKey key = { get_sibling_path_hint.hintKey,
186 get_sibling_path_hint.treeId,
187 get_sibling_path_hint.index };
188 get_sibling_path_hints[key] = get_sibling_path_hint.path;
189 }
190
191 for (const auto& get_previous_value_index_hint : hints.getPreviousValueIndexHints) {
192 GetPreviousValueIndexKey key = { get_previous_value_index_hint.hintKey,
193 get_previous_value_index_hint.treeId,
194 get_previous_value_index_hint.value };
196 get_previous_value_index_hint.alreadyPresent,
197 get_previous_value_index_hint.index,
198 };
199 }
200
201 for (const auto& get_leaf_preimage_hint : hints.getLeafPreimageHintsPublicDataTree) {
202 GetLeafPreimageKey key = { get_leaf_preimage_hint.hintKey, get_leaf_preimage_hint.index };
203 get_leaf_preimage_hints_public_data_tree[key] = get_leaf_preimage_hint.leafPreimage;
204 }
205
206 for (const auto& get_leaf_preimage_hint : hints.getLeafPreimageHintsNullifierTree) {
207 GetLeafPreimageKey key = { get_leaf_preimage_hint.hintKey, get_leaf_preimage_hint.index };
208 get_leaf_preimage_hints_nullifier_tree[key] = get_leaf_preimage_hint.leafPreimage;
209 }
210
211 for (const auto& get_leaf_value_hint : hints.getLeafValueHints) {
212 GetLeafValueKey key = { get_leaf_value_hint.hintKey, get_leaf_value_hint.treeId, get_leaf_value_hint.index };
213 get_leaf_value_hints[key] = get_leaf_value_hint.value;
214 }
215
216 for (const auto& sequential_insert_hint : hints.sequentialInsertHintsPublicDataTree) {
217 SequentialInsertHintPublicDataTreeKey key = { sequential_insert_hint.hintKey,
218 sequential_insert_hint.treeId,
219 sequential_insert_hint.leaf };
220 sequential_insert_hints_public_data_tree[key] = sequential_insert_hint;
221 }
222
223 for (const auto& sequential_insert_hint : hints.sequentialInsertHintsNullifierTree) {
224 SequentialInsertHintNullifierTreeKey key = { sequential_insert_hint.hintKey,
225 sequential_insert_hint.treeId,
226 sequential_insert_hint.leaf };
227 sequential_insert_hints_nullifier_tree[key] = sequential_insert_hint;
228 }
229
230 for (const auto& append_leaves_hint : hints.appendLeavesHints) {
231 // Convert the span from the hint to a vector for the key
232 AppendLeavesHintKey key = { append_leaves_hint.hintKey, append_leaves_hint.treeId, append_leaves_hint.leaves };
233 append_leaves_hints[key] = append_leaves_hint.stateAfter;
234 }
235
236 for (const auto& create_checkpoint_hint : hints.createCheckpointHints) {
237 create_checkpoint_hints[create_checkpoint_hint.actionCounter] = create_checkpoint_hint;
238 }
239
240 for (const auto& commit_checkpoint_hint : hints.commitCheckpointHints) {
241 commit_checkpoint_hints[commit_checkpoint_hint.actionCounter] = commit_checkpoint_hint;
242 }
243
244 for (const auto& revert_checkpoint_hint : hints.revertCheckpointHints) {
245 revert_checkpoint_hints[revert_checkpoint_hint.actionCounter] = revert_checkpoint_hint;
246 }
247}
248
250{
251 return get_tree_info_helper(tree_id, tree_roots);
252}
253
255{
256 return get_tree_info_helper(tree_id, tree_roots);
257}
258
260{
261 auto tree_info = get_tree_info(tree_id);
262 GetSiblingPathKey key = { tree_info, tree_id, leaf_index };
263 auto it = get_sibling_path_hints.find(key);
264 if (it == get_sibling_path_hints.end()) {
265 throw std::runtime_error(format("Sibling path not found for key (root: ",
266 tree_info.root,
267 ", size: ",
268 tree_info.nextAvailableLeafIndex,
269 ", tree: ",
270 get_tree_name(tree_id),
271 ", leaf_index: ",
272 leaf_index,
273 ")"));
274 }
275 return it->second;
276}
277
279 const FF& value) const
280{
281 auto tree_info = get_tree_info(tree_id);
282 GetPreviousValueIndexKey key = { tree_info, tree_id, value };
283 auto it = get_previous_value_index_hints.find(key);
284 if (it == get_previous_value_index_hints.end()) {
285 throw std::runtime_error(format("Low indexed leaf not found for key (root: ",
286 tree_info.root,
287 ", size: ",
288 tree_info.nextAvailableLeafIndex,
289 ", tree: ",
290 get_tree_name(tree_id),
291 ", value: ",
292 value,
293 ")"));
294 }
295 return it->second;
296}
297
299{
300 auto tree_info = get_tree_info(tree_id);
301 GetLeafValueKey key = { tree_info, tree_id, leaf_index };
302 auto it = get_leaf_value_hints.find(key);
303 return it == get_leaf_value_hints.end() ? 0 : it->second;
304}
305
307{
309 GetLeafPreimageKey key = { tree_info, leaf_index };
312 throw std::runtime_error(format("Leaf preimage (PUBLIC_DATA_TREE) not found for key (root: ",
313 tree_info.root,
314 ", size: ",
315 tree_info.nextAvailableLeafIndex,
316 ", leaf_index: ",
317 leaf_index,
318 ")"));
319 }
320 return it->second;
321}
322
324{
326 GetLeafPreimageKey key = { tree_info, leaf_index };
329 throw std::runtime_error(format("Leaf preimage (NULLIFIER_TREE) not found for key (root: ",
330 tree_info.root,
331 ", size: ",
332 tree_info.nextAvailableLeafIndex,
333 ", leaf_index: ",
334 leaf_index,
335 ")"));
336 }
337 return it->second;
338}
339
341 const PublicDataLeafValue& leaf_value)
342{
347 throw std::runtime_error(format("Sequential insert hint (PUBLIC_DATA_TREE) not found for key (root: ",
348 tree_info.root,
349 ", size: ",
350 tree_info.nextAvailableLeafIndex,
351 ", leaf_value: ",
352 leaf_value,
353 ")"));
354 }
355 const auto& hint = it->second;
356
358
359 // Convert low leaves witness data
360 result.low_leaf_witness_data.emplace_back(
361 hint.lowLeavesWitnessData.leaf, hint.lowLeavesWitnessData.index, hint.lowLeavesWitnessData.path);
362
363 // Convert insertion witness data
364 result.insertion_witness_data.emplace_back(
365 hint.insertionWitnessData.leaf, hint.insertionWitnessData.index, hint.insertionWitnessData.path);
366
367 // Evolve state.
368 tree_roots.publicDataTree = hint.stateAfter;
369
370 debug("Evolved state of PUBLIC_DATA_TREE: ",
372 " (size: ",
374 ")");
375
376 return result;
377}
378
380 const NullifierLeafValue& leaf_value)
381{
386 throw std::runtime_error(format("Sequential insert hint (NULLIFIER_TREE) not found for key (root: ",
387 tree_info.root,
388 ", size: ",
389 tree_info.nextAvailableLeafIndex,
390 ", leaf_value: ",
391 leaf_value,
392 ")"));
393 }
394 const auto& hint = it->second;
395
397
398 // Convert low leaves witness data
399 result.low_leaf_witness_data.emplace_back(
400 hint.lowLeavesWitnessData.leaf, hint.lowLeavesWitnessData.index, hint.lowLeavesWitnessData.path);
401
402 // Convert insertion witness data
403 result.insertion_witness_data.emplace_back(
404 hint.insertionWitnessData.leaf, hint.insertionWitnessData.index, hint.insertionWitnessData.path);
405
406 // Evolve state.
407 tree_roots.nullifierTree = hint.stateAfter;
408
409 debug("Evolved state of NULLIFIER_TREE: ",
411 " (size: ",
413 ")");
414
415 return result;
416}
417
419{
421 if (it == create_checkpoint_hints.end()) {
422 throw std::runtime_error(
423 format("[create_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
424 }
425 const auto& hint = it->second;
426
427 // Sanity check.
428 if (hint.oldCheckpointId != checkpoint_stack.top()) {
429 throw std::runtime_error(format("[create_checkpoint@",
431 "] Old checkpoint id does not match the current checkpoint id: ",
432 hint.oldCheckpointId,
433 " != ",
434 checkpoint_stack.top()));
435 }
436
437 debug("[create_checkpoint@",
439 "] Checkpoint evolved ",
440 hint.oldCheckpointId,
441 " -> ",
442 hint.newCheckpointId);
443
444 checkpoint_stack.push(hint.newCheckpointId);
446}
447
449{
451 if (it == commit_checkpoint_hints.end()) {
452 throw std::runtime_error(
453 format("[commit_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
454 }
455 const auto& hint = it->second;
456
457 // Sanity check.
458 if (hint.oldCheckpointId != checkpoint_stack.top()) {
459 throw std::runtime_error(format("[commit_checkpoint@",
461 "] Old checkpoint id does not match the current checkpoint id: ",
462 hint.oldCheckpointId,
463 " != ",
464 checkpoint_stack.top()));
465 }
466
467 checkpoint_stack.pop();
468
469 // Sanity check.
470 if (hint.newCheckpointId != checkpoint_stack.top()) {
471 throw std::runtime_error(format("[commit_checkpoint@",
473 "] New checkpoint id does not match the current checkpoint id: ",
474 hint.newCheckpointId,
475 " != ",
476 checkpoint_stack.top()));
477 }
478
479 debug("[commit_checkpoint@",
481 "] Checkpoint evolved ",
482 hint.oldCheckpointId,
483 " -> ",
484 hint.newCheckpointId);
485
487}
488
490{
492 if (it == revert_checkpoint_hints.end()) {
493 throw std::runtime_error(
494 format("[revert_checkpoint@", checkpoint_action_counter, "] Hint not found for action counter!"));
495 }
496 const auto& hint = it->second;
497
498 // Sanity check of checkpoint stack.
499 if (hint.oldCheckpointId != checkpoint_stack.top()) {
500 throw std::runtime_error(format("[revert_checkpoint@",
502 "] Old checkpoint id does not match the current checkpoint id: ",
503 hint.oldCheckpointId,
504 " != ",
505 checkpoint_stack.top()));
506 }
507
508 // Sanity check of tree snapshots.
509 if (hint.stateBefore != tree_roots) {
510 vinfo("Hint tree snapshots: ", to_string(hint.stateBefore));
511 vinfo("Current tree roots: ", to_string(tree_roots));
512 throw std::runtime_error(format("[revert_checkpoint@",
514 "] Hint tree snapshots do not match the current tree roots."));
515 }
516
517 checkpoint_stack.pop();
518
519 // Sanity check.
520 if (hint.newCheckpointId != checkpoint_stack.top()) {
521 throw std::runtime_error(format("[revert_checkpoint@",
523 "] New checkpoint id does not match the current checkpoint id: ",
524 hint.newCheckpointId,
525 " != ",
526 checkpoint_stack.top()));
527 }
528
529 // Evolve trees.
530 tree_roots = hint.stateAfter;
531
532 debug("[revert_checkpoint@",
534 "] Checkpoint evolved ",
535 hint.oldCheckpointId,
536 " -> ",
537 hint.newCheckpointId);
538
540}
541
543 std::span<const FF> leaves)
544{
546 results.reserve(leaves.size());
547
548 // We need to process each leaf individually because we need the sibling path after insertion, to be able to
549 // constraint the insertion.
550 // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13380): This can be changed if the world state
551 // appendLeaves returns the sibling paths.
552 for (const auto& leaf : leaves) {
553 results.push_back(appendLeafInternal(tree_id, leaf));
554 }
555
556 return results;
557}
558
560{
561 auto& tree_info = get_tree_info(tree_id);
562 auto size_before = tree_info.nextAvailableLeafIndex;
563 (void)size_before; // To please the compiler.
564 tree_info.nextAvailableLeafIndex += num_leaves;
565
566 debug("Padded tree ", get_tree_name(tree_id), " from size ", size_before, " to ", tree_info.nextAvailableLeafIndex);
567}
568
570{
571 auto tree_info = get_tree_info(tree_id);
572 AppendLeavesHintKey key = { tree_info, tree_id, { leaf } };
573 auto it = append_leaves_hints.find(key);
574 if (it == append_leaves_hints.end()) {
575 throw std::runtime_error(format("Append leaves hint not found for key (root: ",
576 tree_info.root,
577 ", size: ",
578 tree_info.nextAvailableLeafIndex,
579 ", tree: ",
580 get_tree_name(tree_id),
581 ", leaf: ",
582 leaf,
583 ")"));
584 }
585 const auto& stateAfter = it->second;
586
587 // Update the tree state based on the hint.
588 switch (tree_id) {
590 tree_roots.noteHashTree = stateAfter;
591 debug("Evolved state of NOTE_HASH_TREE: ",
593 " (size: ",
595 ")");
596 break;
598 tree_roots.l1ToL2MessageTree = stateAfter;
599 debug("Evolved state of L1_TO_L2_MESSAGE_TREE: ",
601 " (size: ",
603 ")");
604 break;
605 default:
606 throw std::runtime_error("append_leaves is only supported for NOTE_HASH_TREE and L1_TO_L2_MESSAGE_TREE");
607 }
608
609 // Get the sibling path for the newly inserted leaf.
610 return { .root = tree_info.root, .path = get_sibling_path(tree_id, tree_info.nextAvailableLeafIndex) };
611}
612
614{
615 return checkpoint_stack.top();
616}
617
618} // namespace bb::avm2::simulation
#define BB_BENCH_NAME(name)
Definition bb_bench.hpp:218
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:21
#define vinfo(...)
Definition log.hpp:79
#define debug(...)
Definition log.hpp:61
::bb::crypto::merkle_tree::fr_sibling_path SiblingPath
Definition db.hpp:27
::bb::crypto::merkle_tree::index_t index_t
Definition db.hpp:28
std::string to_string(const std::array< FF, N > &arr)
Definition stringify.hpp:29
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