@aztec/pxe 0.28.1 → 0.30.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 (48) hide show
  1. package/dest/contract_data_oracle/index.d.ts +23 -9
  2. package/dest/contract_data_oracle/index.d.ts.map +1 -1
  3. package/dest/contract_data_oracle/index.js +55 -39
  4. package/dest/contract_data_oracle/private_functions_tree.d.ts +7 -15
  5. package/dest/contract_data_oracle/private_functions_tree.d.ts.map +1 -1
  6. package/dest/contract_data_oracle/private_functions_tree.js +10 -15
  7. package/dest/database/contracts/contract_instance_db.d.ts +2 -0
  8. package/dest/database/contracts/contract_instance_db.d.ts.map +1 -1
  9. package/dest/database/kv_pxe_database.d.ts +3 -4
  10. package/dest/database/kv_pxe_database.d.ts.map +1 -1
  11. package/dest/database/kv_pxe_database.js +16 -17
  12. package/dest/database/pxe_database.d.ts +5 -2
  13. package/dest/database/pxe_database.d.ts.map +1 -1
  14. package/dest/kernel_oracle/index.d.ts +1 -0
  15. package/dest/kernel_oracle/index.d.ts.map +1 -1
  16. package/dest/kernel_prover/kernel_prover.js +4 -4
  17. package/dest/pxe_http/pxe_http_server.d.ts.map +1 -1
  18. package/dest/pxe_http/pxe_http_server.js +2 -4
  19. package/dest/pxe_service/create_pxe_service.d.ts.map +1 -1
  20. package/dest/pxe_service/create_pxe_service.js +8 -2
  21. package/dest/pxe_service/pxe_service.d.ts +8 -6
  22. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  23. package/dest/pxe_service/pxe_service.js +36 -37
  24. package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
  25. package/dest/pxe_service/test/pxe_test_suite.js +26 -6
  26. package/dest/simulator_oracle/index.d.ts +1 -1
  27. package/dest/simulator_oracle/index.d.ts.map +1 -1
  28. package/dest/simulator_oracle/index.js +11 -14
  29. package/package.json +12 -12
  30. package/src/contract_data_oracle/index.ts +63 -50
  31. package/src/contract_data_oracle/private_functions_tree.ts +12 -17
  32. package/src/database/contracts/contract_instance_db.ts +3 -0
  33. package/src/database/kv_pxe_database.ts +17 -17
  34. package/src/database/pxe_database.ts +6 -2
  35. package/src/kernel_prover/kernel_prover.ts +3 -3
  36. package/src/pxe_http/pxe_http_server.ts +0 -4
  37. package/src/pxe_service/create_pxe_service.ts +7 -1
  38. package/src/pxe_service/pxe_service.ts +42 -40
  39. package/src/pxe_service/test/pxe_test_suite.ts +37 -6
  40. package/src/simulator_oracle/index.ts +10 -15
  41. package/dest/contract_database/index.d.ts +0 -2
  42. package/dest/contract_database/index.d.ts.map +0 -1
  43. package/dest/contract_database/index.js +0 -2
  44. package/dest/contract_database/memory_contract_database.d.ts +0 -43
  45. package/dest/contract_database/memory_contract_database.d.ts.map +0 -1
  46. package/dest/contract_database/memory_contract_database.js +0 -51
  47. package/src/contract_database/index.ts +0 -1
  48. package/src/contract_database/memory_contract_database.ts +0 -58
@@ -1,6 +1,5 @@
1
- import { ContractDatabase } from '@aztec/circuit-types';
2
- import { AztecAddress, ContractFunctionDao, MembershipWitness } from '@aztec/circuits.js';
3
- import { FunctionDebugMetadata, FunctionSelector } from '@aztec/foundation/abi';
1
+ import { AztecAddress, MembershipWitness } from '@aztec/circuits.js';
2
+ import { ContractArtifact, FunctionArtifact, FunctionDebugMetadata, FunctionSelector } from '@aztec/foundation/abi';
4
3
  import { Fr } from '@aztec/foundation/fields';
5
4
  import { ContractClass, ContractInstance } from '@aztec/types/contracts';
6
5
  import { ContractArtifactDatabase } from '../database/contracts/contract_artifact_db.js';
@@ -14,12 +13,16 @@ import { ContractInstanceDatabase } from '../database/contracts/contract_instanc
14
13
  */
