@aztec/pxe 0.0.1-commit.c31f2472 → 0.0.1-commit.c80b6263
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/contract_function_simulator/contract_function_simulator.d.ts +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +4 -4
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +31 -29
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +47 -45
- package/package.json +16 -16
- package/src/contract_function_simulator/contract_function_simulator.ts +2 -6
- package/src/storage/note_store/note_store.ts +33 -28
- package/src/storage/private_event_store/private_event_store.ts +59 -57
|
@@ -81,4 +81,4 @@ export declare class ContractFunctionSimulator {
|
|
|
81
81
|
* @returns The simulated proving result.
|
|
82
82
|
*/
|
|
83
83
|
export declare function generateSimulatedProvingResult(privateExecutionResult: PrivateExecutionResult, contractStore: ContractStore, minRevertibleSideEffectCounterOverride?: number): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>>;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL2NvbnRyYWN0X2Z1bmN0aW9uX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pELE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQU90QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFTM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUlMLEtBQUssaUNBQWlDLEVBQ3RDLG9DQUFvQyxFQUtyQyxNQUFNLHNCQUFzQixDQUFDO0FBSTlCLE9BQU8sRUFDTCxXQUFXLEVBR1gsc0JBQXNCLEVBRXRCLGtCQUFrQixFQUduQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQVUzRjs7R0FFRztBQUNILHFCQUFhLHlCQUF5QjtJQUlsQyxPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsZ0JBQWdCO0lBQ3hCLE9BQU8sQ0FBQyxrQkFBa0I7SUFDMUIsT0FBTyxDQUFDLHFCQUFxQjtJQUM3QixPQUFPLENBQUMsc0JBQXNCO0lBQzlCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxpQkFBaUI7SUFDekIsT0FBTyxDQUFDLFNBQVM7SUFkbkIsT0FBTyxDQUFDLEdBQUcsQ0FBUztJQUVwQixZQUNVLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFDdEMscUJBQXFCLEVBQUUscUJBQXFCLEVBQzVDLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxZQUFZLEVBQUUsWUFBWSxFQUMxQixpQkFBaUIsRUFBRSxpQkFBaUIsRUFDcEMsU0FBUyxFQUFFLGdCQUFnQixFQUdwQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDVSxHQUFHLENBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUMzQixlQUFlLEVBQUUsWUFBWSxFQUM3QixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFNBQVMsMEJBQTZDLEVBQ3RELGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsYUFBYSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ3ZDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxTQUFTLEVBQ2xDLEtBQUssRUFBRSxNQUFNLEdBQ1osT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBNEdqQztJQUdEOzs7Ozs7OztPQVFHO0lBQ1UsVUFBVSxDQUNyQixJQUFJLEVBQUUsWUFBWSxFQUNsQixRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQ3ZCLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLFNBQVMsRUFDbEMsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FzRGY7SUFHRDs7O09BR0c7SUFDSCxRQUFROztNQVVQO0NBQ0Y7QUFZRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHdCQUFzQiw4QkFBOEIsQ0FDbEQsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQzlDLGFBQWEsRUFBRSxhQUFhLEVBQzVCLHNDQUFzQyxDQUFDLEVBQUUsTUFBTSxHQUM5QyxPQUFPLENBQUMsaUNBQWlDLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQXdObEYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_function_simulator.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/contract_function_simulator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contract_function_simulator.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/contract_function_simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS,
|
|
1
|
+
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX } from '@aztec/constants';
|
|
2
2
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import {
|
|
3
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -210,10 +210,10 @@ class OrderedSideEffect {
|
|
|
210
210
|
const noteHashesFromExecution = await Promise.all(execution.publicInputs.noteHashes.getActiveItems().filter((noteHash)=>!noteHash.isEmpty()).map(async (noteHash)=>new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter)));
|
|
211
211
|
const nullifiersFromExecution = await Promise.all(execution.publicInputs.nullifiers.getActiveItems().map(async (nullifier)=>new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter)));
|
|
212
212
|
const privateLogsFromExecution = await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
|
|
213
|
-
metadata.log.fields[0] = await
|
|
213
|
+
metadata.log.fields[0] = await poseidon2Hash([
|
|
214
214
|
contractAddress,
|
|
215
215
|
metadata.log.fields[0]
|
|
216
|
-
]
|
|
216
|
+
]);
|
|
217
217
|
return new OrderedSideEffect(metadata.log, metadata.counter);
|
|
218
218
|
}));
|
|
219
219
|
siloedNoteHashes.push(...noteHashesFromExecution);
|
|
@@ -70,4 +70,4 @@ export declare class NoteStore implements StagedStore {
|
|
|
70
70
|
commit(jobId: string): Promise<void>;
|
|
71
71
|
discardStaged(jobId: string): Promise<void>;
|
|
72
72
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2Uvbm90ZV9zdG9yZS9ub3RlX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVGLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQWMsS0FBSyxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUc1RTs7Ozs7SUFLSTtBQUNKLHFCQUFhLFNBQVUsWUFBVyxXQUFXOztJQUMzQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBVTtJQStCcEMsWUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBUW5DO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBRXJGO0lBK0JEOzs7Ozs7Ozs7OztPQVdHO0lBQ0csUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FvRHJFO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBc0NoRjtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ1UsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FNcEY7SUEwRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVluQztJQUVELGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFMUM7Q0FpREYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"note_store.d.ts","sourceRoot":"","sources":["../../../src/storage/note_store/note_store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAG5E;;;;;IAKI;AACJ,qBAAa,SAAU,YAAW,WAAW;;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAU;
|
|
1
|
+
{"version":3,"file":"note_store.d.ts","sourceRoot":"","sources":["../../../src/storage/note_store/note_store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAG5E;;;;;IAKI;AACJ,qBAAa,SAAU,YAAW,WAAW;;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAU;IA+BpC,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IAED;;;;;;;;;OASG;IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAErF;IA+BD;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAoDrE;IAED;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAsChF;IAED;;;;;;;;;;;OAWG;IACU,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpF;IA0ED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;CAiDF"}
|
|
@@ -9,6 +9,7 @@ import { StoredNote } from './stored_note.js';
|
|
|
9
9
|
* the case of a reorg.
|
|
10
10
|
**/ export class NoteStore {
|
|
11
11
|
storeName = 'note';
|
|
12
|
+
#store;
|
|
12
13
|
// Note that we use the siloedNullifier as the note id in the store as it's guaranteed to be unique.
|
|
13
14
|
// Main storage for notes. Avoid performing full scans on it as it contains all notes PXE knows, use
|
|
14
15
|
// #nullifiersByContractAddress or #nullifiersByNullificationBlockNumber to find relevant note nullifiers that can be
|
|
@@ -31,6 +32,7 @@ import { StoredNote } from './stored_note.js';
|
|
|
31
32
|
// jobId => lock
|
|
32
33
|
#jobLocks;
|
|
33
34
|
constructor(store){
|
|
35
|
+
this.#store = store;
|
|
34
36
|
this.#notes = store.openMap('notes');
|
|
35
37
|
this.#nullifiersByContractAddress = store.openMultiMap('note_nullifiers_by_contract');
|
|
36
38
|
this.#nullifiersByNullificationBlockNumber = store.openMultiMap('note_block_number_to_nullifier');
|
|
@@ -141,37 +143,37 @@ import { StoredNote } from './stored_note.js';
|
|
|
141
143
|
* @returns Array of NoteDao objects that were nullified
|
|
142
144
|
* @throws Error if any nullifier is not found in this notes store
|
|
143
145
|
*/ applyNullifiers(nullifiers, jobId) {
|
|
144
|
-
return this.#withJobLock(jobId, async ()=>{
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
const notesToNullify = await Promise.all(nullifiers.map(async (nullifierInBlock)=>{
|
|
149
|
-
const nullifier = nullifierInBlock.data.toString();
|
|
150
|
-
const storedNote = await this.#readNote(nullifier, jobId);
|
|
151
|
-
if (!storedNote) {
|
|
152
|
-
throw new Error(`Attempted to mark a note as nullified which does not exist in PXE DB`);
|
|
146
|
+
return this.#withJobLock(jobId, ()=>this.#store.transactionAsync(async ()=>{
|
|
147
|
+
if (nullifiers.length === 0) {
|
|
148
|
+
return [];
|
|
153
149
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
150
|
+
const notesToNullify = await Promise.all(nullifiers.map(async (nullifierInBlock)=>{
|
|
151
|
+
const nullifier = nullifierInBlock.data.toString();
|
|
152
|
+
const storedNote = await this.#readNote(nullifier, jobId);
|
|
153
|
+
if (!storedNote) {
|
|
154
|
+
throw new Error(`Attempted to mark a note as nullified which does not exist in PXE DB`);
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
storedNote: await this.#readNote(nullifier, jobId),
|
|
158
|
+
blockNumber: nullifierInBlock.l2BlockNumber
|
|
159
|
+
};
|
|
160
|
+
}));
|
|
161
|
+
const notesNullifiedInThisCall = new Map();
|
|
162
|
+
for (const noteToNullify of notesToNullify){
|
|
163
|
+
// Safe to coerce (!) because we throw if we find any undefined above
|
|
164
|
+
const note = noteToNullify.storedNote;
|
|
165
|
+
// Skip already nullified notes
|
|
166
|
+
if (note.isNullified()) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
note.markAsNullified(noteToNullify.blockNumber);
|
|
170
|
+
this.#writeNote(note, jobId);
|
|
171
|
+
notesNullifiedInThisCall.set(note.noteDao.siloedNullifier.toString(), note.noteDao);
|
|
166
172
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
return [
|
|
172
|
-
...notesNullifiedInThisCall.values()
|
|
173
|
-
];
|
|
174
|
-
});
|
|
173
|
+
return [
|
|
174
|
+
...notesNullifiedInThisCall.values()
|
|
175
|
+
];
|
|
176
|
+
}));
|
|
175
177
|
}
|
|
176
178
|
/**
|
|
177
179
|
* Synchronizes notes and nullifiers to a specific block number.
|
|
@@ -88,4 +88,4 @@ export declare class PrivateEventStore implements StagedStore {
|
|
|
88
88
|
discardStaged(jobId: string): Promise<void>;
|
|
89
89
|
}
|
|
90
90
|
export {};
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9ldmVudF9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvcHJpdmF0ZV9ldmVudF9zdG9yZS9wcml2YXRlX2V2ZW50X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlwRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkQsTUFBTSxNQUFNLHVCQUF1QixHQUFHO0lBQ3BDLGVBQWUsRUFBRSxZQUFZLENBQUM7SUFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUN2QixNQUFNLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDakIsQ0FBQztBQUVGLEtBQUssb0JBQW9CLEdBQUcsSUFBSSxHQUFHO0lBQ2pDLGVBQWUsRUFBRSxZQUFZLENBQUM7SUFDOUIsS0FBSyxFQUFFLFlBQVksQ0FBQztJQUNwQiwyQ0FBMkM7SUFDM0MsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2Qix5RUFBeUU7SUFDekUsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN4QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxxQkFBYSxpQkFBa0IsWUFBVyxXQUFXOztJQUNuRCxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBbUI7SUFnQjdDLE1BQU0seUNBQXVDO0lBRTdDLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQVFuQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsb0JBQW9CLENBQ2xCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxFQUFFLEVBQ2QsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUNoQixxQkFBcUIsRUFBRSxFQUFFLEVBQ3pCLFFBQVEsRUFBRSxvQkFBb0IsRUFDOUIsS0FBSyxFQUFFLE1BQU0saUJBdUNkO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGdCQUFnQixDQUNyQixhQUFhLEVBQUUsYUFBYSxFQUM1QixNQUFNLEVBQUUsdUJBQXVCLEdBQzlCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBcUUvQjtJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ1UsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E0QnBGO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWVuQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUxQztDQTRFRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private_event_store.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/private_event_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG,IAAI,GAAG;IACjC,eAAe,EAAE,YAAY,CAAC;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAmB;IAgB7C,MAAM,yCAAuC;IAE7C,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IAED;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,qBAAqB,EAAE,EAAE,EACzB,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,MAAM,iBAuCd;IAED;;;;;;;;;;OAUG;
|
|
1
|
+
{"version":3,"file":"private_event_store.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/private_event_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG,IAAI,GAAG;IACjC,eAAe,EAAE,YAAY,CAAC;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAmB;IAgB7C,MAAM,yCAAuC;IAE7C,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IAED;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,qBAAqB,EAAE,EAAE,EACzB,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,MAAM,iBAuCd;IAED;;;;;;;;;;OAUG;IACI,gBAAgB,CACrB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqE/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACU,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAenC;IAED;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;CA4EF"}
|
|
@@ -66,55 +66,57 @@ import { StoredPrivateEvent } from './stored_private_event.js';
|
|
|
66
66
|
* scope: - The addresses that decrypted the logs.
|
|
67
67
|
* @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
|
|
68
68
|
* included.
|
|
69
|
-
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
69
|
+
*/ getPrivateEvents(eventSelector, filter) {
|
|
70
|
+
return this.#store.transactionAsync(async ()=>{
|
|
71
|
+
const events = [];
|
|
72
|
+
const key = this.#keyFor(filter.contractAddress, eventSelector);
|
|
73
|
+
const targetScopes = new Set(filter.scopes.map((s)=>s.toString()));
|
|
74
|
+
const eventIds = await toArray(this.#eventsByContractAndEventSelector.getValuesAsync(key));
|
|
75
|
+
for (const eventId of eventIds){
|
|
76
|
+
const eventBuffer = await this.#events.getAsync(eventId);
|
|
77
|
+
// Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
|
|
78
|
+
if (!eventBuffer) {
|
|
79
|
+
this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
83
|
+
// Filter by block range
|
|
84
|
+
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Filter by scopes
|
|
88
|
+
if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Filter by txHash
|
|
92
|
+
if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
events.push({
|
|
96
|
+
l2BlockNumber: storedPrivateEvent.l2BlockNumber,
|
|
97
|
+
txIndexInBlock: storedPrivateEvent.txIndexInBlock,
|
|
98
|
+
eventIndexInTx: storedPrivateEvent.eventIndexInTx,
|
|
99
|
+
event: {
|
|
100
|
+
packedEvent: storedPrivateEvent.msgContent,
|
|
101
|
+
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
102
|
+
txHash: storedPrivateEvent.txHash,
|
|
103
|
+
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
104
|
+
eventSelector
|
|
105
|
+
}
|
|
106
|
+
});
|
|
93
107
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
txHash: storedPrivateEvent.txHash,
|
|
102
|
-
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
103
|
-
eventSelector
|
|
108
|
+
// Sort by block number, then by tx index within block, then by event index within tx
|
|
109
|
+
events.sort((a, b)=>{
|
|
110
|
+
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
111
|
+
return a.l2BlockNumber - b.l2BlockNumber;
|
|
112
|
+
}
|
|
113
|
+
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
114
|
+
return a.txIndexInBlock - b.txIndexInBlock;
|
|
104
115
|
}
|
|
116
|
+
return a.eventIndexInTx - b.eventIndexInTx;
|
|
105
117
|
});
|
|
106
|
-
|
|
107
|
-
// Sort by block number, then by tx index within block, then by event index within tx
|
|
108
|
-
events.sort((a, b)=>{
|
|
109
|
-
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
110
|
-
return a.l2BlockNumber - b.l2BlockNumber;
|
|
111
|
-
}
|
|
112
|
-
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
113
|
-
return a.txIndexInBlock - b.txIndexInBlock;
|
|
114
|
-
}
|
|
115
|
-
return a.eventIndexInTx - b.eventIndexInTx;
|
|
118
|
+
return events.map((ev)=>ev.event);
|
|
116
119
|
});
|
|
117
|
-
return events.map((ev)=>ev.event);
|
|
118
120
|
}
|
|
119
121
|
/**
|
|
120
122
|
* Rolls back private events that were stored after a given `blockNumber` and up to `synchedBlockNumber` (the block
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/pxe",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.c80b6263",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./server": "./dest/entrypoints/server/index.js",
|
|
@@ -61,19 +61,19 @@
|
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
65
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
66
|
-
"@aztec/builder": "0.0.1-commit.
|
|
67
|
-
"@aztec/constants": "0.0.1-commit.
|
|
68
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
69
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
70
|
-
"@aztec/key-store": "0.0.1-commit.
|
|
71
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
72
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
73
|
-
"@aztec/noir-types": "0.0.1-commit.
|
|
74
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
75
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
76
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
64
|
+
"@aztec/bb-prover": "0.0.1-commit.c80b6263",
|
|
65
|
+
"@aztec/bb.js": "0.0.1-commit.c80b6263",
|
|
66
|
+
"@aztec/builder": "0.0.1-commit.c80b6263",
|
|
67
|
+
"@aztec/constants": "0.0.1-commit.c80b6263",
|
|
68
|
+
"@aztec/ethereum": "0.0.1-commit.c80b6263",
|
|
69
|
+
"@aztec/foundation": "0.0.1-commit.c80b6263",
|
|
70
|
+
"@aztec/key-store": "0.0.1-commit.c80b6263",
|
|
71
|
+
"@aztec/kv-store": "0.0.1-commit.c80b6263",
|
|
72
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.c80b6263",
|
|
73
|
+
"@aztec/noir-types": "0.0.1-commit.c80b6263",
|
|
74
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c80b6263",
|
|
75
|
+
"@aztec/simulator": "0.0.1-commit.c80b6263",
|
|
76
|
+
"@aztec/stdlib": "0.0.1-commit.c80b6263",
|
|
77
77
|
"koa": "^2.16.1",
|
|
78
78
|
"koa-router": "^13.1.1",
|
|
79
79
|
"lodash.omit": "^4.5.0",
|
|
@@ -82,8 +82,8 @@
|
|
|
82
82
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
|
-
"@aztec/merkle-tree": "0.0.1-commit.
|
|
86
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
85
|
+
"@aztec/merkle-tree": "0.0.1-commit.c80b6263",
|
|
86
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.c80b6263",
|
|
87
87
|
"@jest/globals": "^30.0.0",
|
|
88
88
|
"@types/jest": "^30.0.0",
|
|
89
89
|
"@types/lodash.omit": "^4.5.7",
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
FIXED_AVM_STARTUP_L2_GAS,
|
|
8
8
|
FIXED_DA_GAS,
|
|
9
9
|
FIXED_L2_GAS,
|
|
10
|
-
GeneratorIndex,
|
|
11
10
|
L2_GAS_PER_CONTRACT_CLASS_LOG,
|
|
12
11
|
L2_GAS_PER_PRIVATE_LOG,
|
|
13
12
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
@@ -18,7 +17,7 @@ import {
|
|
|
18
17
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
19
18
|
} from '@aztec/constants';
|
|
20
19
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
21
|
-
import {
|
|
20
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
22
21
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
23
22
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
24
23
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -402,10 +401,7 @@ export async function generateSimulatedProvingResult(
|
|
|
402
401
|
|
|
403
402
|
const privateLogsFromExecution = await Promise.all(
|
|
404
403
|
execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
|
|
405
|
-
metadata.log.fields[0] = await
|
|
406
|
-
[contractAddress, metadata.log.fields[0]],
|
|
407
|
-
GeneratorIndex.PRIVATE_LOG_FIRST_FIELD,
|
|
408
|
-
);
|
|
404
|
+
metadata.log.fields[0] = await poseidon2Hash([contractAddress, metadata.log.fields[0]]);
|
|
409
405
|
return new OrderedSideEffect(metadata.log, metadata.counter);
|
|
410
406
|
}),
|
|
411
407
|
);
|
|
@@ -18,6 +18,8 @@ import { StoredNote } from './stored_note.js';
|
|
|
18
18
|
export class NoteStore implements StagedStore {
|
|
19
19
|
readonly storeName: string = 'note';
|
|
20
20
|
|
|
21
|
+
#store: AztecAsyncKVStore;
|
|
22
|
+
|
|
21
23
|
// Note that we use the siloedNullifier as the note id in the store as it's guaranteed to be unique.
|
|
22
24
|
|
|
23
25
|
// Main storage for notes. Avoid performing full scans on it as it contains all notes PXE knows, use
|
|
@@ -46,6 +48,7 @@ export class NoteStore implements StagedStore {
|
|
|
46
48
|
#jobLocks: Map<string, Semaphore>;
|
|
47
49
|
|
|
48
50
|
constructor(store: AztecAsyncKVStore) {
|
|
51
|
+
this.#store = store;
|
|
49
52
|
this.#notes = store.openMap('notes');
|
|
50
53
|
this.#nullifiersByContractAddress = store.openMultiMap('note_nullifiers_by_contract');
|
|
51
54
|
this.#nullifiersByNullificationBlockNumber = store.openMultiMap('note_block_number_to_nullifier');
|
|
@@ -179,41 +182,43 @@ export class NoteStore implements StagedStore {
|
|
|
179
182
|
* @throws Error if any nullifier is not found in this notes store
|
|
180
183
|
*/
|
|
181
184
|
applyNullifiers(nullifiers: DataInBlock<Fr>[], jobId: string): Promise<NoteDao[]> {
|
|
182
|
-
return this.#withJobLock(jobId,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
return this.#withJobLock(jobId, () =>
|
|
186
|
+
this.#store.transactionAsync(async () => {
|
|
187
|
+
if (nullifiers.length === 0) {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
186
190
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
191
|
+
const notesToNullify = await Promise.all(
|
|
192
|
+
nullifiers.map(async nullifierInBlock => {
|
|
193
|
+
const nullifier = nullifierInBlock.data.toString();
|
|
190
194
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
+
const storedNote = await this.#readNote(nullifier, jobId);
|
|
196
|
+
if (!storedNote) {
|
|
197
|
+
throw new Error(`Attempted to mark a note as nullified which does not exist in PXE DB`);
|
|
198
|
+
}
|
|
195
199
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
200
|
+
return { storedNote: await this.#readNote(nullifier, jobId), blockNumber: nullifierInBlock.l2BlockNumber };
|
|
201
|
+
}),
|
|
202
|
+
);
|
|
199
203
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
const notesNullifiedInThisCall: Map<string, NoteDao> = new Map();
|
|
205
|
+
for (const noteToNullify of notesToNullify) {
|
|
206
|
+
// Safe to coerce (!) because we throw if we find any undefined above
|
|
207
|
+
const note = noteToNullify.storedNote!;
|
|
204
208
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
// Skip already nullified notes
|
|
210
|
+
if (note.isNullified()) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
209
213
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
+
note.markAsNullified(noteToNullify.blockNumber);
|
|
215
|
+
this.#writeNote(note, jobId);
|
|
216
|
+
notesNullifiedInThisCall.set(note.noteDao.siloedNullifier.toString(), note.noteDao);
|
|
217
|
+
}
|
|
214
218
|
|
|
215
|
-
|
|
216
|
-
|
|
219
|
+
return [...notesNullifiedInThisCall.values()];
|
|
220
|
+
}),
|
|
221
|
+
);
|
|
217
222
|
}
|
|
218
223
|
|
|
219
224
|
/**
|
|
@@ -131,76 +131,78 @@ export class PrivateEventStore implements StagedStore {
|
|
|
131
131
|
* @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
|
|
132
132
|
* included.
|
|
133
133
|
*/
|
|
134
|
-
public
|
|
134
|
+
public getPrivateEvents(
|
|
135
135
|
eventSelector: EventSelector,
|
|
136
136
|
filter: PrivateEventStoreFilter,
|
|
137
137
|
): Promise<PackedPrivateEvent[]> {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const
|
|
138
|
+
return this.#store.transactionAsync(async () => {
|
|
139
|
+
const events: Array<{
|
|
140
|
+
l2BlockNumber: number;
|
|
141
|
+
txIndexInBlock: number;
|
|
142
|
+
eventIndexInTx: number;
|
|
143
|
+
event: PackedPrivateEvent;
|
|
144
|
+
}> = [];
|
|
145
|
+
|
|
146
|
+
const key = this.#keyFor(filter.contractAddress, eventSelector);
|
|
147
|
+
const targetScopes = new Set(filter.scopes.map(s => s.toString()));
|
|
148
|
+
|
|
149
|
+
const eventIds: string[] = await toArray(this.#eventsByContractAndEventSelector.getValuesAsync(key));
|
|
150
|
+
|
|
151
|
+
for (const eventId of eventIds) {
|
|
152
|
+
const eventBuffer = await this.#events.getAsync(eventId);
|
|
153
|
+
|
|
154
|
+
// Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
|
|
155
|
+
if (!eventBuffer) {
|
|
156
|
+
this.logger.verbose(
|
|
157
|
+
`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`,
|
|
158
|
+
);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
152
161
|
|
|
153
|
-
|
|
154
|
-
if (!eventBuffer) {
|
|
155
|
-
this.logger.verbose(
|
|
156
|
-
`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`,
|
|
157
|
-
);
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
162
|
+
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
160
163
|
|
|
161
|
-
|
|
164
|
+
// Filter by block range
|
|
165
|
+
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
162
168
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
// Filter by scopes
|
|
170
|
+
if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
167
173
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
174
|
+
// Filter by txHash
|
|
175
|
+
if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
172
178
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
179
|
+
events.push({
|
|
180
|
+
l2BlockNumber: storedPrivateEvent.l2BlockNumber,
|
|
181
|
+
txIndexInBlock: storedPrivateEvent.txIndexInBlock,
|
|
182
|
+
eventIndexInTx: storedPrivateEvent.eventIndexInTx,
|
|
183
|
+
event: {
|
|
184
|
+
packedEvent: storedPrivateEvent.msgContent,
|
|
185
|
+
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
186
|
+
txHash: storedPrivateEvent.txHash,
|
|
187
|
+
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
188
|
+
eventSelector,
|
|
189
|
+
},
|
|
190
|
+
});
|
|
176
191
|
}
|
|
177
192
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
eventSelector,
|
|
188
|
-
},
|
|
193
|
+
// Sort by block number, then by tx index within block, then by event index within tx
|
|
194
|
+
events.sort((a, b) => {
|
|
195
|
+
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
196
|
+
return a.l2BlockNumber - b.l2BlockNumber;
|
|
197
|
+
}
|
|
198
|
+
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
199
|
+
return a.txIndexInBlock - b.txIndexInBlock;
|
|
200
|
+
}
|
|
201
|
+
return a.eventIndexInTx - b.eventIndexInTx;
|
|
189
202
|
});
|
|
190
|
-
}
|
|
191
203
|
|
|
192
|
-
|
|
193
|
-
events.sort((a, b) => {
|
|
194
|
-
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
195
|
-
return a.l2BlockNumber - b.l2BlockNumber;
|
|
196
|
-
}
|
|
197
|
-
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
198
|
-
return a.txIndexInBlock - b.txIndexInBlock;
|
|
199
|
-
}
|
|
200
|
-
return a.eventIndexInTx - b.eventIndexInTx;
|
|
204
|
+
return events.map(ev => ev.event);
|
|
201
205
|
});
|
|
202
|
-
|
|
203
|
-
return events.map(ev => ev.event);
|
|
204
206
|
}
|
|
205
207
|
|
|
206
208
|
/**
|