@aztec/pxe 0.8.9 → 0.8.11

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.
Files changed (42) hide show
  1. package/dest/contract_data_oracle/index.d.ts +4 -4
  2. package/dest/contract_data_oracle/index.d.ts.map +1 -1
  3. package/dest/contract_data_oracle/index.js +9 -9
  4. package/dest/contract_tree/index.d.ts +10 -10
  5. package/dest/contract_tree/index.d.ts.map +1 -1
  6. package/dest/contract_tree/index.js +21 -21
  7. package/dest/database/database.d.ts +5 -0
  8. package/dest/database/database.d.ts.map +1 -1
  9. package/dest/database/memory_db.d.ts +1 -0
  10. package/dest/database/memory_db.d.ts.map +1 -1
  11. package/dest/database/memory_db.js +10 -2
  12. package/dest/database/note_spending_info_dao.d.ts +7 -1
  13. package/dest/database/note_spending_info_dao.d.ts.map +1 -1
  14. package/dest/database/note_spending_info_dao.js +11 -1
  15. package/dest/kernel_prover/proof_creator.d.ts.map +1 -1
  16. package/dest/kernel_prover/proof_creator.js +7 -7
  17. package/dest/note_processor/note_processor.d.ts +2 -11
  18. package/dest/note_processor/note_processor.d.ts.map +1 -1
  19. package/dest/note_processor/note_processor.js +6 -4
  20. package/dest/pxe_http/pxe_http_server.d.ts.map +1 -1
  21. package/dest/pxe_http/pxe_http_server.js +6 -2
  22. package/dest/pxe_service/pxe_service.d.ts +10 -3
  23. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  24. package/dest/pxe_service/pxe_service.js +33 -24
  25. package/dest/simulator_oracle/index.d.ts +2 -2
  26. package/dest/simulator_oracle/index.d.ts.map +1 -1
  27. package/dest/simulator_oracle/index.js +4 -4
  28. package/dest/synchronizer/synchronizer.d.ts +2 -2
  29. package/dest/synchronizer/synchronizer.d.ts.map +1 -1
  30. package/dest/synchronizer/synchronizer.js +11 -10
  31. package/package.json +8 -8
  32. package/src/contract_data_oracle/index.ts +8 -8
  33. package/src/contract_tree/index.ts +21 -21
  34. package/src/database/database.ts +6 -0
  35. package/src/database/memory_db.ts +9 -1
  36. package/src/database/note_spending_info_dao.ts +12 -1
  37. package/src/kernel_prover/proof_creator.ts +10 -9
  38. package/src/note_processor/note_processor.ts +6 -13
  39. package/src/pxe_http/pxe_http_server.ts +6 -0
  40. package/src/pxe_service/pxe_service.ts +38 -33
  41. package/src/simulator_oracle/index.ts +5 -5
  42. package/src/synchronizer/synchronizer.ts +12 -10
@@ -1,7 +1,7 @@
1
1
  import { CircuitsWasm, Fr, HistoricBlockData } from '@aztec/circuits.js';
2
2
  import { computeGlobalsHash } from '@aztec/circuits.js/abis';
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
- import { InterruptableSleep } from '@aztec/foundation/sleep';
4
+ import { InterruptibleSleep } from '@aztec/foundation/sleep';
5
5
  import { INITIAL_L2_BLOCK_NUM, L2BlockContext, L2BlockL2Logs, LogType } from '@aztec/types';
6
6
  import { NoteProcessor } from '../note_processor/index.js';