15
14
  export declare class ContractDataOracle {
16
15
  private db;
17
- private trees;
18
- constructor(db: ContractDatabase & ContractArtifactDatabase & ContractInstanceDatabase);
16
+ /** Map from contract class id to private function tree. */
17
+ private contractClasses;
18
+ /** Map from address to contract instance. */
19
+ private contractInstances;
20
+ constructor(db: ContractArtifactDatabase & ContractInstanceDatabase);
19
21
  /** Returns a contract instance for a given address. Throws if not found. */
20
22
  getContractInstance(contractAddress: AztecAddress): Promise<ContractInstance>;
21
- /** Returns a contract class for a given id. Throws if not found. */
23
+ /** Returns a contract class for a given class id. Throws if not found. */
22
24
  getContractClass(contractClassId: Fr): Promise<ContractClass>;
25
+ getContractArtifact(contractClassId: Fr): Promise<ContractArtifact>;
23
26
  /**
24
27
  * Retrieve the portal contract address associated with the given contract address.
25
28
  * This function searches for the corresponding contract tree in the local cache and returns the portal contract address.
@@ -39,7 +42,7 @@ export declare class ContractDataOracle {
39
42
  * @param selector - The function selector.
40
43
  * @returns The corresponding function's artifact as an object.
41
44
  */
42
- getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<ContractFunctionDao>;
45
+ getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<FunctionArtifact>;
43
46
  /**
44
47
  * Retrieves the artifact of a specified function within a given contract.
45
48
  * The function is identified by its name, which is unique within a contract.
@@ -49,7 +52,7 @@ export declare class ContractDataOracle {
49
52
  * @param functionName - The name of the function.
50
53
  * @returns The corresponding function's artifact as an object
51
54
  */
52
- getFunctionArtifactByName(contractAddress: AztecAddress, functionName: string): Promise<ContractFunctionDao | undefined>;
55
+ getFunctionArtifactByName(contractAddress: AztecAddress, functionName: string): Promise<FunctionArtifact | undefined>;
53
56
  /**
54
57
  * Retrieves the debug metadata of a specified function within a given contract.
55
58
  * The function is identified by its selector, which is a unique code generated from the function's signature.
@@ -92,6 +95,17 @@ export declare class ContractDataOracle {
92
95
  * @returns A Promise that resolves to the MembershipWitness instance.
93
96
  */
94
97
  getVkMembershipWitness(): Promise<MembershipWitness<3>>;
98
+ /**
99
+ * Retrieve or create a ContractTree instance based on the provided class id.
100
+ * If an existing tree with the same class id is found in the cache, it will be returned.
101
+ * Otherwise, a new ContractTree instance will be created using the contract data from the database
102
+ * and added to the cache before returning.
103
+ *
104
+ * @param classId - The class id of the contract for which the ContractTree is required.
105
+ * @returns A ContractTree instance associated with the specified contract address.
106
+ * @throws An Error if the contract is not found in the ContractDatabase.
107
+ */
108
+ private getTreeForClassId;
95
109
  /**
96
110
  * Retrieve or create a ContractTree instance based on the provided AztecAddress.
97
111
  * If an existing tree with the same contract address is found in the cache, it will be returned.
@@ -102,6 +116,6 @@ export declare class ContractDataOracle {
102
116
  * @returns A ContractTree instance associated with the specified contract address.
103
117
  * @throws An Error if the contract is not found in the ContractDatabase.
104
118
  */
105
- private getTree;
119
+ private getTreeForAddress;
106
120
  }
107
121
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_data_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAGzF;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,KAAK,CAA8B;gBAEvB,EAAE,EAAE,gBAAgB,GAAG,wBAAwB,GAAG,wBAAwB;IAE9F,4EAA4E;IAC/D,mBAAmB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ1F,oEAAoE;IACvD,gBAAgB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAS1E;;;;;;;;OAQG;IACU,wBAAwB,CAAC,eAAe,EAAE,YAAY;IAKnE;;;;;;;;OAQG;IACU,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAK1F;;;;;;;;OAQG;IACU,yBAAyB,CACpC,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAK3C;;;;;;;;;OASG;IACU,wBAAwB,CACnC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAW7C;;;;;;;;;OASG;IACU,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAKlF;;;;;;;;OAQG;IACU,4BAA4B,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAKnG;;;;;;;;OAQG;IACU,sBAAsB;IAKnC;;;;;;;;;OASG;YACW,OAAO;CActB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_data_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAkB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAGzF;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,EAAE;IALtB,2DAA2D;IAC3D,OAAO,CAAC,eAAe,CAAgD;IACvE,6CAA6C;IAC7C,OAAO,CAAC,iBAAiB,CAA4C;gBAEjD,EAAE,EAAE,wBAAwB,GAAG,wBAAwB;IAE3E,4EAA4E;IAC/D,mBAAmB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAW1F,0EAA0E;IAC7D,gBAAgB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAK7D,mBAAmB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKhF;;;;;;;;OAQG;IACU,wBAAwB,CAAC,eAAe,EAAE,YAAY;IAKnE;;;;;;;;OAQG;IACU,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAK1F;;;;;;;;OAQG;IACU,yBAAyB,CACpC,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAKxC;;;;;;;;;OASG;IACU,wBAAwB,CACnC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAM7C;;;;;;;;;OASG;IACU,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAKlF;;;;;;;;OAQG;IACU,4BAA4B,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAKnG;;;;;;;;OAQG;IACU,sBAAsB;IAKnC;;;;;;;;;OASG;YACW,iBAAiB;IAY/B;;;;;;;;;OASG;YACW,iBAAiB;CAIhC"}
@@ -1,4 +1,5 @@
1
- import { MembershipWitness, VK_TREE_HEIGHT, getContractClassFromArtifact, } from '@aztec/circuits.js';
1
+ import { MembershipWitness, VK_TREE_HEIGHT } from '@aztec/circuits.js';
2
+ import { getFunctionDebugMetadata, } from '@aztec/foundation/abi';
2
3
  import { ContractClassNotFoundError, ContractNotFoundError } from '@aztec/simulator';
