@aztec/simulator 0.64.0 → 0.65.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/avm/avm_memory_types.d.ts +3 -1
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +22 -24
- package/dest/avm/avm_simulator.d.ts +5 -1
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +16 -9
- package/dest/avm/avm_tree.d.ts +56 -7
- package/dest/avm/avm_tree.d.ts.map +1 -1
- package/dest/avm/avm_tree.js +155 -82
- package/dest/avm/errors.d.ts +19 -0
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +29 -1
- package/dest/avm/journal/journal.d.ts +8 -7
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +47 -29
- package/dest/avm/journal/nullifiers.d.ts +11 -58
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +27 -107
- package/dest/avm/opcodes/contract.d.ts +2 -2
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +4 -4
- package/dest/avm/opcodes/control_flow.d.ts +2 -2
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +4 -4
- package/dest/avm/opcodes/environment_getters.d.ts +2 -2
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +4 -4
- package/dest/avm/opcodes/instruction.d.ts +1 -1
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +1 -1
- package/dest/avm/opcodes/memory.d.ts +4 -4
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +17 -13
- package/dest/avm/opcodes/misc.d.ts +2 -2
- package/dest/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/avm/opcodes/misc.js +4 -4
- package/dest/avm/serialization/buffer_cursor.d.ts +2 -0
- package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/avm/serialization/buffer_cursor.js +8 -3
- package/dest/avm/serialization/bytecode_serialization.d.ts +1 -0
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +27 -13
- package/dest/avm/serialization/instruction_serialization.d.ts +1 -0
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +9 -6
- package/dest/avm/test_utils.d.ts.map +1 -1
- package/dest/avm/test_utils.js +3 -2
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +3 -2
- package/dest/public/dual_side_effect_trace.d.ts +2 -2
- package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
- package/dest/public/dual_side_effect_trace.js +7 -7
- package/dest/public/enqueued_call_side_effect_trace.d.ts +8 -23
- package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
- package/dest/public/enqueued_call_side_effect_trace.js +31 -92
- package/dest/public/executor_metrics.d.ts +4 -2
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +20 -3
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +66 -35
- package/dest/public/public_db_sources.d.ts +3 -1
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +26 -11
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +12 -5
- package/dest/public/public_tx_context.d.ts +5 -6
- package/dest/public/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_context.js +19 -17
- package/dest/public/public_tx_simulator.d.ts +13 -2
- package/dest/public/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator.js +263 -217
- package/dest/public/side_effect_trace.d.ts +2 -2
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +8 -6
- package/dest/public/side_effect_trace_interface.d.ts +2 -2
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/transitional_adapters.d.ts.map +1 -1
- package/dest/public/transitional_adapters.js +2 -6
- package/package.json +9 -9
- package/src/avm/avm_memory_types.ts +26 -24
- package/src/avm/avm_simulator.ts +20 -13
- package/src/avm/avm_tree.ts +196 -93
- package/src/avm/errors.ts +31 -0
- package/src/avm/journal/journal.ts +61 -47
- package/src/avm/journal/nullifiers.ts +29 -121
- package/src/avm/opcodes/contract.ts +2 -2
- package/src/avm/opcodes/control_flow.ts +2 -2
- package/src/avm/opcodes/environment_getters.ts +2 -2
- package/src/avm/opcodes/instruction.ts +1 -1
- package/src/avm/opcodes/memory.ts +15 -10
- package/src/avm/opcodes/misc.ts +2 -2
- package/src/avm/serialization/buffer_cursor.ts +9 -3
- package/src/avm/serialization/bytecode_serialization.ts +29 -13
- package/src/avm/serialization/instruction_serialization.ts +12 -6
- package/src/avm/test_utils.ts +9 -1
- package/src/common/errors.ts +2 -1
- package/src/public/dual_side_effect_trace.ts +6 -30
- package/src/public/enqueued_call_side_effect_trace.ts +35 -154
- package/src/public/executor_metrics.ts +23 -1
- package/src/public/fixtures/index.ts +97 -43
- package/src/public/public_db_sources.ts +29 -15
- package/src/public/public_processor.ts +11 -4
- package/src/public/public_tx_context.ts +21 -23
- package/src/public/public_tx_simulator.ts +45 -8
- package/src/public/side_effect_trace.ts +7 -9
- package/src/public/side_effect_trace_interface.ts +2 -4
- package/src/public/transitional_adapters.ts +0 -11
package/dest/avm/avm_tree.js
CHANGED
|
@@ -2,6 +2,7 @@ import { MerkleTreeId, getTreeHeight } from '@aztec/circuit-types';
|
|
|
2
2
|
import { NullifierLeafPreimage, PublicDataTreeLeafPreimage } from '@aztec/circuits.js';
|
|
3
3
|
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
+
import { strict as assert } from 'assert';
|
|
5
6
|
import cloneDeep from 'lodash.clonedeep';
|
|
6
7
|
/****************************************************/
|
|
7
8
|
/****** The AvmEphemeralForest Class ****************/
|
|
@@ -95,8 +96,13 @@ export class AvmEphemeralForest {
|
|
|
95
96
|
// This only works for the public data tree
|
|
96
97
|
const treeId = MerkleTreeId.PUBLIC_DATA_TREE;
|
|
97
98
|
const tree = this.treeMap.get(treeId);
|
|
98
|
-
const
|
|
99
|
+
const [leafOrLowLeafInfo, pathAbsentInEphemeralTree] = await this._getLeafOrLowLeafInfo(treeId, slot);
|
|
100
|
+
const { preimage, index, update } = leafOrLowLeafInfo;
|
|
99
101
|
const siblingPath = await this.getSiblingPath(treeId, index);
|
|
102
|
+
if (pathAbsentInEphemeralTree) {
|
|
103
|
+
// Since we have never seen this before - we should insert it into our tree as it is about to be updated.
|
|
104
|
+
this.treeMap.get(treeId).insertSiblingPath(index, siblingPath);
|
|
105
|
+
}
|
|
100
106
|
if (update) {
|
|
101
107
|
const updatedPreimage = cloneDeep(preimage);
|
|
102
108
|
const existingPublicDataSiblingPath = siblingPath;
|
|
@@ -154,7 +160,7 @@ export class AvmEphemeralForest {
|
|
|
154
160
|
const foundIndex = existingKeyVector.findIndex(x => x[1] === index[i]);
|
|
155
161
|
if (foundIndex === -1) {
|
|
156
162
|
// New element, we splice it into the correct location
|
|
157
|
-
const spliceIndex =
|
|
163
|
+
const spliceIndex = indexOrNextLowestInArray(keys[i], existingKeyVector.map(x => x[0])) + 1;
|
|
158
164
|
existingKeyVector.splice(spliceIndex, 0, [keys[i], index[i]]);
|
|
159
165
|
}
|
|
160
166
|
else {
|
|
@@ -171,11 +177,14 @@ export class AvmEphemeralForest {
|
|
|
171
177
|
async appendNullifier(nullifier) {
|
|
172
178
|
const treeId = MerkleTreeId.NULLIFIER_TREE;
|
|
173
179
|
const tree = this.treeMap.get(treeId);
|
|
174
|
-
const
|
|
180
|
+
const [leafOrLowLeafInfo, pathAbsentInEphemeralTree] = await this._getLeafOrLowLeafInfo(treeId, nullifier);
|
|
181
|
+
const { preimage, index, update } = leafOrLowLeafInfo;
|
|
175
182
|
const siblingPath = await this.getSiblingPath(treeId, index);
|
|
176
|
-
if (
|
|
177
|
-
|
|
183
|
+
if (pathAbsentInEphemeralTree) {
|
|
184
|
+
// Since we have never seen this before - we should insert it into our tree as it is about to be updated.
|
|
185
|
+
this.treeMap.get(treeId).insertSiblingPath(index, siblingPath);
|
|
178
186
|
}
|
|
187
|
+
assert(!update, 'Nullifier already exists in the tree. Cannot update a nullifier!');
|
|
179
188
|
// We are writing a new entry
|
|
180
189
|
const insertionIndex = tree.leafCount;
|
|
181
190
|
const updatedLowNullifier = cloneDeep(preimage);
|
|
@@ -222,17 +231,14 @@ export class AvmEphemeralForest {
|
|
|
222
231
|
updates.set(index, preimage);
|
|
223
232
|
}
|
|
224
233
|
/**
|
|
225
|
-
* This is wrapper around treeId to get values in the indexedUpdates map
|
|
234
|
+
* This is wrapper around treeId to get values in the indexedUpdates map.
|
|
235
|
+
* Should only be called if we know the value exists.
|
|
226
236
|
*/
|
|
227
|
-
|
|
237
|
+
getIndexedUpdate(treeId, index) {
|
|
228
238
|
const updates = this.indexedUpdates.get(treeId);
|
|
229
|
-
|
|
230
|
-
throw new Error('No updates found');
|
|
231
|
-
}
|
|
239
|
+
assert(updates !== undefined, `No updates exist in the ephemeral ${MerkleTreeId[treeId]} tree.`);
|
|
232
240
|
const preimage = updates.get(index);
|
|
233
|
-
|
|
234
|
-
throw new Error('No updates found');
|
|
235
|
-
}
|
|
241
|
+
assert(updates !== undefined, `No update exists in the ephemeral ${MerkleTreeId[treeId]} tree for leafIndex ${index}.`);
|
|
236
242
|
return preimage;
|
|
237
243
|
}
|
|
238
244
|
/**
|
|
@@ -245,79 +251,128 @@ export class AvmEphemeralForest {
|
|
|
245
251
|
}
|
|
246
252
|
return updates.has(index);
|
|
247
253
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
254
|
+
/**
|
|
255
|
+
* Get the leaf or low leaf preimage and its index in the indexed tree given a key (slot or nullifier value).
|
|
256
|
+
* If the key is not found in the tree, it does an external lookup to the underlying merkle DB.
|
|
257
|
+
* @param treeId - The tree we are looking up in
|
|
258
|
+
* @param key - The key for which we are look up the leaf or low leaf for.
|
|
259
|
+
* @param T - The type of the preimage (PublicData or Nullifier)
|
|
260
|
+
* @returns The leaf or low leaf info (preimage & leaf index).
|
|
261
|
+
*/
|
|
262
|
+
async getLeafOrLowLeafInfo(treeId, key) {
|
|
263
|
+
const [leafOrLowLeafInfo, _] = await this._getLeafOrLowLeafInfo(treeId, key);
|
|
264
|
+
return leafOrLowLeafInfo;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Internal helper to get the leaf or low leaf preimage and its index in the indexed tree given a key (slot or nullifier value).
|
|
268
|
+
* If the key is not found in the tree, it does an external lookup to the underlying merkle DB.
|
|
269
|
+
* Indicates whethe the sibling path is absent in the ephemeral tree.
|
|
270
|
+
* @param treeId - The tree we are looking up in
|
|
271
|
+
* @param key - The key for which we are look up the leaf or low leaf for.
|
|
272
|
+
* @param T - The type of the preimage (PublicData or Nullifier)
|
|
273
|
+
* @returns [
|
|
274
|
+
* preimageWitness - The leaf or low leaf info (preimage & leaf index),
|
|
275
|
+
* pathAbsentInEphemeralTree - whether its sibling path is absent in the ephemeral tree (useful during insertions)
|
|
276
|
+
* ]
|
|
277
|
+
*/
|
|
278
|
+
async _getLeafOrLowLeafInfo(treeId, key) {
|
|
279
|
+
const bigIntKey = key.toBigInt();
|
|
280
|
+
// In this function, "min" refers to the leaf with the
|
|
281
|
+
// largest key <= the specified key in the indexedUpdates.
|
|
282
|
+
// In other words, the leaf with the "next lowest" key in indexedUpdates.
|
|
283
|
+
// First, search the indexed updates (no DB fallback) to find
|
|
284
|
+
// the leafIndex of the leaf with the largest key <= the specified key.
|
|
285
|
+
const minIndexedLeafIndex = this._getLeafIndexOrNextLowestInIndexedUpdates(treeId, key);
|
|
286
|
+
if (minIndexedLeafIndex === -1n) {
|
|
287
|
+
// No leaf is present in the indexed updates that is <= the key,
|
|
288
|
+
// so retrieve the leaf or low leaf from the underlying DB.
|
|
289
|
+
const leafOrLowLeafPreimage = await this._getLeafOrLowLeafWitnessInExternalDb(treeId, bigIntKey);
|
|
290
|
+
return [leafOrLowLeafPreimage, /*pathAbsentInEphemeralTree=*/ true];
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// A leaf was found in the indexed updates that is <= the key
|
|
294
|
+
const minPreimage = this.getIndexedUpdate(treeId, minIndexedLeafIndex);
|
|
295
|
+
if (minPreimage.getKey() === bigIntKey) {
|
|
296
|
+
// the index found is an exact match, no need to search further
|
|
297
|
+
const leafInfo = { preimage: minPreimage, index: minIndexedLeafIndex, update: true };
|
|
298
|
+
return [leafInfo, /*pathAbsentInEphemeralTree=*/ false];
|
|
259
299
|
}
|
|
260
300
|
else {
|
|
261
|
-
//
|
|
262
|
-
|
|
301
|
+
// We are starting with the leaf with largest key <= the specified key
|
|
302
|
+
// Starting at that "min leaf", search for specified key in both the indexed updates
|
|
303
|
+
// and the underlying DB. If not found, return its low leaf.
|
|
304
|
+
const [leafOrLowLeafInfo, pathAbsentInEphemeralTree] = await this._searchForLeafOrLowLeaf(treeId, bigIntKey, minPreimage, minIndexedLeafIndex);
|
|
305
|
+
// We did not find it - this is unexpected... the leaf OR low leaf should always be present
|
|
306
|
+
assert(leafOrLowLeafInfo !== undefined, 'Could not find leaf or low leaf. This should not happen!');
|
|
307
|
+
return [leafOrLowLeafInfo, pathAbsentInEphemeralTree];
|
|
263
308
|
}
|
|
264
309
|
}
|
|
265
|
-
// We either found key + 1 or start is now at the index of the largest element that we would have inserted key + 1
|
|
266
|
-
// Therefore start - 1 is the index of the element just below - note it can be -1 if the first element in the array is
|
|
267
|
-
// greater than the key
|
|
268
|
-
return start - 1;
|
|
269
310
|
}
|
|
270
311
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
312
|
+
* Helper to search for the leaf with the specified key in the indexedUpdates
|
|
313
|
+
* and return its leafIndex.
|
|
314
|
+
* If not present, return the leafIndex of the largest leaf <= the specified key
|
|
315
|
+
* (the leafIndex of the next lowest key).
|
|
316
|
+
*
|
|
317
|
+
* If no entry exists in indexedUpdates <= the specified key, return -1.
|
|
318
|
+
* @returns - The leafIndex of the leaf with the largest key <= the specified key.
|
|
277
319
|
*/
|
|
278
|
-
|
|
320
|
+
_getLeafIndexOrNextLowestInIndexedUpdates(treeId, key) {
|
|
279
321
|
const keyOrderedVector = this.indexedSortedKeys.get(treeId);
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
const [_, leafIndex] = keyOrderedVector[vectorIndex];
|
|
285
|
-
minPreimage = {
|
|
286
|
-
preimage: this.getIndexedUpdates(treeId, leafIndex),
|
|
287
|
-
index: leafIndex,
|
|
288
|
-
};
|
|
322
|
+
const indexInVector = indexOrNextLowestInArray(key, keyOrderedVector.map(x => x[0]));
|
|
323
|
+
if (indexInVector !== -1) {
|
|
324
|
+
const [_, leafIndex] = keyOrderedVector[indexInVector];
|
|
325
|
+
return leafIndex;
|
|
289
326
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
// If we don't have a first element or if that first element is already greater than the target key, we need to do an external lookup
|
|
294
|
-
// The low public data witness is in the previous tree
|
|
295
|
-
if (start === undefined || start.getKey() > key.toBigInt()) {
|
|
296
|
-
// This function returns the leaf index to the actual element if it exists or the leaf index to the low leaf otherwise
|
|
297
|
-
const { index, alreadyPresent } = (await this.treeDb.getPreviousValueIndex(treeId, bigIntKey));
|
|
298
|
-
const preimage = await this.treeDb.getLeafPreimage(treeId, index);
|
|
299
|
-
// Since we have never seen this before - we should insert it into our tree, as we know we will modify this leaf node
|
|
300
|
-
const siblingPath = await this.getSiblingPath(treeId, index);
|
|
301
|
-
// const siblingPath = (await this.treeDb.getSiblingPath(treeId, index)).toFields();
|
|
302
|
-
// Is it enough to just insert the sibling path without inserting the leaf? - now probably since we will update this low nullifier index in append
|
|
303
|
-
this.treeMap.get(treeId).insertSiblingPath(index, siblingPath);
|
|
304
|
-
const lowPublicDataPreimage = preimage;
|
|
305
|
-
return { preimage: lowPublicDataPreimage, index: index, update: alreadyPresent };
|
|
327
|
+
else {
|
|
328
|
+
// no leaf <= the specified key was found
|
|
329
|
+
return -1n;
|
|
306
330
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
//
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Query the external DB to get leaf if present, low leaf if absent
|
|
334
|
+
*/
|
|
335
|
+
async _getLeafOrLowLeafWitnessInExternalDb(treeId, key) {
|
|
336
|
+
// "key" is siloed slot (leafSlot) or siloed nullifier
|
|
337
|
+
const previousValueIndex = await this.treeDb.getPreviousValueIndex(treeId, key);
|
|
338
|
+
assert(previousValueIndex !== undefined, `${MerkleTreeId[treeId]} low leaf index should always be found (even if target leaf does not exist)`);
|
|
339
|
+
const { index: leafIndex, alreadyPresent } = previousValueIndex;
|
|
340
|
+
const leafPreimage = await this.treeDb.getLeafPreimage(treeId, leafIndex);
|
|
341
|
+
assert(leafPreimage !== undefined, `${MerkleTreeId[treeId]} low leaf preimage should never be undefined (even if target leaf does not exist)`);
|
|
342
|
+
return { preimage: leafPreimage, index: leafIndex, update: alreadyPresent };
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Search for the leaf for the specified key.
|
|
346
|
+
* Some leaf with key <= the specified key is expected to be present in the ephemeral tree's "indexed updates".
|
|
347
|
+
* While searching, this function bounces between our local indexedUpdates and the external DB.
|
|
348
|
+
*
|
|
349
|
+
* @param key - The key for which we are look up the leaf or low leaf for.
|
|
350
|
+
* @param minPreimage - The leaf with the largest key <= the specified key. Expected to be present in local indexedUpdates.
|
|
351
|
+
* @param minIndex - The index of the leaf with the largest key <= the specified key.
|
|
352
|
+
* @param T - The type of the preimage (PublicData or Nullifier)
|
|
353
|
+
* @returns [
|
|
354
|
+
* preimageWitness | undefined - The leaf or low leaf info (preimage & leaf index),
|
|
355
|
+
* pathAbsentInEphemeralTree - whether its sibling path is absent in the ephemeral tree (useful during insertions)
|
|
356
|
+
* ]
|
|
357
|
+
*
|
|
358
|
+
* @details We look for the low element by bouncing between our local indexedUpdates map or the external DB
|
|
359
|
+
* The conditions we are looking for are:
|
|
360
|
+
* (1) Exact Match: curr.nextKey == key (this is only valid for public data tree)
|
|
361
|
+
* (2) Sandwich Match: curr.nextKey > key and curr.key < key
|
|
362
|
+
* (3) Max Condition: curr.next_index == 0 and curr.key < key
|
|
363
|
+
* Note the min condition does not need to be handled since indexed trees are prefilled with at least the 0 element
|
|
364
|
+
*/
|
|
365
|
+
async _searchForLeafOrLowLeaf(treeId, key, minPreimage, minIndex) {
|
|
313
366
|
let found = false;
|
|
314
|
-
let curr = minPreimage
|
|
367
|
+
let curr = minPreimage;
|
|
315
368
|
let result = undefined;
|
|
316
369
|
// Temp to avoid infinite loops - the limit is the number of leaves we may have to read
|
|
317
370
|
const LIMIT = 2n ** BigInt(getTreeHeight(treeId)) - 1n;
|
|
318
371
|
let counter = 0n;
|
|
319
|
-
let lowPublicDataIndex =
|
|
372
|
+
let lowPublicDataIndex = minIndex;
|
|
373
|
+
let pathAbsentInEphemeralTree = false;
|
|
320
374
|
while (!found && counter < LIMIT) {
|
|
375
|
+
const bigIntKey = key;
|
|
321
376
|
if (curr.getKey() === bigIntKey) {
|
|
322
377
|
// We found an exact match - therefore this is an update
|
|
323
378
|
found = true;
|
|
@@ -332,30 +387,23 @@ export class AvmEphemeralForest {
|
|
|
332
387
|
else {
|
|
333
388
|
lowPublicDataIndex = curr.getNextIndex();
|
|
334
389
|
if (this.hasLocalUpdates(treeId, lowPublicDataIndex)) {
|
|
335
|
-
curr = this.
|
|
390
|
+
curr = this.getIndexedUpdate(treeId, lowPublicDataIndex);
|
|
391
|
+
pathAbsentInEphemeralTree = false;
|
|
336
392
|
}
|
|
337
393
|
else {
|
|
338
394
|
const preimage = (await this.treeDb.getLeafPreimage(treeId, lowPublicDataIndex));
|
|
339
395
|
curr = preimage;
|
|
396
|
+
pathAbsentInEphemeralTree = true;
|
|
340
397
|
}
|
|
341
398
|
}
|
|
342
399
|
counter++;
|
|
343
400
|
}
|
|
344
|
-
|
|
345
|
-
if (result === undefined) {
|
|
346
|
-
throw new Error('No previous value found or ran out of iterations');
|
|
347
|
-
}
|
|
348
|
-
return result;
|
|
401
|
+
return [result, pathAbsentInEphemeralTree];
|
|
349
402
|
}
|
|
350
403
|
/**
|
|
351
404
|
* This hashes the preimage to a field element
|
|
352
405
|
*/
|
|
353
406
|
hashPreimage(preimage) {
|
|
354
|
-
// Watch for this edge-case, we are hashing the key=0 leaf to 0.
|
|
355
|
-
// This is for backward compatibility with the world state implementation
|
|
356
|
-
if (preimage.getKey() === 0n) {
|
|
357
|
-
return Fr.zero();
|
|
358
|
-
}
|
|
359
407
|
const input = preimage.toHashInputs().map(x => Fr.fromBuffer(x));
|
|
360
408
|
return poseidon2Hash(input);
|
|
361
409
|
}
|
|
@@ -652,4 +700,29 @@ export class EphemeralAvmTree {
|
|
|
652
700
|
}
|
|
653
701
|
}
|
|
654
702
|
}
|
|
655
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsWUFBWSxFQUFpQyxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlDLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBa0N6QyxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNTLE1BQWdDLEVBQ2hDLE9BQTRDO0lBQ25ELGtIQUFrSDtJQUNsSCwrRkFBK0Y7SUFDeEYsY0FBd0UsRUFDeEUsaUJBQXFEO1FBTHJELFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBQXFDO1FBRzVDLG1CQUFjLEdBQWQsY0FBYyxDQUEwRDtRQUN4RSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9DO0lBQzNELENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFnQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztRQUMxRCxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDakgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JB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
|
|
703
|
+
/**
|
|
704
|
+
* Return the index of the key in the array, or index-1 if they key is not found.
|
|
705
|
+
*/
|
|
706
|
+
function indexOrNextLowestInArray(key, arr) {
|
|
707
|
+
// We are looking for the index of the largest element in the array that is less than the key
|
|
708
|
+
let start = 0;
|
|
709
|
+
let end = arr.length;
|
|
710
|
+
// Note that the easiest way is to increment the search key by 1 and then do a binary search
|
|
711
|
+
const keyPlus1 = key.add(Fr.ONE);
|
|
712
|
+
while (start < end) {
|
|
713
|
+
const mid = Math.floor((start + end) / 2);
|
|
714
|
+
if (arr[mid].cmp(keyPlus1) < 0) {
|
|
715
|
+
// The key + 1 is greater than the midpoint, so we can continue searching the top half
|
|
716
|
+
start = mid + 1;
|
|
717
|
+
}
|
|
718
|
+
else {
|
|
719
|
+
// The key + 1 is LT or EQ the arr element, so we can continue searching the bottom half
|
|
720
|
+
end = mid;
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
// We either found key + 1 or start is now at the index of the largest element that we would have inserted key + 1
|
|
724
|
+
// Therefore start - 1 is the index of the element just below - note it can be -1 if the first element in the array is
|
|
725
|
+
// greater than the key
|
|
726
|
+
return start - 1;
|
|
727
|
+
}
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsWUFBWSxFQUFpQyxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBa0N6QyxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNTLE1BQWdDLEVBQ2hDLE9BQTRDO0lBQ25ELGtIQUFrSDtJQUNsSCwrRkFBK0Y7SUFDeEYsY0FBd0UsRUFDeEUsaUJBQXFEO1FBTHJELFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBQXFDO1FBRzVDLG1CQUFjLEdBQWQsY0FBYyxDQUEwRDtRQUN4RSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9DO0lBQzNELENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFnQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztRQUMxRCxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDakgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FB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
|
package/dest/avm/errors.d.ts
CHANGED
|
@@ -21,6 +21,25 @@ export declare class ArithmeticError extends AvmExecutionError {
|
|
|
21
21
|
export declare class InvalidProgramCounterError extends AvmExecutionError {
|
|
22
22
|
constructor(pc: number, max: number);
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Error is thrown when the program counter points to a byte
|
|
26
|
+
* of an invalid opcode.
|
|
27
|
+
*/
|
|
28
|
+
export declare class InvalidOpcodeError extends AvmExecutionError {
|
|
29
|
+
constructor(str: string);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Error is thrown during parsing.
|
|
33
|
+
*/
|
|
34
|
+
export declare class AvmParsingError extends AvmExecutionError {
|
|
35
|
+
constructor(str: string);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Error is thrown when the tag has an invalid value.
|
|
39
|
+
*/
|
|
40
|
+
export declare class InvalidTagValueError extends AvmExecutionError {
|
|
41
|
+
constructor(tagValue: number);
|
|
42
|
+
}
|
|
24
43
|
/**
|
|
25
44
|
* Error thrown during an instruction's execution (during its execute()).
|
|
26
45
|
*/
|
package/dest/avm/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/avm/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAE,EAAE,EAA8C,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,eAAe,EAAE,YAAY;CAI1C;AAED,qBAAa,eAAgB,SAAQ,iBAAiB;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIpC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;WACpC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;WAI7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;gBAI5D,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;gBAC/C,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAIhD;AAED,oCAAoC;AACpC,qBAAa,aAAc,SAAQ,iBAAiB;gBACtC,UAAU,EAAE,MAAM,EAAE;CAIjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;;CAKvE;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpH;AAmCD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,eAAe,CAErH;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,eAAe,CAErG"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/avm/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAE,EAAE,EAA8C,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,eAAe,EAAE,YAAY;CAI1C;AAED,qBAAa,eAAgB,SAAQ,iBAAiB;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIpC;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;gBAC3C,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;gBACxC,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;gBAC7C,QAAQ,EAAE,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;WACpC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;WAI7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;gBAI5D,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;gBAC/C,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAIhD;AAED,oCAAoC;AACpC,qBAAa,aAAc,SAAQ,iBAAiB;gBACtC,UAAU,EAAE,MAAM,EAAE;CAIjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;;CAKvE;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpH;AAmCD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,eAAe,CAErH;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,eAAe,CAErG"}
|
package/dest/avm/errors.js
CHANGED
|
@@ -31,6 +31,34 @@ export class InvalidProgramCounterError extends AvmExecutionError {
|
|
|
31
31
|
this.name = 'InvalidProgramCounterError';
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Error is thrown when the program counter points to a byte
|
|
36
|
+
* of an invalid opcode.
|
|
37
|
+
*/
|
|
38
|
+
export class InvalidOpcodeError extends AvmExecutionError {
|
|
39
|
+
constructor(str) {
|
|
40
|
+
super(str);
|
|
41
|
+
this.name = 'InvalidOpcodeError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Error is thrown during parsing.
|
|
46
|
+
*/
|
|
47
|
+
export class AvmParsingError extends AvmExecutionError {
|
|
48
|
+
constructor(str) {
|
|
49
|
+
super(str);
|
|
50
|
+
this.name = 'AvmParsingError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Error is thrown when the tag has an invalid value.
|
|
55
|
+
*/
|
|
56
|
+
export class InvalidTagValueError extends AvmExecutionError {
|
|
57
|
+
constructor(tagValue) {
|
|
58
|
+
super(`Tag value ${tagValue} is invalid.`);
|
|
59
|
+
this.name = 'InvalidTagValueError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
34
62
|
/**
|
|
35
63
|
* Error thrown during an instruction's execution (during its execute()).
|
|
36
64
|
*/
|
|
@@ -135,4 +163,4 @@ export function revertReasonFromExceptionalHalt(haltingError, context) {
|
|
|
135
163
|
export function revertReasonFromExplicitRevert(revertData, context) {
|
|
136
164
|
return createRevertReason('Assertion failed: ', revertData, context);
|
|
137
165
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F2bS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHckQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLEtBQUs7SUFDbkQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGlCQUFpQjtJQUMvRCxZQUFZLGVBQTZCO1FBQ3ZDLEtBQUssQ0FBQyx5QkFBeUIsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLGlDQUFpQyxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxlQUFnQixTQUFRLGlCQUFpQjtJQUNwRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsaUJBQWlCO0lBQy9ELFlBQVksRUFBVSxFQUFFLEdBQVc7UUFDakMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDdkQsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FB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
|
|
@@ -29,7 +29,7 @@ export declare class AvmPersistableStateManager {
|
|
|
29
29
|
private readonly nullifiers;
|
|
30
30
|
private readonly doMerkleOperations;
|
|
31
31
|
/** Ephmeral forest for merkle tree operations */
|
|
32
|
-
|
|
32
|
+
merkleTrees: AvmEphemeralForest;
|
|
33
33
|
private readonly log;
|
|
34
34
|
/** Make sure a forked state is never merged twice. */
|
|
35
35
|
private alreadyMergedIntoParent;
|
|
@@ -51,7 +51,7 @@ export declare class AvmPersistableStateManager {
|
|
|
51
51
|
/**
|
|
52
52
|
* Create a new state manager
|
|
53
53
|
*/
|
|
54
|
-
static create(worldStateDB: WorldStateDB, trace: PublicSideEffectTraceInterface): Promise<AvmPersistableStateManager>;
|
|
54
|
+
static create(worldStateDB: WorldStateDB, trace: PublicSideEffectTraceInterface, doMerkleOperations?: boolean): Promise<AvmPersistableStateManager>;
|
|
55
55
|
/**
|
|
56
56
|
* Create a new state manager forked from this one
|
|
57
57
|
*/
|
|
@@ -64,11 +64,6 @@ export declare class AvmPersistableStateManager {
|
|
|
64
64
|
* Reject forked world state modifications & traced side effects, keep traced hints
|
|
65
65
|
*/
|
|
66
66
|
reject(forkedState: AvmPersistableStateManager): void;
|
|
67
|
-
/**
|
|
68
|
-
* Commit cached storage writes to the DB.
|
|
69
|
-
* Keeps public storage up to date from tx to tx within a block.
|
|
70
|
-
*/
|
|
71
|
-
commitStorageWritesToDB(): Promise<void>;
|
|
72
67
|
private _merge;
|
|
73
68
|
/**
|
|
74
69
|
* Write to public storage, journal/trace the write.
|
|
@@ -121,6 +116,12 @@ export declare class AvmPersistableStateManager {
|
|
|
121
116
|
* @param nullifier - the unsiloed nullifier to write
|
|
122
117
|
*/
|
|
123
118
|
writeNullifier(contractAddress: AztecAddress, nullifier: Fr): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Write a nullifier to the nullifier set, trace the write.
|
|
121
|
+
* @param siloedNullifier - the siloed nullifier to write
|
|
122
|
+
*/
|
|
123
|
+
writeSiloedNullifier(siloedNullifier: Fr): Promise<void>;
|
|
124
|
+
writeSiloedNullifiersFromPrivate(siloedNullifiers: Fr[]): Promise<void>;
|
|
124
125
|
/**
|
|
125
126
|
* Check if an L1 to L2 message exists, trace the check.
|
|
126
127
|
* @param msgHash - the message hash to check existence of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/journal.ts"],"names":[],"mappings":";;AACA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,GAAG,EAER,KAAK,iBAAiB,EAEtB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/journal.ts"],"names":[],"mappings":"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"}
|