7
7
  /**
@@ -16,7 +16,7 @@ export class Synchronizer {
16
16
  this.node = node;
17
17
  this.db = db;
18
18
  this.noteProcessors = [];
19
- this.interruptableSleep = new InterruptableSleep();
19
+ this.interruptibleSleep = new InterruptibleSleep();
20
20
  this.running = false;
21
21
  this.initialSyncBlockNumber = 0;
22
22
  this.synchedToBlock = 0;
@@ -24,7 +24,7 @@ export class Synchronizer {
24
24
  this.log = createDebugLogger(logSuffix ? `aztec:pxe_synchronizer_${logSuffix}` : 'aztec:pxe_synchronizer');
25
25
  }
26
26
  /**
27
- * Starts the synchronisation process by fetching encrypted logs and blocks from a specified position.
27
+ * Starts the synchronization process by fetching encrypted logs and blocks from a specified position.
28
28
  * Continuously processes the fetched data for all note processors until stopped. If there is no data
29
29
  * available, it retries after a specified interval.
30
30
  *
@@ -70,18 +70,18 @@ export class Synchronizer {
70
70
  try {
71
71
  let encryptedLogs = await this.node.getLogs(from, limit, LogType.ENCRYPTED);
72
72
  if (!encryptedLogs.length) {
73
- await this.interruptableSleep.sleep(retryInterval);
73
+ await this.interruptibleSleep.sleep(retryInterval);
74
74
  return;
75
75
  }
76
76
  let unencryptedLogs = await this.node.getLogs(from, limit, LogType.UNENCRYPTED);
77
77
  if (!unencryptedLogs.length) {
78
- await this.interruptableSleep.sleep(retryInterval);
78
+ await this.interruptibleSleep.sleep(retryInterval);
79
79
  return;
80
80
  }
81
81
  // Note: If less than `limit` encrypted logs is returned, then we fetch only that number of blocks.
82
82
  const blocks = await this.node.getBlocks(from, encryptedLogs.length);
83
83
  if (!blocks.length) {
84
- await this.interruptableSleep.sleep(retryInterval);
84
+ await this.interruptibleSleep.sleep(retryInterval);
85
85
  return;
86
86
  }
87
87
  if (blocks.length !== encryptedLogs.length) {
@@ -111,7 +111,7 @@ export class Synchronizer {
111
111
  }
112
112
  catch (err) {
113
113
  this.log.error(`Error in synchronizer work`, err);
114
- await this.interruptableSleep.sleep(retryInterval);
114
+ await this.interruptibleSleep.sleep(retryInterval);
115
115
  }
116
116
  }
117
117
  async workNoteProcessorCatchUp(limit = 1, retryInterval = 1000) {
@@ -156,6 +156,7 @@ export class Synchronizer {
156
156
  eventName: 'note-processor-caught-up',
157
157
  publicKey: noteProcessor.publicKey.toString(),
158
158
  duration: noteProcessor.timer.ms(),
159
+ dbSize: this.db.estimateSize(),
159
160
  ...noteProcessor.stats,
160
161
  });
161
162
  this.noteProcessorsToCatchUp.shift();
@@ -164,7 +165,7 @@ export class Synchronizer {
164
165
  }
165
166
  catch (err) {
166
167
  this.log.error(`Error in synchronizer workNoteProcessorCatchUp`, err);
167
- await this.interruptableSleep.sleep(retryInterval);
168
+ await this.interruptibleSleep.sleep(retryInterval);
168
169
  }
169
170
  }
170
171
  async setBlockDataFromBlock(latestBlock) {
@@ -186,7 +187,7 @@ export class Synchronizer {
186
187
  */
187
188
  async stop() {
188
189
  this.running = false;
189
- this.interruptableSleep.interrupt();
190
+ this.interruptibleSleep.interrupt();
190
191
  await this.runningPromise;
191
192
  this.log('Stopped');
192
193
  }
@@ -246,4 +247,4 @@ export class Synchronizer {
246
247
  };
247
248
  }
