@aztec/pxe 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.75.0

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 (101) hide show
  1. package/dest/bin/index.d.ts +3 -0
  2. package/dest/bin/index.d.ts.map +1 -0
  3. package/dest/bin/index.js +5 -3
  4. package/dest/config/index.d.ts +46 -0
  5. package/dest/config/index.d.ts.map +1 -0
  6. package/dest/config/index.js +21 -18
  7. package/dest/config/package_info.d.ts +5 -0
  8. package/dest/config/package_info.d.ts.map +1 -0
  9. package/dest/config/package_info.js +2 -4
  10. package/dest/contract_data_oracle/index.d.ts +104 -0
  11. package/dest/contract_data_oracle/index.d.ts.map +1 -0
  12. package/dest/contract_data_oracle/index.js +79 -69
  13. package/dest/contract_data_oracle/private_functions_tree.d.ts +65 -0
  14. package/dest/contract_data_oracle/private_functions_tree.d.ts.map +1 -0
  15. package/dest/contract_data_oracle/private_functions_tree.js +50 -44
  16. package/dest/database/contracts/contract_artifact_db.d.ts +20 -0
  17. package/dest/database/contracts/contract_artifact_db.d.ts.map +1 -0
  18. package/dest/database/contracts/contract_artifact_db.js +2 -3
  19. package/dest/database/contracts/contract_instance_db.d.ts +19 -0
  20. package/dest/database/contracts/contract_instance_db.d.ts.map +1 -0
  21. package/dest/database/contracts/contract_instance_db.js +2 -3
  22. package/dest/database/index.d.ts +3 -0
  23. package/dest/database/index.d.ts.map +1 -0
  24. package/dest/database/index.js +1 -0
  25. package/dest/database/kv_pxe_database.d.ts +55 -0
  26. package/dest/database/kv_pxe_database.d.ts.map +1 -0
  27. package/dest/database/kv_pxe_database.js +259 -243
  28. package/dest/database/note_dao.d.ts +103 -0
  29. package/dest/database/note_dao.d.ts.map +1 -0
  30. package/dest/database/note_dao.js +43 -28
  31. package/dest/database/outgoing_note_dao.d.ts +73 -0
  32. package/dest/database/outgoing_note_dao.d.ts.map +1 -0
  33. package/dest/database/outgoing_note_dao.js +34 -20
  34. package/dest/database/pxe_database.d.ts +216 -0
  35. package/dest/database/pxe_database.d.ts.map +1 -0
  36. package/dest/database/pxe_database.js +2 -4
  37. package/dest/database/pxe_database_test_suite.d.ts +7 -0
  38. package/dest/database/pxe_database_test_suite.d.ts.map +1 -0
  39. package/dest/database/pxe_database_test_suite.js +151 -296
  40. package/dest/index.d.ts +15 -0
  41. package/dest/index.d.ts.map +1 -0
  42. package/dest/index.js +1 -0
  43. package/dest/kernel_oracle/index.d.ts +34 -0
  44. package/dest/kernel_oracle/index.d.ts.map +1 -0
  45. package/dest/kernel_oracle/index.js +6 -9
  46. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts +28 -0
  47. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
  48. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +66 -68
  49. package/dest/kernel_prover/hints/index.d.ts +2 -0
  50. package/dest/kernel_prover/hints/index.d.ts.map +1 -0
  51. package/dest/kernel_prover/hints/index.js +1 -0
  52. package/dest/kernel_prover/index.d.ts +3 -0
  53. package/dest/kernel_prover/index.d.ts.map +1 -0
  54. package/dest/kernel_prover/index.js +1 -0
  55. package/dest/kernel_prover/kernel_prover.d.ts +38 -0
  56. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -0
  57. package/dest/kernel_prover/kernel_prover.js +65 -60
  58. package/dest/kernel_prover/proving_data_oracle.d.ts +65 -0
  59. package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -0
  60. package/dest/kernel_prover/proving_data_oracle.js +2 -4
  61. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +10 -0
  62. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +1 -0
  63. package/dest/note_decryption_utils/add_public_values_to_payload.js +9 -8
  64. package/dest/pxe_http/index.d.ts +2 -0
  65. package/dest/pxe_http/index.d.ts.map +1 -0
  66. package/dest/pxe_http/index.js +1 -0
  67. package/dest/pxe_http/pxe_http_server.d.ts +16 -0
  68. package/dest/pxe_http/pxe_http_server.d.ts.map +1 -0
  69. package/dest/pxe_http/pxe_http_server.js +6 -8
  70. package/dest/pxe_service/error_enriching.d.ts +11 -0
  71. package/dest/pxe_service/error_enriching.d.ts.map +1 -0
  72. package/dest/pxe_service/error_enriching.js +13 -10
  73. package/dest/pxe_service/index.d.ts +4 -0
  74. package/dest/pxe_service/index.d.ts.map +1 -0
  75. package/dest/pxe_service/index.js +1 -0
  76. package/dest/pxe_service/pxe_service.d.ts +98 -0
  77. package/dest/pxe_service/pxe_service.d.ts.map +1 -0
  78. package/dest/pxe_service/pxe_service.js +290 -282
  79. package/dest/pxe_service/test/pxe_test_suite.d.ts +3 -0
  80. package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -0
  81. package/dest/pxe_service/test/pxe_test_suite.js +27 -40
  82. package/dest/simulator/index.d.ts +10 -0
  83. package/dest/simulator/index.d.ts.map +1 -0
  84. package/dest/simulator/index.js +3 -1
  85. package/dest/simulator_oracle/index.d.ts +129 -0
  86. package/dest/simulator_oracle/index.d.ts.map +1 -0
  87. package/dest/simulator_oracle/index.js +231 -266
  88. package/dest/simulator_oracle/tagging_utils.d.ts +16 -0
  89. package/dest/simulator_oracle/tagging_utils.d.ts.map +1 -0
  90. package/dest/simulator_oracle/tagging_utils.js +6 -4
  91. package/dest/synchronizer/index.d.ts +2 -0
  92. package/dest/synchronizer/index.d.ts.map +1 -0
  93. package/dest/synchronizer/index.js +1 -0
  94. package/dest/synchronizer/synchronizer.d.ts +30 -0
  95. package/dest/synchronizer/synchronizer.d.ts.map +1 -0
  96. package/dest/synchronizer/synchronizer.js +42 -42
  97. package/dest/utils/create_pxe_service.d.ts +16 -0
  98. package/dest/utils/create_pxe_service.d.ts.map +1 -0
  99. package/dest/utils/create_pxe_service.js +9 -9
  100. package/package.json +15 -15
  101. package/src/pxe_service/pxe_service.ts +10 -5