3
4
  import { PrivateFunctionsTree } from './private_functions_tree.js';
4
5
  /**
@@ -11,24 +12,30 @@ import { PrivateFunctionsTree } from './private_functions_tree.js';
11
12
  export class ContractDataOracle {
12
13
  constructor(db) {
13
14
  this.db = db;
14
- this.trees = [];
15
+ /** Map from contract class id to private function tree. */
16
+ this.contractClasses = new Map();
17
+ /** Map from address to contract instance. */
18
+ this.contractInstances = new Map();
15
19
  }
16
20
  /** Returns a contract instance for a given address. Throws if not found. */
17
21
  async getContractInstance(contractAddress) {
18
- const instance = await this.db.getContractInstance(contractAddress);
19
- if (!instance) {
20
- throw new ContractNotFoundError(contractAddress.toString());
22
+ if (!this.contractInstances.has(contractAddress.toString())) {
23
+ const instance = await this.db.getContractInstance(contractAddress);
24
+ if (!instance) {
25
+ throw new ContractNotFoundError(contractAddress.toString());
26
+ }
27
+ this.contractInstances.set(contractAddress.toString(), instance);
21
28
  }
22
- return instance;
29
+ return this.contractInstances.get(contractAddress.toString());
23
30
  }
24
- /** Returns a contract class for a given id. Throws if not found. */
31
+ /** Returns a contract class for a given class id. Throws if not found. */
25
32
  async getContractClass(contractClassId) {
26
- const contractArtifact = await this.db.getContractArtifact(contractClassId);
27
- if (!contractArtifact) {
28
- throw new ContractClassNotFoundError(contractClassId.toString());
29
- }
30
- // TODO(@spalladino): Cache this computation using the trees.
31
- return getContractClassFromArtifact(contractArtifact);
33
+ const tree = await this.getTreeForClassId(contractClassId);
34
+ return tree.getContractClass();
35
+ }
36
+ async getContractArtifact(contractClassId) {
37
+ const tree = await this.getTreeForClassId(contractClassId);
38
+ return tree.getArtifact();
32
39
  }
33
40
  /**
34
41
  * Retrieve the portal contract address associated with the given contract address.
@@ -40,8 +47,8 @@ export class ContractDataOracle {
40
47
  * @returns A Promise that resolves to the portal contract address.
41
48
  */
42
49
  async getPortalContractAddress(contractAddress) {
43
- const tree = await this.getTree(contractAddress);
44
- return tree.contract.instance.portalContractAddress;
50
+ const instance = await this.getContractInstance(contractAddress);
51
+ return instance.portalContractAddress;
45
52
  }
46
53
  /**
47
54
  * Retrieves the artifact of a specified function within a given contract.
@@ -53,7 +60,7 @@ export class ContractDataOracle {
53
60
  * @returns The corresponding function's artifact as an object.
54
61
  */
55
62
  async getFunctionArtifact(contractAddress, selector) {
56
- const tree = await this.getTree(contractAddress);
63
+ const tree = await this.getTreeForAddress(contractAddress);
57
64
  return tree.getFunctionArtifact(selector);
58
65
  }
59
66
  /**
@@ -66,8 +73,8 @@ export class ContractDataOracle {
66
73
  * @returns The corresponding function's artifact as an object
67
74
  */
68
75
  async getFunctionArtifactByName(contractAddress, functionName) {
69
- const tree = await this.getTree(contractAddress);
70
- return tree.contract.getFunctionArtifactByName(functionName);
76
+ const tree = await this.getTreeForAddress(contractAddress);
77
+ return tree.getArtifact().functions.find(f => f.name === functionName);
71
78
  }
72
79
  /**
73
80
  * Retrieves the debug metadata of a specified function within a given contract.
@@ -80,12 +87,9 @@ export class ContractDataOracle {
80
87
  * @returns The corresponding function's artifact as an object.
81
88
  */
82
89
  async getFunctionDebugMetadata(contractAddress, selector) {
83
- const tree = await this.getTree(contractAddress);
84
- const functionArtifact = tree.contract.getFunctionArtifact(selector);
85
- if (!functionArtifact) {
86
- return undefined;
87
- }
88
- return tree.contract.getFunctionDebugMetadataByName(functionArtifact.name);
90
+ const tree = await this.getTreeForAddress(contractAddress);
91
+ const artifact = tree.getFunctionArtifact(selector);
92
+ return getFunctionDebugMetadata(tree.getArtifact(), artifact);
89
93
  }
90
94
  /**
91
95
  * Retrieve the bytecode of a specific function in a contract at the given address.
@@ -98,7 +102,7 @@ export class ContractDataOracle {
98
102
  * @throws Error if the contract address is unknown or not found.
99
103
  */
100
104
  async getBytecode(contractAddress, selector) {
101
- const tree = await this.getTree(contractAddress);
105
+ const tree = await this.getTreeForAddress(contractAddress);
102
106
  return tree.getBytecode(selector);
103
107
  }
104
108
  /**
@@ -111,7 +115,7 @@ export class ContractDataOracle {
111
115
  * @returns A promise that resolves with the MembershipWitness instance for the specified contract's function.
112
116
  */
113
117
  async getFunctionMembershipWitness(contractAddress, selector) {
114
- const tree = await this.getTree(contractAddress);
118
+ const tree = await this.getTreeForAddress(contractAddress);
115
119
  return tree.getFunctionMembershipWitness(selector);
116
120
  }
117
121
  /**
@@ -127,6 +131,27 @@ export class ContractDataOracle {
127
131
  // TODO
128
132
  return await Promise.resolve(MembershipWitness.random(VK_TREE_HEIGHT));
129
133
  }
134
+ /**
135
+ * Retrieve or create a ContractTree instance based on the provided class id.
136
+ * If an existing tree with the same class id is found in the cache, it will be returned.
137
+ * Otherwise, a new ContractTree instance will be created using the contract data from the database
138
+ * and added to the cache before returning.
139
+ *
140
+ * @param classId - The class id of the contract for which the ContractTree is required.
141
+ * @returns A ContractTree instance associated with the specified contract address.
142
+ * @throws An Error if the contract is not found in the ContractDatabase.
143
+ */
144
+ async getTreeForClassId(classId) {
145
+ if (!this.contractClasses.has(classId.toString())) {
146
+ const artifact = await this.db.getContractArtifact(classId);
147
+ if (!artifact) {
148
+ throw new ContractClassNotFoundError(classId.toString());
149
+ }
150
+ const tree = new PrivateFunctionsTree(artifact);
151
+ this.contractClasses.set(classId.toString(), tree);
152
+ }
153
+ return this.contractClasses.get(classId.toString());
154
+ }
130
155
  /**
131
156
  * Retrieve or create a ContractTree instance based on the provided AztecAddress.
132
157
  * If an existing tree with the same contract address is found in the cache, it will be returned.
@@ -137,18 +162,9 @@ export class ContractDataOracle {
137
162
  * @returns A ContractTree instance associated with the specified contract address.
138
163
  * @throws An Error if the contract is not found in the ContractDatabase.
139
164
  */
140
- async getTree(contractAddress) {
141
- // TODO(@spalladino): ContractTree should refer to a class, not an instance!
142
- let tree = this.trees.find(t => t.contract.instance.address.equals(contractAddress));
143
- if (!tree) {
144
- const contract = await this.db.getContract(contractAddress);
145
- if (!contract) {
146
- throw new ContractNotFoundError(contractAddress.toString());
147
- }
148
- tree = new PrivateFunctionsTree(contract);
149
- this.trees.push(tree);
150
- }
151
- return tree;
165
+ async getTreeForAddress(contractAddress) {
166
+ const instance = await this.getContractInstance(contractAddress);
167
+ return this.getTreeForClassId(instance.contractClassId);
152
168
  }
153
169
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfZGF0YV9vcmFjbGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUFvQixFQUEwRTtRQUExRSxPQUFFLEdBQUYsRUFBRSxDQUF3RTtRQUZ0RixVQUFLLEdBQTJCLEVBQUUsQ0FBQztJQUVzRCxDQUFDO0lBRWxHLDRFQUE0RTtJQUNyRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsZUFBNkI7UUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELG9FQUFvRTtJQUM3RCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsZUFBbUI7UUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCw2REFBNkQ7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
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfZGF0YV9vcmFjbGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRixPQUFPLEVBS0wsd0JBQXdCLEdBQ3pCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQU03QixZQUFvQixFQUF1RDtRQUF2RCxPQUFFLEdBQUYsRUFBRSxDQUFxRDtRQUwzRSwyREFBMkQ7UUFDbkQsb0JBQWUsR0FBc0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2RSw2Q0FBNkM7UUFDckMsc0JBQWlCLEdBQWtDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFUyxDQUFDO0lBRS9FLDRFQUE0RTtJQUNyRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsZUFBNkI7UUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLENB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
@@ -1,7 +1,6 @@
1
- import { ContractDao } from '@aztec/circuit-types';
2
1
  import { FUNCTION_TREE_HEIGHT, MembershipWitness } from '@aztec/circuits.js';
3
2
  import { MerkleTree } from '@aztec/circuits.js/merkle';
4
- import { FunctionSelector } from '@aztec/foundation/abi';
3
+ import { ContractArtifact, FunctionSelector } from '@aztec/foundation/abi';
5
4
  import { Fr } from '@aztec/foundation/fields';
6
5
  import { ContractClassWithId } from '@aztec/types/contracts';
7
6
  /**
@@ -11,19 +10,10 @@ import { ContractClassWithId } from '@aztec/types/contracts';
11
10
  * It is used in combination with the AztecNode to compute various data for executing private transactions.
12
11
  */
13
12
  export declare class PrivateFunctionsTree {
14
- /**
15
- * The contract data object containing the artifact and contract address.
16
- * TODO(@spalladino) Replace with contract class sourced from db.
17
- */
18
- readonly contract: ContractDao;
13
+ private readonly artifact;
19
14
  private tree?;
20
- private contractClass?;
21
- constructor(
22
- /**
23
- * The contract data object containing the artifact and contract address.
24
- * TODO(@spalladino) Replace with contract class sourced from db.
25
- */
26
- contract: ContractDao);
15
+ private contractClass;
16
+ constructor(artifact: ContractArtifact);
27
17
  /**
28
18
  * Retrieve the artifact of a given function.
29
19
  * The function is identified by its selector, which represents a unique identifier for the function's signature.
@@ -32,7 +22,7 @@ export declare class PrivateFunctionsTree {
32
22
  * @param selector - The function selector.
33
23
  * @returns The artifact object containing relevant information about the targeted function.
34
24
  */
35
- getFunctionArtifact(selector: FunctionSelector): import("@aztec/circuits.js").ContractFunctionDao;
25
+ getFunctionArtifact(selector: FunctionSelector): import("@aztec/foundation/abi").FunctionArtifact;
36
26
  /**
37
27
  * Retrieve the bytecode of a function in the contract by its function selector.
38
28
  * The function selector is a unique identifier for each function in a contract.
@@ -52,6 +42,8 @@ export declare class PrivateFunctionsTree {
52
42
  getFunctionTreeRoot(): MerkleTree;
53
43
  /** Returns the contract class object. */
54
44
  getContractClass(): ContractClassWithId;
45
+ /** Returns the contract artifact. */
46
+ getArtifact(): ContractArtifact;
55
47
  /**
56
48
  * Returns the contract class identifier for the given artifact.
57
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"private_functions_tree.d.ts","sourceRoot":"","sources":["../../src/contract_data_oracle/private_functions_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EAIlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,oBAAoB;IAK7B;;;OAGG;aACa,QAAQ,EAAE,WAAW;IARvC,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAsB;;IAG1C;;;OAGG;IACa,QAAQ,EAAE,WAAW;IAGvC;;;;;;;OAOG;IACI,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB;IAYrD;;;;;;;OAOG;IACI,WAAW,CAAC,QAAQ,EAAE,gBAAgB;IAI7C;;;;;;OAMG;IACI,mBAAmB;IAI1B,yCAAyC;IAClC,gBAAgB;IAOvB;;OAEG;IACI,kBAAkB;IAIzB;;;;;;;;OAQG;IACI,4BAA4B,CACjC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,iBAAiB,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAkB1D,OAAO,CAAC,OAAO;CAOhB"}
1
+ {"version":3,"file":"private_functions_tree.d.ts","sourceRoot":"","sources":["../../src/contract_data_oracle/private_functions_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EAIlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,oBAAoB;IAInB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,aAAa,CAAsB;gBAEd,QAAQ,EAAE,gBAAgB;IAIvD;;;;;;;OAOG;IACI,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB;IAUrD;;;;;;;OAOG;IACI,WAAW,CAAC,QAAQ,EAAE,gBAAgB;IAI7C;;;;;;OAMG;IACI,mBAAmB;IAI1B,yCAAyC;IAClC,gBAAgB;IAIvB,qCAAqC;IAC9B,WAAW;IAIlB;;OAEG;IACI,kBAAkB;IAIzB;;;;;;;;OAQG;IACI,4BAA4B,CACjC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,iBAAiB,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAkB1D,OAAO,CAAC,OAAO;CAOhB"}
@@ -8,13 +8,9 @@ import { assertLength } from '@aztec/foundation/serialize';
8
8
  * It is used in combination with the AztecNode to compute various data for executing private transactions.
9
9
  */
10
10
  export class PrivateFunctionsTree {
11
- constructor(
12
- /**
13
- * The contract data object containing the artifact and contract address.
14
- * TODO(@spalladino) Replace with contract class sourced from db.
15
- */
16
- contract) {
17
- this.contract = contract;
11
+ constructor(artifact) {
12
+ this.artifact = artifact;
13
+ this.contractClass = getContractClassFromArtifact(artifact);
18
14
  }
19
15
  /**
20
16
  * Retrieve the artifact of a given function.
@@ -25,11 +21,9 @@ export class PrivateFunctionsTree {
25
21
  * @returns The artifact object containing relevant information about the targeted function.
26
22
  */
27
23
  getFunctionArtifact(selector) {
28
- const artifact = this.contract.functions.find(f => f.selector.equals(selector));
24
+ const artifact = this.artifact.functions.find(f => selector.equals(f.name, f.parameters));
29
25
  if (!artifact) {
30
- throw new Error(`Unknown function. Selector ${selector.toString()} not found in the artifact of contract ${this.contract.instance.address.toString()}. Expected one of: ${this.contract.functions
31
- .map(f => `${f.name} (${f.selector.toString()})`)
32
- .join(', ')}`);
26
+ throw new Error(`Unknown function. Selector ${selector.toString()} not found in the artifact with class ${this.getContractClassId().toString()}.`);
33
27
  }
34
28
  return artifact;
35
29
  }
@@ -56,11 +50,12 @@ export class PrivateFunctionsTree {
56
50
  }
57
51
  /** Returns the contract class object. */
58
52
  getContractClass() {
59
- if (!this.contractClass) {
60
- this.contractClass = getContractClassFromArtifact(this.contract);
61
- }
62
53
  return this.contractClass;
63
54
  }
55
+ /** Returns the contract artifact. */
56
+ getArtifact() {
57
+ return this.artifact;
58
+ }
64
59
  /**
65
60
  * Returns the contract class identifier for the given artifact.
66
61
  */
@@ -94,4 +89,4 @@ export class PrivateFunctionsTree {
94
89
  return this.tree;
95
90
  }
96
91
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9mdW5jdGlvbnNfdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9kYXRhX29yYWNsZS9wcml2YXRlX2Z1bmN0aW9uc190cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUczRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFJL0I7SUFDRTs7O09BR0c7SUFDYSxRQUFxQjtRQUFyQixhQUFRLEdBQVIsUUFBUSxDQUFhO0lBQ3BDLENBQUM7SUFFSjs7Ozs7OztPQU9HO0lBQ0ksbUJBQW1CLENBQUMsUUFBMEI7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUNiLDhCQUE4QixRQUFRLENBQUMsUUFBUSxFQUFFLDBDQUEwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLHNCQUFzQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7aUJBQzlLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7aUJBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoQixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksV0FBVyxDQUFDLFFBQTBCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5Q0FBeUM7SUFDbEMsZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksNEJBQTRCLENBQ2pDLFFBQTBCO1FBRTFCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsUUFBUSxDQUFDLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixJQUFJLGlCQUFpQixDQUNuQixvQkFBb0IsRUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUNiLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUM1RCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9mdW5jdGlvbnNfdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9kYXRhX29yYWNsZS9wcml2YXRlX2Z1bmN0aW9uc190cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUczRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsWUFBNkIsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLG1CQUFtQixDQUFDLFFBQTBCO1FBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUNiLDhCQUE4QixRQUFRLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUNsSSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksV0FBVyxDQUFDLFFBQTBCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5Q0FBeUM7SUFDbEMsZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQscUNBQXFDO0lBQzlCLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSw0QkFBNEIsQ0FDakMsUUFBMEI7UUFFMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxRQUFRLENBQUMsUUFBUSxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQ3BCLElBQUksaUJBQWlCLENBQ25CLG9CQUFvQixFQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQ2IsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQzVELENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0YifQ==
@@ -14,5 +14,7 @@ export interface ContractInstanceDatabase {
14
14
  * @param address - Address of the contract.
15
15
  */
16
16
  getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
17
+ /** Returns the addresses all contract instances registered in the DB. */
18
+ getContractsAddresses(): Promise<AztecAddress[]>;
17
19
  }
18
20
  //# sourceMappingURL=contract_instance_db.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract_instance_db.d.ts","sourceRoot":"","sources":["../../../src/database/contracts/contract_instance_db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;CAC9F"}
1
+ {"version":3,"file":"contract_instance_db.d.ts","sourceRoot":"","sources":["../../../src/database/contracts/contract_instance_db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;IAE7F,yEAAyE;IACzE,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAClD"}
@@ -1,4 +1,4 @@
1
- import { ContractDao, NoteFilter, PublicKey } from '@aztec/circuit-types';
1
+ import { NoteFilter, PublicKey } from '@aztec/circuit-types';
2
2
  import { AztecAddress, CompleteAddress, Header } from '@aztec/circuits.js';
3
3
  import { ContractArtifact } from '@aztec/foundation/abi';
4
4
  import { Fr, Point } from '@aztec/foundation/fields';
@@ -14,10 +14,12 @@ export declare class KVPxeDatabase implements PxeDatabase {
14
14
  #private;
15
15
  private db;
16
16
  constructor(db: AztecKVStore);
17
+ getContract(address: AztecAddress): Promise<(ContractInstanceWithAddress & ContractArtifact) | undefined>;
17
18
  addContractArtifact(id: Fr, contract: ContractArtifact): Promise<void>;
18
19
  getContractArtifact(id: Fr): Promise<ContractArtifact | undefined>;
19
20
  addContractInstance(contract: ContractInstanceWithAddress): Promise<void>;
20
21
  getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
22
+ getContractsAddresses(): Promise<AztecAddress[]>;
21
23
  addAuthWitness(messageHash: Fr, witness: Fr[]): Promise<void>;
22
24
  getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
23
25
  addCapsule(capsule: Fr[]): Promise<void>;
@@ -43,8 +45,5 @@ export declare class KVPxeDatabase implements PxeDatabase {
43
45
  getSynchedBlockNumberForPublicKey(publicKey: Point): number | undefined;
44
46
  setSynchedBlockNumberForPublicKey(publicKey: Point, blockNumber: number): Promise<boolean>;
45
47
  estimateSize(): number;
46
- addContract(contract: ContractDao): Promise<void>;
47
- getContract(address: AztecAddress): Promise<ContractDao | undefined>;
48
- getContracts(): Promise<ContractDao[]>;
49
48
  }
50
49
  //# sourceMappingURL=kv_pxe_database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kv_pxe_database.d.ts","sourceRoot":"","sources":["../../src/database/kv_pxe_database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv_pxe_database.d.ts","sourceRoot":"","sources":["../../src/database/kv_pxe_database.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_addresses, _KVPxeDatabase_addressIndex, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_contracts, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_notesByContract, _KVPxeDatabase_notesByStorageSlot, _KVPxeDatabase_notesByTxHash, _KVPxeDatabase_notesByOwner, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByOwner, _KVPxeDatabase_deferredNotes, _KVPxeDatabase_deferredNotesByContract, _KVPxeDatabase_syncedBlockPerPublicKey, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_getNotes, _KVPxeDatabase_getCompleteAddress;
1
+ var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_addresses, _KVPxeDatabase_addressIndex, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_notesByContract, _KVPxeDatabase_notesByStorageSlot, _KVPxeDatabase_notesByTxHash, _KVPxeDatabase_notesByOwner, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByOwner, _KVPxeDatabase_deferredNotes, _KVPxeDatabase_deferredNotesByContract, _KVPxeDatabase_syncedBlockPerPublicKey, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_getNotes, _KVPxeDatabase_getCompleteAddress;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { ContractDao, MerkleTreeId, NoteStatus } from '@aztec/circuit-types';
4
- import { CompleteAddress, Header } from '@aztec/circuits.js';
3
+ import { MerkleTreeId, NoteStatus } from '@aztec/circuit-types';
4
+ import { AztecAddress, CompleteAddress, Header } from '@aztec/circuits.js';
5
5
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
6
6
  import { Fr } from '@aztec/foundation/fields';
7
7
  import { contractArtifactFromBuffer, contractArtifactToBuffer } from '@aztec/types/abi';
@@ -20,7 +20,6 @@ export class KVPxeDatabase {
20
20
  _KVPxeDatabase_addressIndex.set(this, void 0);
21
21
  _KVPxeDatabase_authWitnesses.set(this, void 0);
22
22
  _KVPxeDatabase_capsules.set(this, void 0);
23
- _KVPxeDatabase_contracts.set(this, void 0);
24
23
  _KVPxeDatabase_notes.set(this, void 0);
25
24
  _KVPxeDatabase_nullifiedNotes.set(this, void 0);
26
25
  _KVPxeDatabase_nullifierToNoteId.set(this, void 0);
@@ -43,7 +42,6 @@ export class KVPxeDatabase {
43
42
  __classPrivateFieldSet(this, _KVPxeDatabase_addressIndex, db.openMap('address_index'), "f");
44
43
  __classPrivateFieldSet(this, _KVPxeDatabase_authWitnesses, db.openMap('auth_witnesses'), "f");
45
44
  __classPrivateFieldSet(this, _KVPxeDatabase_capsules, db.openArray('capsules'), "f");
46
- __classPrivateFieldSet(this, _KVPxeDatabase_contracts, db.openMap('contracts'), "f");
47
45
  __classPrivateFieldSet(this, _KVPxeDatabase_contractArtifacts, db.openMap('contract_artifacts'), "f");
48
46
  __classPrivateFieldSet(this, _KVPxeDatabase_contractInstances, db.openMap('contracts_instances'), "f");
49
47
  __classPrivateFieldSet(this, _KVPxeDatabase_synchronizedBlock, db.openSingleton('header'), "f");
@@ -62,6 +60,14 @@ export class KVPxeDatabase {
62
60
  __classPrivateFieldSet(this, _KVPxeDatabase_deferredNotes, db.openArray('deferred_notes'), "f");
63
61
  __classPrivateFieldSet(this, _KVPxeDatabase_deferredNotesByContract, db.openMultiMap('deferred_notes_by_contract'), "f");
64
62
  }
63
+ async getContract(address) {
64
+ const instance = await this.getContractInstance(address);
65
+ const artifact = instance && (await this.getContractArtifact(instance?.contractClassId));
66
+ if (!instance || !artifact) {
67
+ return undefined;
68
+ }
69
+ return { ...instance, ...artifact };
70
+ }
65
71
  async addContractArtifact(id, contract) {
66
72
  await __classPrivateFieldGet(this, _KVPxeDatabase_contractArtifacts, "f").set(id.toString(), contractArtifactToBuffer(contract));
67
73
  }
@@ -77,6 +83,9 @@ export class KVPxeDatabase {
77
83
  const contract = __classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").get(address.toString());
78
84
  return Promise.resolve(contract && SerializableContractInstance.fromBuffer(contract).withAddress(address));
79
85
  }
86
+ getContractsAddresses() {
87
+ return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").keys()).map(AztecAddress.fromString));
88
+ }
80
89
  async addAuthWitness(messageHash, witness) {
81
90
  await __classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").set(messageHash.toString(), witness.map(w => w.toBuffer()));
82
91
  }
@@ -250,18 +259,8 @@ export class KVPxeDatabase {
250
259
  const treeRootsSize = Object.keys(MerkleTreeId).length * Fr.SIZE_IN_BYTES;
251
260
  return notesSize + treeRootsSize + authWitsSize + addressesSize;
252
261
  }
253
- async addContract(contract) {
254
- await __classPrivateFieldGet(this, _KVPxeDatabase_contracts, "f").set(contract.instance.address.toString(), contract.toBuffer());
255
- }
256
- getContract(address) {
257
- const contract = __classPrivateFieldGet(this, _KVPxeDatabase_contracts, "f").get(address.toString());
258
- return Promise.resolve(contract ? ContractDao.fromBuffer(contract) : undefined);
259
- }
260
- getContracts() {
261
- return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_contracts, "f").values()).map(c => ContractDao.fromBuffer(c)));
262
- }
263
262
  }
264
- _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_addresses = new WeakMap(), _KVPxeDatabase_addressIndex = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_contracts = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_notesByContract = new WeakMap(), _KVPxeDatabase_notesByStorageSlot = new WeakMap(), _KVPxeDatabase_notesByTxHash = new WeakMap(), _KVPxeDatabase_notesByOwner = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByOwner = new WeakMap(), _KVPxeDatabase_deferredNotes = new WeakMap(), _KVPxeDatabase_deferredNotesByContract = new WeakMap(), _KVPxeDatabase_syncedBlockPerPublicKey = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_getNotes = function _KVPxeDatabase_getNotes(filter) {
263
+ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_addresses = new WeakMap(), _KVPxeDatabase_addressIndex = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_notesByContract = new WeakMap(), _KVPxeDatabase_notesByStorageSlot = new WeakMap(), _KVPxeDatabase_notesByTxHash = new WeakMap(), _KVPxeDatabase_notesByOwner = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByOwner = new WeakMap(), _KVPxeDatabase_deferredNotes = new WeakMap(), _KVPxeDatabase_deferredNotesByContract = new WeakMap(), _KVPxeDatabase_syncedBlockPerPublicKey = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_getNotes = function _KVPxeDatabase_getNotes(filter) {
265
264
  const publicKey = filter.owner
266
265
  ? __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, filter.owner)?.publicKey
267
266
  : undefined;
@@ -325,4 +324,4 @@ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_addresses = new
325
324
  const value = __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").at(index);
326
325
  return value ? CompleteAddress.fromBuffer(value) : undefined;
327
326
  };
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFjLFVBQVUsRUFBYSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BHLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFTLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEYsT0FBTyxFQUErQiw0QkFBNEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUF5QnhCLFlBQW9CLEVBQWdCOztRQUFoQixPQUFFLEdBQUYsRUFBRSxDQUFjO1FBeEJwQyxtREFBMkM7UUFDM0MsMkNBQStCO1FBQy9CLDhDQUF3QztRQUN4QywrQ0FBMkM7UUFDM0MsMENBQWdDO1FBQ2hDLDJDQUFxQztRQUNyQyx1Q0FBaUM7UUFDakMsZ0RBQTBDO1FBQzFDLG1EQUE2QztRQUM3QyxpREFBZ0Q7UUFDaEQsb0RBQW1EO1FBQ25ELCtDQUE4QztRQUM5Qyw4Q0FBNkM7UUFDN0MsMERBQXlEO1FBQ3pELDZEQUE0RDtRQUM1RCx3REFBdUQ7UUFDdkQsdURBQXNEO1FBQ3RELCtDQUEwQztRQUMxQyx5REFBd0Q7UUFDeEQseURBQW1EO1FBQ25ELG1EQUE2QztRQUM3QyxtREFBNkM7UUFDN0Msb0NBQWtC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
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQWMsVUFBVSxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQVMsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RixPQUFPLEVBQStCLDRCQUE0QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQXdCeEIsWUFBb0IsRUFBZ0I7O1FBQWhCLE9BQUUsR0FBRixFQUFFLENBQWM7UUF2QnBDLG1EQUEyQztRQUMzQywyQ0FBK0I7UUFDL0IsOENBQXdDO1FBQ3hDLCtDQUEyQztRQUMzQywwQ0FBZ0M7UUFDaEMsdUNBQWlDO1FBQ2pDLGdEQUEwQztRQUMxQyxtREFBNkM7UUFDN0MsaURBQWdEO1FBQ2hELG9EQUFtRDtRQUNuRCwrQ0FBOEM7UUFDOUMsOENBQTZDO1FBQzdDLDBEQUF5RDtRQUN6RCw2REFBNEQ7UUFDNUQsd0RBQXVEO1FBQ3ZELHVEQUFzRDtRQUN0RCwrQ0FBMEM7UUFDMUMseURBQXdEO1FBQ3hELHlEQUFtRDtRQUNuRCxtREFBNkM7UUFDN0MsbURBQTZDO1FBQzdDLG9DQUFrQjtRQUdoQix1QkFBQSxJ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