248
249
  }
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixZQUFZLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFhLG9CQUFvQixFQUFZLGNBQWMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR2pILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQVV2QixZQUFvQixJQUFlLEVBQVUsRUFBWSxFQUFFLFNBQVMsR0FBRyxFQUFFO1FBQXJELFNBQUksR0FBSixJQUFJLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFVO1FBUmpELG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFFbkIsNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztRQUdwRCxJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtB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
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixZQUFZLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFhLG9CQUFvQixFQUFZLGNBQWMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQVV2QixZQUFvQixJQUFlLEVBQVUsRUFBWSxFQUFFLFNBQVMsR0FBRyxFQUFFO1FBQXJELFNBQUksR0FBSixJQUFJLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFVO1FBUmpELG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFFbkIsNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztRQUdwRCxJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLG9CQUFvQixFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsYUFBYSxHQUFHLElBQUk7UUFDN0UsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksZ0RBQWdELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sR0FBRyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDM0MsNEdBQTRHO29CQUM1RyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLHlFQUF5RTtvQkFDekUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtRQUNILENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVc7UUFDekIsTUFBTSxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQ2pDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDbEQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVTLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJO1lBQ0YsSUFBSSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPO2FBQ1I7WUFFRCxJQUFJLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUMzQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ25ELE9BQU87YUFDUjtZQUVELG1HQUFtRztZQUNuRyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbkQsT0FBTzthQUNSO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFDLDJEQUEyRDtnQkFDM0QsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2RDtZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUM1Qyw2REFBNkQ7Z0JBQzdELGVBQWUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0Q7WUFFRCx3QkFBd0I7WUFDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFSCxpQ0FBaUM7WUFDakMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFckUsc0RBQXNEO1lBQ3RELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTlDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsUUFBUSxpQ0FBaUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLENBQUM7WUFDOUcsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUMvQyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQzNEO1lBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNoRDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDOUQsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDcEQsNkVBQTZFO1FBQzdFLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixLQUFLLDhCQUE4QixDQUFDLENBQUM7U0FDMUU7UUFFRCxJQUFJO1lBQ0YsSUFBSSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsMEdBQTBHO2dCQUMxRyxvQkFBb0I7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNqRTtZQUVELG1HQUFtRztZQUNuRyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLDBHQUEwRztnQkFDMUcsb0JBQW9CO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7YUFDekQ7WUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDMUMsMkRBQTJEO2dCQUMzRCxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFckUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxRQUFRLCtEQUErRCxDQUFDLENBQUM7WUFDaEcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUUxRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzlELHdGQUF3RjtnQkFDeEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7b0JBQ2pGLFNBQVMsRUFBRSwwQkFBMEI7b0JBQ3JDLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDN0MsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO29CQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7b0JBQzlCLEdBQUcsYUFBYSxDQUFDLEtBQUs7aUJBQ2MsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBMkI7UUFDN0QsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjtZQUFFLE9BQU87UUFFdkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FDckMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFDckMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFDbkMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFDbEMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFDeEMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFDeEMsRUFBRSxDQUFDLElBQUksRUFBRSxvQ0FBb0M7UUFDN0MsS0FBSyxDQUFDLHFCQUFxQixFQUMzQixXQUFXLENBQ1osQ0FBQztRQUVGLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFVBQVUsQ0FBQyxTQUFvQixFQUFFLFFBQWtCLEVBQUUsYUFBcUI7UUFDL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksU0FBUztZQUFFLE9BQU87UUFFdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLDBCQUEwQixDQUFDLE9BQXFCO1FBQzNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE9BQU8sZ0NBQWdDLENBQUMsQ0FBQztTQUNoSDtRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELE9BQU8sZ0RBQWdELENBQzlHLENBQUM7U0FDSDtRQUNELE9BQU8sTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLHlCQUF5QjtRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYTtRQUNsQixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUMxRyxDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/pxe",
3
- "version": "0.8.9",
3
+ "version": "0.8.11",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -32,13 +32,13 @@
32
32
  "rootDir": "./src"
33
33
  },