@@ -0,0 +1,16 @@
1
+ import { type Fr, IndexedTaggingSecret } from '@aztec/circuits.js';
2
+ export declare const WINDOW_HALF_SIZE = 10;
3
+ export declare function getIndexedTaggingSecretsForTheWindow(secretsAndWindows: {
4
+ appTaggingSecret: Fr;
5
+ leftMostIndex: number;
6
+ rightMostIndex: number;
7
+ }[]): IndexedTaggingSecret[];
8
+ /**
9
+ * Creates a map from app tagging secret to initial index.
10
+ * @param indexedTaggingSecrets - The indexed tagging secrets to get the initial indexes from.
11
+ * @returns The map from app tagging secret to initial index.
12
+ */
13
+ export declare function getInitialIndexesMap(indexedTaggingSecrets: IndexedTaggingSecret[]): {
14
+ [k: string]: number;
15
+ };
16
+ //# sourceMappingURL=tagging_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagging_utils.d.ts","sourceRoot":"","sources":["../../src/simulator_oracle/tagging_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE;IAAE,gBAAgB,EAAE,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,GAC3F,oBAAoB,EAAE,CAQxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAQ3G"}
@@ -3,8 +3,8 @@ import { IndexedTaggingSecret } from '@aztec/circuits.js';
3
3
  export const WINDOW_HALF_SIZE = 10;