34
34
  "dependencies": {
35
- "@aztec/acir-simulator": "0.8.9",
36
- "@aztec/circuits.js": "0.8.9",
37
- "@aztec/ethereum": "0.8.9",
38
- "@aztec/foundation": "0.8.9",
39
- "@aztec/key-store": "0.8.9",
40
- "@aztec/noir-compiler": "0.8.9",
41
- "@aztec/types": "0.8.9",
35
+ "@aztec/acir-simulator": "0.8.11",
36
+ "@aztec/circuits.js": "0.8.11",
37
+ "@aztec/ethereum": "0.8.11",
38
+ "@aztec/foundation": "0.8.11",
39
+ "@aztec/key-store": "0.8.11",
40
+ "@aztec/noir-compiler": "0.8.11",
41
+ "@aztec/types": "0.8.11",
42
42
  "koa": "^2.14.2",
43
43
  "koa-router": "^12.0.0",
44
44
  "lodash.omit": "^4.5.0",
@@ -31,17 +31,17 @@ export class ContractDataOracle {
31
31
  }
32
32
 
33
33
  /**
34
- * Retrieves the ABI of a specified function within a given contract.
34
+ * Retrieves the artifact of a specified function within a given contract.
35
35
  * The function is identified by its selector, which is a unique code generated from the function's signature.
36
36
  * Throws an error if the contract address or function selector are invalid or not found.
37
37
  *
38
38
  * @param contractAddress - The AztecAddress representing the contract containing the function.
39
39
  * @param selector - The function selector.
40
- * @returns The corresponding function's ABI as an object.
40
+ * @returns The corresponding function's artifact as an object.
41
41
  */
42
- public async getFunctionAbi(contractAddress: AztecAddress, selector: FunctionSelector) {
42
+ public async getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector) {
43
43
  const tree = await this.getTree(contractAddress);
44
- return tree.getFunctionAbi(selector);
44
+ return tree.getFunctionArtifact(selector);
45
45
  }
46
46
 
47
47
  /**
@@ -51,20 +51,20 @@ export class ContractDataOracle {
51
51
  *
52
52
  * @param contractAddress - The AztecAddress representing the contract containing the function.
53
53
  * @param selector - The function selector.
54
- * @returns The corresponding function's ABI as an object.
54
+ * @returns The corresponding function's artifact as an object.
55
55
  */
56
56
  public async getFunctionDebugMetadata(
57
57
  contractAddress: AztecAddress,
58
58
  selector: FunctionSelector,
59
59
  ): Promise<FunctionDebugMetadata | undefined> {
60
60
  const contract = await this.db.getContract(contractAddress);
61
- const functionAbi = contract?.functions.find(f => f.selector.equals(selector));
61
+ const functionArtifact = contract?.functions.find(f => f.selector.equals(selector));
62
62
 
63
- if (!contract || !functionAbi) {
63
+ if (!contract || !functionArtifact) {
64
64
  return undefined;
65
65
  }
66
66
 
67
- return getFunctionDebugMetadata(contract, functionAbi.name);
67
+ return getFunctionDebugMetadata(contract, functionArtifact.name);
68
68
  }
69
69
 
70
70
  /**
@@ -22,14 +22,14 @@ import {
22
22
  computeVarArgsHash,
23
23
  hashConstructor,
24
24
  } from '@aztec/circuits.js/abis';
25
- import { ContractAbi, FunctionSelector } from '@aztec/foundation/abi';
25
+ import { ContractArtifact, FunctionSelector } from '@aztec/foundation/abi';
26
26
  import { assertLength } from '@aztec/foundation/serialize';
27
27
  import { AztecNode, ContractDao, MerkleTreeId, PublicKey, StateInfoProvider } from '@aztec/types';
28
28
 
29
29
  /**
30
30
  * The ContractTree class represents a Merkle tree of functions for a particular contract.
31
31
  * It manages the construction of the function tree, computes its root, and generates membership witnesses
32
- * for constrained functions. This class also enables lookup of specific function ABI and bytecode using selectors.
32
+ * for constrained functions. This class also enables lookup of specific function artifact using selectors.
33
33
  * It is used in combination with the AztecNode to compute various data for executing private transactions.
34
34
  */
35
35
  export class ContractTree {
@@ -40,7 +40,7 @@ export class ContractTree {
40
40
 
41
41
  constructor(
42
42
  /**
43
- * The contract data object containing the ABI and contract address.
43
+ * The contract data object containing the artifact and contract address.
44
44
  */
45
45
  public readonly contract: ContractDao,
46
46
  private stateInfoProvider: StateInfoProvider,
@@ -52,13 +52,13 @@ export class ContractTree {
52
52
  ) {}
53
53
 
54
54
  /**
55
- * Create a new ContractTree instance from the provided contract ABI, constructor arguments, and related data.
55
+ * Create a new ContractTree instance from the provided contract artifact, constructor arguments, and related data.
56
56
  * The function generates function leaves for constrained functions, computes the function tree root,
57
57
  * and hashes the constructor's verification key. It then computes the contract address using the contract
58
58
  * and portal contract addresses, contract address salt, and generated data. Finally, it returns a new
59
59
  * ContractTree instance containing the contract data and computed values.
60
60
  *
61
- * @param abi - The contract's ABI containing the functions and their metadata.
61
+ * @param artifact - The contract's build artifact containing the functions and their metadata.
62
62
  * @param args - An array of Fr elements representing the constructor's arguments.
63
63
  * @param portalContract - The Ethereum address of the portal smart contract.
64
64
  * @param contractAddressSalt - An Fr element representing the salt used to compute the contract address.
@@ -67,7 +67,7 @@ export class ContractTree {
67
67
  * @returns A new ContractTree instance containing the contract data and computed values.
68
68
  */
69
69
  public static async new(
70
- abi: ContractAbi,
70
+ artifact: ContractArtifact,
71
71
  args: Fr[],
72
72
  portalContract: EthAddress,
73
73
  contractAddressSalt: Fr,
@@ -75,29 +75,29 @@ export class ContractTree {
75
75
  node: AztecNode,
76
76
  ) {
77
77
  const wasm = await CircuitsWasm.get();
78
- const constructorAbi = abi.functions.find(isConstructor);
79
- if (!constructorAbi) {
78
+ const constructorArtifact = artifact.functions.find(isConstructor);
79
+ if (!constructorArtifact) {
80
80
  throw new Error('Constructor not found.');
81
81
  }
82
- if (!constructorAbi.verificationKey) {
82
+ if (!constructorArtifact.verificationKey) {
83
83
  throw new Error('Missing verification key for the constructor.');
84
84
  }
85
85
 
86
- const functions = abi.functions.map(f => ({
86
+ const functions = artifact.functions.map(f => ({
87
87
  ...f,
88
88
  selector: FunctionSelector.fromNameAndParameters(f.name, f.parameters),
89
89
  }));
90
90
  const leaves = generateFunctionLeaves(functions, wasm);
91
91
  const root = computeFunctionTreeRoot(wasm, leaves);
92
- const functionData = FunctionData.fromAbi(constructorAbi);
93
- const vkHash = hashVKStr(constructorAbi.verificationKey, wasm);
92
+ const functionData = FunctionData.fromAbi(constructorArtifact);
93
+ const vkHash = hashVKStr(constructorArtifact.verificationKey, wasm);
94
94
  const argsHash = await computeVarArgsHash(wasm, args);
95
95
  const constructorHash = hashConstructor(wasm, functionData, argsHash, vkHash);
96
96
 
97
97
  const completeAddress = computeCompleteAddress(wasm, from, contractAddressSalt, root, constructorHash);
98
98
 
99
99
  const contractDao: ContractDao = {
100
- ...abi,
100
+ ...artifact,
101
101
  completeAddress,
102
102
  functions,
103
103
  portalContract,
@@ -110,23 +110,23 @@ export class ContractTree {
110
110
  }
111
111
 
112
112
  /**
113
- * Retrieve the ABI of a given function.
113
+ * Retrieve the artifact of a given function.
114
114
  * The function is identified by its selector, which represents a unique identifier for the function's signature.
115
115
  * Throws an error if the function with the provided selector is not found in the contract.
116
116
  *
117
117
  * @param selector - The function selector.
118
- * @returns The ABI object containing relevant information about the targeted function.
118
+ * @returns The artifact object containing relevant information about the targeted function.
119
119
  */
120
- public getFunctionAbi(selector: FunctionSelector) {
121
- const abi = this.contract.functions.find(f => f.selector.equals(selector));
122
- if (!abi) {
120
+ public getFunctionArtifact(selector: FunctionSelector) {
121
+ const artifact = this.contract.functions.find(f => f.selector.equals(selector));
122
+ if (!artifact) {
123
123
  throw new Error(
124
- `Unknown function. Selector ${selector.toString()} not found in the ABI of contract ${this.contract.completeAddress.address.toString()}. Expected one of: ${this.contract.functions
124
+ `Unknown function. Selector ${selector.toString()} not found in the artifact of contract ${this.contract.completeAddress.address.toString()}. Expected one of: ${this.contract.functions
125
125
  .map(f => f.selector.toString())
126
126
  .join(', ')}`,
127
127
  );
128
128
  }
129
- return abi;
129
+ return artifact;
130
130
  }
131
131
 
132
132
  /**
@@ -138,7 +138,7 @@ export class ContractTree {
138
138
  * @returns The bytecode of the function as a string.
139
139
  */
140
140
  public getBytecode(selector: FunctionSelector) {
141
- return this.getFunctionAbi(selector).bytecode;
141
+ return this.getFunctionArtifact(selector).bytecode;
142
142
  }
143
143
 
144
144
  /**
@@ -128,4 +128,10 @@ export interface Database extends ContractDatabase {
128
128
  * @returns A promise that resolves to an array of AztecAddress instances.
129
129
  */
130
130
  getCompleteAddresses(): Promise<CompleteAddress[]>;
131
+
132
+ /**
133
+ * Returns the estimated size in bytes of this db.
134
+ * @returns The estimated size in bytes of this db.
135
+ */
136
+ estimateSize(): number;
131
137
  }
@@ -6,7 +6,7 @@ import { MerkleTreeId, PublicKey } from '@aztec/types';
6
6
 
7
7
  import { MemoryContractDatabase } from '../contract_database/index.js';
8
8
  import { Database } from './database.js';
9
- import { NoteSpendingInfoDao } from './note_spending_info_dao.js';
9
+ import { NoteSpendingInfoDao, getNoteSpendingInfoDaoSize } from './note_spending_info_dao.js';
10
10
 
11
11
  /**
12
12
  * The MemoryDB class provides an in-memory implementation of a database to manage transactions and auxiliary data.
@@ -144,4 +144,12 @@ export class MemoryDB extends MemoryContractDatabase implements Database {
144
144
  public getCompleteAddresses(): Promise<CompleteAddress[]> {
145
145
  return Promise.resolve(this.addresses);
146
146
  }
147
+
148
+ public estimateSize() {
149
+ const notesSize = this.noteSpendingInfoTable.reduce((sum, note) => sum + getNoteSpendingInfoDaoSize(note), 0);
150
+ const treeRootsSize = this.treeRoots ? Object.entries(this.treeRoots).length * Fr.SIZE_IN_BYTES : 0;
151
+ const authWits = Object.entries(this.authWitnesses);
152
+ const authWitsSize = authWits.reduce((sum, [key, value]) => sum + key.length + value.length * Fr.SIZE_IN_BYTES, 0);
153
+ return notesSize + treeRootsSize + authWitsSize + this.addresses.length * CompleteAddress.SIZE_IN_BYTES;
154
+ }
147
155
  }
@@ -25,7 +25,7 @@ export interface NoteSpendingInfoDao {
25
25
  */
26
26
  notePreimage: NotePreimage;
27
27
  /**
28
- * Inner note hash of the note. This is customisable by the app circuit.
28
+ * Inner note hash of the note. This is customizable by the app circuit.
29
29
  * We can use this value to compute siloedNoteHash and uniqueSiloedNoteHash.
30
30
  */
31
31
  innerNoteHash: Fr;
@@ -62,3 +62,14 @@ export const createRandomNoteSpendingInfoDao = ({
62
62
  index,
63
63
  publicKey,
64
64
  });
65
+
66
+ /**
67
+ * Returns the size in bytes of a note spending info dao.
68
+ * @param note - The note.
69
+ * @returns - Its size in bytes.
70
+ */
71
+ export function getNoteSpendingInfoDaoSize(note: NoteSpendingInfoDao) {
72
+ // 7 fields + 1 bigint + 1 buffer size (4 bytes) + 1 buffer
73
+ const indexSize = Math.ceil(Math.log2(Number(note.index)));
74
+ return 7 * Fr.SIZE_IN_BYTES + indexSize + 4 + note.notePreimage.items.length * Fr.SIZE_IN_BYTES;
75
+ }
@@ -17,6 +17,7 @@ import { siloCommitment } from '@aztec/circuits.js/abis';
17
17
  import { Fr } from '@aztec/foundation/fields';
18
18
  import { createDebugLogger } from '@aztec/foundation/log';
19
19
  import { elapsed } from '@aztec/foundation/timer';
20
+ import { CircuitSimulationStats } from '@aztec/types/stats';
20
21
 
21
22
  /**
22
23
  * Represents the output of the proof creation process for init and inner private kernel circuit.
@@ -109,17 +110,17 @@ export class KernelProofCreator implements ProofCreator {
109
110
 
110
111
  public async createProofInit(privateInputs: PrivateKernelInputsInit): Promise<ProofOutput> {
111
112
  const wasm = await CircuitsWasm.get();
112
- const [time, result] = await elapsed(() => privateKernelSimInit(wasm, privateInputs));
113
+ const [duration, result] = await elapsed(() => privateKernelSimInit(wasm, privateInputs));
113
114
  if (result instanceof CircuitError) {
114
115
  throw new CircuitError(result.code, result.message);
115
116
  }
116
117
  this.log(`Simulated private kernel init`, {
117
118
  eventName: 'circuit-simulation',
118
119
  circuitName: 'private-kernel-init',
119
- duration: time.ms(),
120
+ duration,
120
121
  inputSize: privateInputs.toBuffer().length,
121
122
  outputSize: result.toBuffer().length,
122
- });
123
+ } satisfies CircuitSimulationStats);
123
124
  this.log('Skipping private kernel init proving...');
124
125
  const proof = makeEmptyProof();
125
126
 
@@ -131,17 +132,17 @@ export class KernelProofCreator implements ProofCreator {
131
132
 
132
133
  public async createProofInner(privateInputs: PrivateKernelInputsInner): Promise<ProofOutput> {
133
134
  const wasm = await CircuitsWasm.get();
134
- const [time, result] = await elapsed(() => privateKernelSimInner(wasm, privateInputs));
135
+ const [duration, result] = await elapsed(() => privateKernelSimInner(wasm, privateInputs));
135
136
  if (result instanceof CircuitError) {
136
137
  throw new CircuitError(result.code, result.message);
137
138
  }
138
139
  this.log(`Simulated private kernel inner`, {
139
140
  eventName: 'circuit-simulation',
140
141
  circuitName: 'private-kernel-inner',
141
- duration: time.ms(),
142
+ duration,
142
143
  inputSize: privateInputs.toBuffer().length,
143
144
  outputSize: result.toBuffer().length,
144
- });
145
+ } satisfies CircuitSimulationStats);
145
146
  this.log('Skipping private kernel inner proving...');
146
147
  const proof = makeEmptyProof();
147
148
 
@@ -154,17 +155,17 @@ export class KernelProofCreator implements ProofCreator {
154
155
  public async createProofOrdering(privateInputs: PrivateKernelInputsOrdering): Promise<ProofOutputFinal> {
155
156
  const wasm = await CircuitsWasm.get();
156
157
  this.log('Executing private kernel simulation ordering...');
157
- const [time, result] = await elapsed(() => privateKernelSimOrdering(wasm, privateInputs));
158
+ const [duration, result] = await elapsed(() => privateKernelSimOrdering(wasm, privateInputs));
158
159
  if (result instanceof CircuitError) {
159
160
  throw new CircuitError(result.code, result.message);
160
161
  }
161
162
  this.log(`Simulated private kernel ordering`, {
162
163
  eventName: 'circuit-simulation',
163
164
  circuitName: 'private-kernel-ordering',
164
- duration: time.ms(),
165
+ duration,
165
166
  inputSize: privateInputs.toBuffer().length,
166
167
  outputSize: result.toBuffer().length,
167
- });
168
+ } satisfies CircuitSimulationStats);
168
169
  this.log('Skipping private kernel ordering proving...');
169
170
  const proof = makeEmptyProof();
170
171
 
@@ -5,6 +5,7 @@ import { Fr } from '@aztec/foundation/fields';
5
5
  import { createDebugLogger } from '@aztec/foundation/log';
6
6
  import { Timer } from '@aztec/foundation/timer';
7
7
  import { AztecNode, KeyStore, L2BlockContext, L2BlockL2Logs, NoteSpendingInfo, PublicKey } from '@aztec/types';
8
+ import { NoteProcessorStats } from '@aztec/types/stats';
8
9
 
9
10
  import { Database, NoteSpendingInfoDao } from '../database/index.js';
10
11
  import { getAcirSimulator } from '../simulator/index.js';
@@ -23,16 +24,6 @@ interface ProcessedData {
23
24
  noteSpendingInfoDaos: NoteSpendingInfoDao[];
24
25
  }
25
26
 
26
- /** Accumulated stats for a note processor. */
27
- type NoteProcessorStats = {
28
- /** How many notes have been seen and trial-decrypted. */
29
- seen: number;
30
- /** How many notes were successfully decrypted. */
31
- decrypted: number;
32
- /** How many notes failed processing. */
33
- failed: number;
34
- };
35
-
36
27
  /**
37
28
  * NoteProcessor is responsible for decrypting logs and converting them to notes via their originating contracts
38
29
  * before storing them against their owner.
@@ -45,7 +36,7 @@ export class NoteProcessor {
45
36
  public readonly timer: Timer = new Timer();
46
37
 
47
38
  /** Stats accumulated for this processor. */
48
- public readonly stats: NoteProcessorStats = { seen: 0, decrypted: 0, failed: 0 };
39
+ public readonly stats: NoteProcessorStats = { seen: 0, decrypted: 0, failed: 0, blocks: 0, txs: 0 };
49
40
 
50
41
  constructor(
51
42
  /**
@@ -75,7 +66,7 @@ export class NoteProcessor {
75
66
  }
76
67
 
77
68
  /**
78
- * Returns synchronisation status (ie up to which block has been synced ) for this note processor.
69
+ * Returns synchronization status (ie up to which block has been synced ) for this note processor.
79
70
  */
80
71
  public get status() {
81
72
  return { syncedToBlock: this.syncedToBlock };
@@ -106,6 +97,7 @@ export class NoteProcessor {
106
97
 
107
98
  // Iterate over both blocks and encrypted logs.
108
99
  for (let blockIndex = 0; blockIndex < encryptedL2BlockLogs.length; ++blockIndex) {
100
+ this.stats.blocks++;
109
101
  const { txLogs } = encryptedL2BlockLogs[blockIndex];
110
102
  const block = l2BlockContexts[blockIndex].block;
111
103
  const dataStartIndexForBlock = block.startPrivateDataTreeSnapshot.nextAvailableLeafIndex;
@@ -117,6 +109,7 @@ export class NoteProcessor {
117
109
 
118
110
  // Iterate over all the encrypted logs and try decrypting them. If successful, store the note spending info.
119
111
  for (let indexOfTxInABlock = 0; indexOfTxInABlock < txLogs.length; ++indexOfTxInABlock) {
112
+ this.stats.txs++;
120
113
  const dataStartIndexForTx = dataStartIndexForBlock + indexOfTxInABlock * MAX_NEW_COMMITMENTS_PER_TX;
121
114
  const newCommitments = block.newCommitments.slice(
122
115
  indexOfTxInABlock * MAX_NEW_COMMITMENTS_PER_TX,
@@ -237,7 +230,7 @@ ${siloedNoteHash.toString()}'.
237
230
  If you can see that notification. Everything's fine.
238
231
  If that's not the case, and you can't find such a notification, something has gone wrong.
239
232
  There could be a problem with the way you've defined a custom note, or with the way you're
240
- serialising / deserialising / hashing / encrypting / decrypting that note.
233
+ serializing / deserializing / hashing / encrypting / decrypting that note.
241
234
  Please see the following github issue to track an improvement that we're working on:
242
235
  https://github.com/AztecProtocol/aztec-packages/issues/1641`;
243
236
  }
@@ -1,3 +1,4 @@
1
+ import { FunctionSelector } from '@aztec/circuits.js';
1
2
  import { AztecAddress } from '@aztec/foundation/aztec-address';
2
3
  import { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields';
3
4
  import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
@@ -6,9 +7,11 @@ import {
6
7
  CompleteAddress,
7
8
  ContractData,
8
9
  ExtendedContractData,
10
+ ExtendedUnencryptedL2Log,
9
11
  L2Block,
10
12
  L2BlockL2Logs,
11
13
  L2Tx,
14
+ LogId,
12
15
  NotePreimage,
13
16
  PXE,
14
17
  Tx,
@@ -37,6 +40,8 @@ export function createPXERpcServer(pxeService: PXE): JsonRpcServer {
37
40
  TxExecutionRequest,
38
41
  ContractData,
39
42
  ExtendedContractData,
43
+ ExtendedUnencryptedL2Log,
44
+ FunctionSelector,
40
45
  TxHash,
41
46
  EthAddress,
42
47
  Point,
@@ -46,6 +51,7 @@ export function createPXERpcServer(pxeService: PXE): JsonRpcServer {
46
51
  AuthWitness,
47
52
  L2Block,
48
53
  L2Tx,
54
+ LogId,
49
55
  },
50
56
  { Tx, TxReceipt, L2BlockL2Logs },
51
57
  false,