4
4
  export function getIndexedTaggingSecretsForTheWindow(secretsAndWindows) {
5
5
  const secrets = [];
6
- for (const secretAndWindow of secretsAndWindows){
7
- for(let i = secretAndWindow.leftMostIndex; i <= secretAndWindow.rightMostIndex; i++){
6
+ for (const secretAndWindow of secretsAndWindows) {
7
+ for (let i = secretAndWindow.leftMostIndex; i <= secretAndWindow.rightMostIndex; i++) {
8
8
  secrets.push(new IndexedTaggingSecret(secretAndWindow.appTaggingSecret, i));
9
9
  }
10
10
  }
@@ -14,10 +14,12 @@ export function getIndexedTaggingSecretsForTheWindow(secretsAndWindows) {
14
14
  * Creates a map from app tagging secret to initial index.
15
15
  * @param indexedTaggingSecrets - The indexed tagging secrets to get the initial indexes from.
16
16
  * @returns The map from app tagging secret to initial index.
17
- */ export function getInitialIndexesMap(indexedTaggingSecrets) {
17
+ */
18
+ export function getInitialIndexesMap(indexedTaggingSecrets) {
18
19
  const initialIndexes = {};
19
- for (const indexedTaggingSecret of indexedTaggingSecrets){
20
+ for (const indexedTaggingSecret of indexedTaggingSecrets) {
20
21
  initialIndexes[indexedTaggingSecret.appTaggingSecret.toString()] = indexedTaggingSecret.index;
21
22
  }
22
23
  return initialIndexes;
23
24
  }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnZ2luZ191dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3Jfb3JhY2xlL3RhZ2dpbmdfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkUsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQyxNQUFNLFVBQVUsb0NBQW9DLENBQ2xELGlCQUE0RjtJQUU1RixNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxlQUFlLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxxQkFBNkM7SUFDaEYsTUFBTSxjQUFjLEdBQTRCLEVBQUUsQ0FBQztJQUVuRCxLQUFLLE1BQU0sb0JBQW9CLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN6RCxjQUFjLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7SUFDaEcsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ export * from './synchronizer.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/synchronizer/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -1 +1,2 @@
1
1
  export * from './synchronizer.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2hyb25pemVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUMifQ==
@@ -0,0 +1,30 @@
1
+ import { type AztecNode, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/circuit-types';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import { type L2TipsStore } from '@aztec/kv-store/stores';
4
+ import { type PXEConfig } from '../config/index.js';
5
+ import { type PxeDatabase } from '../database/index.js';
6
+ /**
7
+ * The Synchronizer class manages the synchronization with the aztec node, allowing PXE to retrieve the
8
+ * latest block header and handle reorgs.
9
+ * It provides methods to trigger a sync and get the block number we are syncec to
10
+ * details, and fetch transactions by hash.
11
+ */
12
+ export declare class Synchronizer implements L2BlockStreamEventHandler {
13
+ private node;
14
+ private db;
15
+ private l2TipsStore;
16
+ private initialSyncBlockNumber;
17
+ private log;
18
+ protected readonly blockStream: L2BlockStream;
19
+ constructor(node: AztecNode, db: PxeDatabase, l2TipsStore: L2TipsStore, config?: Partial<Pick<PXEConfig, 'l2StartingBlock'>>, loggerOrSuffix?: string | Logger);
20
+ protected createBlockStream(config: Partial<Pick<PXEConfig, 'l2StartingBlock'>>): L2BlockStream;
21
+ /** Handle events emitted by the block stream. */
22
+ handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
23
+ /**
24
+ * Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
25
+ * recent data (e.g. notes), and handling any reorgs that might have occurred.
26
+ */
27
+ sync(): Promise<void>;
28
+ getSynchedBlockNumber(): Promise<number>;
29
+ }
30
+ //# sourceMappingURL=synchronizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,yBAAyB;IAM1D,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,WAAW;IAPrB,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,GAAG,CAAS;IACpB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;gBAGpC,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,WAAW,EACf,WAAW,EAAE,WAAW,EAChC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAM,EACxD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IASlC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAM/E,iDAAiD;IACpC,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7E;;;OAGG;IACU,IAAI;IAeJ,qBAAqB;CAGnC"}
@@ -1,4 +1,4 @@
1
- import { L2BlockStream } from '@aztec/circuit-types';
1
+ import { L2BlockStream, } from '@aztec/circuit-types';
2
2
  import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  /**
@@ -6,63 +6,62 @@ import { createLogger } from '@aztec/foundation/log';
6
6
  * latest block header and handle reorgs.
7
7
  * It provides methods to trigger a sync and get the block number we are syncec to
8
8
  * details, and fetch transactions by hash.
9
- */ export class Synchronizer {
10
- node;
11
- db;
12
- l2TipsStore;
13
- initialSyncBlockNumber;
14
- log;
15
- blockStream;
16
- constructor(node, db, l2TipsStore, config = {}, loggerOrSuffix){
9
+ */
10
+ export class Synchronizer {
11
+ constructor(node, db, l2TipsStore, config = {}, loggerOrSuffix) {
17
12
  this.node = node;
18
13
  this.db = db;
19
14
  this.l2TipsStore = l2TipsStore;
20
15
  this.initialSyncBlockNumber = INITIAL_L2_BLOCK_NUM - 1;
21
- this.log = !loggerOrSuffix || typeof loggerOrSuffix === 'string' ? createLogger(loggerOrSuffix ? `pxe:synchronizer:${loggerOrSuffix}` : `pxe:synchronizer`) : loggerOrSuffix;
16
+ this.log =
17
+ !loggerOrSuffix || typeof loggerOrSuffix === 'string'
18
+ ? createLogger(loggerOrSuffix ? `pxe:synchronizer:${loggerOrSuffix}` : `pxe:synchronizer`)
19
+ : loggerOrSuffix;
22
20
  this.blockStream = this.createBlockStream(config);
23
21
  }
24
22
  createBlockStream(config) {
25
23
  return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
26
- startingBlock: config.l2StartingBlock
24
+ startingBlock: config.l2StartingBlock,
27
25
  });
28
26
  }
29
- /** Handle events emitted by the block stream. */ async handleBlockStreamEvent(event) {
27
+ /** Handle events emitted by the block stream. */
28
+ async handleBlockStreamEvent(event) {
30
29
  await this.l2TipsStore.handleBlockStreamEvent(event);
31
- switch(event.type){
32
- case 'blocks-added':
33
- {
34
- const lastBlock = event.blocks.at(-1);
35
- this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
36
- blockHash: lastBlock.hash(),
37
- archive: lastBlock.archive.root.toString(),
38
- header: lastBlock.header.toInspect()
39
- });
40
- await this.db.setHeader(lastBlock.header);
41
- break;
42
- }
43
- case 'chain-pruned':
44
- {
45
- this.log.warn(`Pruning data after block ${event.blockNumber} due to reorg`);
46
- // We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
47
- await this.db.unnullifyNotesAfter(event.blockNumber);
48
- await this.db.removeNotesAfter(event.blockNumber);
49
- // Remove all note tagging indexes to force a full resync. This is suboptimal, but unless we track the
50
- // block number in which each index is used it's all we can do.
51
- await this.db.resetNoteSyncData();
52
- // Update the header to the last block.
53
- await this.db.setHeader(await this.node.getBlockHeader(event.blockNumber));
54
- break;
55
- }
30
+ switch (event.type) {
31
+ case 'blocks-added': {
32
+ const lastBlock = event.blocks.at(-1);
33
+ this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
34
+ blockHash: lastBlock.hash(),
35
+ archive: lastBlock.archive.root.toString(),
36
+ header: lastBlock.header.toInspect(),
37
+ });
38
+ await this.db.setHeader(lastBlock.header);
39
+ break;
40
+ }
41
+ case 'chain-pruned': {
42
+ this.log.warn(`Pruning data after block ${event.blockNumber} due to reorg`);
43
+ // We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
44
+ await this.db.unnullifyNotesAfter(event.blockNumber);
45
+ await this.db.removeNotesAfter(event.blockNumber);
46
+ // Remove all note tagging indexes to force a full resync. This is suboptimal, but unless we track the
47
+ // block number in which each index is used it's all we can do.
48
+ await this.db.resetNoteSyncData();
49
+ // Update the header to the last block.
50
+ await this.db.setHeader(await this.node.getBlockHeader(event.blockNumber));
51
+ break;
52
+ }
56
53
  }
57
54
  }
58
55
  /**
59
- * Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
60
- * recent data (e.g. notes), and handling any reorgs that might have occurred.
61
- */ async sync() {
56
+ * Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
57
+ * recent data (e.g. notes), and handling any reorgs that might have occurred.
58
+ */
59
+ async sync() {
62
60
  let currentHeader;
63
61
  try {
64
62
  currentHeader = await this.db.getBlockHeader();
65
- } catch (e) {
63
+ }
64
+ catch (e) {
66
65
  this.log.debug('Header is not set, requesting from the node');
67
66
  }
68
67
  if (!currentHeader) {
@@ -72,6 +71,7 @@ import { createLogger } from '@aztec/foundation/log';
72
71
  await this.blockStream.sync();
73
72
  }
74
73
  async getSynchedBlockNumber() {
75
- return await this.db.getBlockNumber() ?? this.initialSyncBlockNumber;
74
+ return (await this.db.getBlockNumber()) ?? this.initialSyncBlockNumber;
76
75
  }
77
76
  }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGFBQWEsR0FHZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU1sRTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBS3ZCLFlBQ1UsSUFBZSxFQUNmLEVBQWUsRUFDZixXQUF3QixFQUNoQyxTQUFzRCxFQUFFLEVBQ3hELGNBQWdDO1FBSnhCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFQMUIsMkJBQXNCLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBV3hELElBQUksQ0FBQyxHQUFHO1lBQ04sQ0FBQyxjQUFjLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUTtnQkFDbkQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7Z0JBQzFGLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLGlCQUFpQixDQUFDLE1BQW1EO1FBQzdFLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUM1RixhQUFhLEVBQUUsTUFBTSxDQUFDLGVBQWU7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlEQUFpRDtJQUMxQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBeUI7UUFDM0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDaEUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQzFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtpQkFDckMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEtBQUssQ0FBQyxXQUFXLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RSx3SEFBd0g7Z0JBQ3hILE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2xELHNHQUFzRztnQkFDdEcsK0RBQStEO2dCQUMvRCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDbEMsdUNBQXVDO2dCQUN2QyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksYUFBYSxDQUFDO1FBRWxCLElBQUksQ0FBQztZQUNILGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsdUdBQXVHO1lBQ3ZHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUI7UUFDaEMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUN6RSxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,16 @@
1
+ import { type AztecNode, type PrivateKernelProver } from '@aztec/circuit-types';
2
+ import { type PXEServiceConfig } from '../config/index.js';
3
+ import { PXEService } from '../pxe_service/pxe_service.js';
4
+ /**
5
+ * Create and start an PXEService instance with the given AztecNode.
6
+ * If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
7
+ * Returns a Promise that resolves to the started PXEService instance.
8
+ *
9
+ * @param aztecNode - The AztecNode instance to be used by the server.
10
+ * @param config - The PXE Service Config to use
11
+ * @param options - (Optional) Optional information for creating an PXEService.
12
+ * @param proofCreator - An optional proof creator to use in place of any other configuration
13
+ * @returns A Promise that resolves to the started PXEService instance.
14
+ */
15
+ export declare function createPXEService(aztecNode: AztecNode, config: PXEServiceConfig, useLogSuffix?: string | boolean | undefined, proofCreator?: PrivateKernelProver): Promise<PXEService>;
16
+ //# sourceMappingURL=create_pxe_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_pxe_service.d.ts","sourceRoot":"","sources":["../../src/utils/create_pxe_service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQhF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,YAAY,GAAE,MAAM,GAAG,OAAO,GAAG,SAAqB,EACtD,YAAY,CAAC,EAAE,mBAAmB,uBAwBnC"}
@@ -18,19 +18,20 @@ import { PXEService } from '../pxe_service/pxe_service.js';
18
18
  * @param options - (Optional) Optional information for creating an PXEService.
19
19
  * @param proofCreator - An optional proof creator to use in place of any other configuration
20
20
  * @returns A Promise that resolves to the started PXEService instance.
21
- */ export async function createPXEService(aztecNode, config, useLogSuffix = undefined, proofCreator) {
22
- const logSuffix = typeof useLogSuffix === 'boolean' ? useLogSuffix ? randomBytes(3).toString('hex') : undefined : useLogSuffix;
21
+ */
22
+ export async function createPXEService(aztecNode, config, useLogSuffix = undefined, proofCreator) {
23
+ const logSuffix = typeof useLogSuffix === 'boolean' ? (useLogSuffix ? randomBytes(3).toString('hex') : undefined) : useLogSuffix;
23
24
  const l1Contracts = await aztecNode.getL1ContractAddresses();
24
25
  const configWithContracts = {
25
26
  ...config,
26
- l1Contracts
27
+ l1Contracts,
27
28
  };
28
29
  const keyStore = new KeyStore(await createStore('pxe_key_store', configWithContracts, createLogger('pxe:keystore:lmdb')));
29
30
  const store = await createStore('pxe_data', configWithContracts, createLogger('pxe:data:lmdb'));
30
31
  const db = await KVPxeDatabase.create(store);
31
32
  const tips = new L2TipsStore(store, 'pxe');
32
33
  const simulationProvider = new WASMSimulator();
33
- const prover = proofCreator ?? await createProver(config, simulationProvider, logSuffix);
34
+ const prover = proofCreator ?? (await createProver(config, simulationProvider, logSuffix));
34
35
  const pxe = new PXEService(keyStore, aztecNode, db, tips, prover, simulationProvider, config, logSuffix);
35
36
  await pxe.init();
36
37
  return pxe;
@@ -38,12 +39,11 @@ import { PXEService } from '../pxe_service/pxe_service.js';
38
39
  function createProver(config, simulationProvider, logSuffix) {
39
40
  if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
40
41
  return new BBWASMBundlePrivateKernelProver(simulationProvider, 16);
41
- } else {
42
+ }
43
+ else {
42
44
  const bbConfig = config;
43
45
  const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
44
- return BBNativePrivateKernelProver.new({
45
- bbSkipCleanup: false,
46
- ...bbConfig
47
- }, simulationProvider, log);
46
+ return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, simulationProvider, log);
48
47
  }
49
48
  }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3B4ZV9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWF0ZV9weGVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBMkIsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsU0FBb0IsRUFDcEIsTUFBd0IsRUFDeEIsZUFBNkMsU0FBUyxFQUN0RCxZQUFrQztJQUVsQyxNQUFNLFNBQVMsR0FDYixPQUFPLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRWpILE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0QsTUFBTSxtQkFBbUIsR0FBRztRQUMxQixHQUFHLE1BQU07UUFDVCxXQUFXO0tBQ1EsQ0FBQztJQUV0QixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFFRixNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxFQUFFLEdBQUcsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLGtCQUFrQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekcsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBd0IsRUFBRSxrQkFBc0MsRUFBRSxTQUFrQjtJQUN4RyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sUUFBUSxHQUFHLE1BQ0MsQ0FBQztRQUNuQixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsT0FBTywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekcsQ0FBQztBQUNILENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/pxe",
3
- "version": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
3
+ "version": "0.75.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -23,7 +23,7 @@
23
23
  "clean": "rm -rf ./dest .tsbuildinfo ./src/config/package_info.ts",
24
24
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
25
25
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
26
- "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
26
+ "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
27
27
  "start": "LOG_LEVEL=${LOG_LEVEL:-debug} && node ./dest/bin/index.js",
28
28
  "generate": "node ./scripts/generate_package_info.js"
29
29
  },
@@ -66,19 +66,19 @@
66
66
  ]
67
67
  },
68
68
  "dependencies": {
69
- "@aztec/bb-prover": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
70
- "@aztec/bb.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
71
- "@aztec/builder": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
72
- "@aztec/circuit-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
73
- "@aztec/circuits.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
74
- "@aztec/ethereum": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
75
- "@aztec/foundation": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
76
- "@aztec/key-store": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
77
- "@aztec/kv-store": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
78
- "@aztec/noir-protocol-circuits-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
79
- "@aztec/protocol-contracts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
80
- "@aztec/simulator": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
81
- "@aztec/types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
69
+ "@aztec/bb-prover": "0.75.0",
70
+ "@aztec/bb.js": "0.75.0",
71
+ "@aztec/builder": "0.75.0",
72
+ "@aztec/circuit-types": "0.75.0",
73
+ "@aztec/circuits.js": "0.75.0",
74
+ "@aztec/ethereum": "0.75.0",
75
+ "@aztec/foundation": "0.75.0",
76
+ "@aztec/key-store": "0.75.0",
77
+ "@aztec/kv-store": "0.75.0",
78
+ "@aztec/noir-protocol-circuits-types": "0.75.0",
79
+ "@aztec/protocol-contracts": "0.75.0",
80
+ "@aztec/simulator": "0.75.0",
81
+ "@aztec/types": "0.75.0",
82
82
  "@msgpack/msgpack": "^3.0.0-beta2",
83
83
  "@noir-lang/types": "workspace:*",
84
84
  "koa": "^2.14.2",
@@ -42,7 +42,11 @@ import type {
42
42
  PartialAddress,
43
43
  PrivateKernelTailCircuitPublicInputs,
44
44
  } from '@aztec/circuits.js';
45
- import { computeContractAddressFromInstance, getContractClassFromArtifact } from '@aztec/circuits.js/contract';
45
+ import {
46
+ computeContractAddressFromInstance,
47
+ computeContractClassId,
48
+ getContractClassFromArtifact,
49
+ } from '@aztec/circuits.js/contract';
46
50
  import { computeNoteHashNonce, siloNullifier } from '@aztec/circuits.js/hash';
47
51
  import { computeAddressSecret } from '@aztec/circuits.js/keys';
48
52
  import {
@@ -236,7 +240,7 @@ export class PXEService implements PXE {
236
240
  }
237
241
 
238
242
  public async registerContractClass(artifact: ContractArtifact): Promise<void> {
239
- const { id: contractClassId } = await getContractClassFromArtifact(artifact);
243
+ const contractClassId = await computeContractClassId(await getContractClassFromArtifact(artifact));
240
244
  await this.db.addContractArtifact(contractClassId, artifact);
241
245
  this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
242
246
  }
@@ -248,9 +252,10 @@ export class PXEService implements PXE {
248
252
  if (artifact) {
249
253
  // If the user provides an artifact, validate it against the expected class id and register it
250
254
  const contractClass = await getContractClassFromArtifact(artifact);
251
- if (!contractClass.id.equals(instance.contractClassId)) {
255
+ const contractClassId = await computeContractClassId(contractClass);
256
+ if (!contractClassId.equals(instance.contractClassId)) {
252
257
  throw new Error(
253
- `Artifact does not match expected class id (computed ${contractClass.id} but instance refers to ${instance.contractClassId})`,
258
+ `Artifact does not match expected class id (computed ${contractClassId} but instance refers to ${instance.contractClassId})`,
254
259
  );
255
260
  }
256
261
  const computedAddress = await computeContractAddressFromInstance(instance);
@@ -258,7 +263,7 @@ export class PXEService implements PXE {
258
263
  throw new Error('Added a contract in which the address does not match the contract instance.');
259
264
  }
260
265
 
261
- await this.db.addContractArtifact(contractClass.id, artifact);
266
+ await this.db.addContractArtifact(contractClassId, artifact);
262
267
 
263
268
  const publicFunctionSignatures = artifact.functions
264
269
  .filter(fn => fn.functionType === FunctionType.PUBLIC)