@aztec-labs/simulator 6.0.0-nightly.20260829

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 (215) hide show
  1. package/README.md +57 -0
  2. package/dest/client.d.ts +6 -0
  3. package/dest/client.d.ts.map +1 -0
  4. package/dest/client.js +3 -0
  5. package/dest/common/errors.d.ts +51 -0
  6. package/dest/common/errors.d.ts.map +1 -0
  7. package/dest/common/errors.js +154 -0
  8. package/dest/common/index.d.ts +3 -0
  9. package/dest/common/index.d.ts.map +1 -0
  10. package/dest/common/index.js +2 -0
  11. package/dest/common/stats/index.d.ts +2 -0
  12. package/dest/common/stats/index.d.ts.map +1 -0
  13. package/dest/common/stats/index.js +1 -0
  14. package/dest/common/stats/stats.d.ts +4 -0
  15. package/dest/common/stats/stats.d.ts.map +1 -0
  16. package/dest/common/stats/stats.js +10 -0
  17. package/dest/private/acvm/acvm.d.ts +43 -0
  18. package/dest/private/acvm/acvm.d.ts.map +1 -0
  19. package/dest/private/acvm/acvm.js +65 -0
  20. package/dest/private/acvm/acvm_types.d.ts +10 -0
  21. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  22. package/dest/private/acvm/acvm_types.js +3 -0
  23. package/dest/private/acvm/deserialize.d.ts +35 -0
  24. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  25. package/dest/private/acvm/deserialize.js +50 -0
  26. package/dest/private/acvm/index.d.ts +5 -0
  27. package/dest/private/acvm/index.d.ts.map +1 -0
  28. package/dest/private/acvm/index.js +4 -0
  29. package/dest/private/acvm/serialize.d.ts +41 -0
  30. package/dest/private/acvm/serialize.d.ts.map +1 -0
  31. package/dest/private/acvm/serialize.js +99 -0
  32. package/dest/private/acvm_native.d.ts +41 -0
  33. package/dest/private/acvm_native.d.ts.map +1 -0
  34. package/dest/private/acvm_native.js +147 -0
  35. package/dest/private/acvm_wasm.d.ts +16 -0
  36. package/dest/private/acvm_wasm.d.ts.map +1 -0
  37. package/dest/private/acvm_wasm.js +67 -0
  38. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  39. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  40. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  41. package/dest/private/circuit_simulator.d.ts +35 -0
  42. package/dest/private/circuit_simulator.d.ts.map +1 -0
  43. package/dest/private/circuit_simulator.js +43 -0
  44. package/dest/private/factory.d.ts +12 -0
  45. package/dest/private/factory.d.ts.map +1 -0
  46. package/dest/private/factory.js +30 -0
  47. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  48. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  49. package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
  50. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts +39 -0
  51. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  52. package/dest/public/avm/testing/base_avm_simulation_tester.js +121 -0
  53. package/dest/public/avm/testing/utils.d.ts +32 -0
  54. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  55. package/dest/public/avm/testing/utils.js +66 -0
  56. package/dest/public/avm_simulator.d.ts +28 -0
  57. package/dest/public/avm_simulator.d.ts.map +1 -0
  58. package/dest/public/avm_simulator.js +4 -0
  59. package/dest/public/avm_simulator_pool.d.ts +84 -0
  60. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  61. package/dest/public/avm_simulator_pool.js +311 -0
  62. package/dest/public/cdb_ipc_server.d.ts +40 -0
  63. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  64. package/dest/public/cdb_ipc_server.js +153 -0
  65. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  66. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  67. package/dest/public/contracts_db_checkpoint.js +30 -0
  68. package/dest/public/db_interfaces.d.ts +68 -0
  69. package/dest/public/db_interfaces.d.ts.map +1 -0
  70. package/dest/public/db_interfaces.js +3 -0
  71. package/dest/public/executor_metrics.d.ts +21 -0
  72. package/dest/public/executor_metrics.d.ts.map +1 -0
  73. package/dest/public/executor_metrics.js +64 -0
  74. package/dest/public/executor_metrics_interface.d.ts +10 -0
  75. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  76. package/dest/public/executor_metrics_interface.js +1 -0
  77. package/dest/public/fixtures/amm_test.d.ts +10 -0
  78. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  79. package/dest/public/fixtures/amm_test.js +213 -0
  80. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  81. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  82. package/dest/public/fixtures/bulk_test.js +289 -0
  83. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  84. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  85. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  86. package/dest/public/fixtures/index.d.ts +10 -0
  87. package/dest/public/fixtures/index.d.ts.map +1 -0
  88. package/dest/public/fixtures/index.js +9 -0
  89. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  90. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  91. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  92. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +77 -0
  93. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -0
  94. package/dest/public/fixtures/public_tx_simulation_tester.js +176 -0
  95. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  96. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  97. package/dest/public/fixtures/simple_contract_data_source.js +95 -0
  98. package/dest/public/fixtures/token_test.d.ts +12 -0
  99. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  100. package/dest/public/fixtures/token_test.js +96 -0
  101. package/dest/public/fixtures/utils.d.ts +26 -0
  102. package/dest/public/fixtures/utils.d.ts.map +1 -0
  103. package/dest/public/fixtures/utils.js +170 -0
  104. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +65 -0
  105. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  106. package/dest/public/fuzzing/avm_fuzzer_simulator.js +181 -0
  107. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  108. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  109. package/dest/public/fuzzing/avm_simulator_bin.js +108 -0
  110. package/dest/public/index.d.ts +10 -0
  111. package/dest/public/index.d.ts.map +1 -0
  112. package/dest/public/index.js +6 -0
  113. package/dest/public/public_db_sources.d.ts +83 -0
  114. package/dest/public/public_db_sources.d.ts.map +1 -0
  115. package/dest/public/public_db_sources.js +297 -0
  116. package/dest/public/public_errors.d.ts +12 -0
  117. package/dest/public/public_errors.d.ts.map +1 -0
  118. package/dest/public/public_errors.js +13 -0
  119. package/dest/public/public_processor/guarded_merkle_tree.d.ts +52 -0
  120. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  121. package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
  122. package/dest/public/public_processor/public_processor.d.ts +71 -0
  123. package/dest/public/public_processor/public_processor.d.ts.map +1 -0
  124. package/dest/public/public_processor/public_processor.js +858 -0
  125. package/dest/public/public_processor/public_processor_metrics.d.ts +30 -0
  126. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
  127. package/dest/public/public_processor/public_processor_metrics.js +116 -0
  128. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  129. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  130. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +39 -0
  131. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  132. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  133. package/dest/public/public_tx_simulator/factories.js +28 -0
  134. package/dest/public/public_tx_simulator/index.d.ts +6 -0
  135. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  136. package/dest/public/public_tx_simulator/index.js +3 -0
  137. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +53 -0
  138. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
  139. package/dest/public/public_tx_simulator/public_tx_simulator.js +127 -0
  140. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  141. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  142. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  143. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  144. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  145. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  146. package/dest/public/side_effect_errors.d.ts +44 -0
  147. package/dest/public/side_effect_errors.d.ts.map +1 -0
  148. package/dest/public/side_effect_errors.js +75 -0
  149. package/dest/public/test_executor_metrics.d.ts +56 -0
  150. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  151. package/dest/public/test_executor_metrics.js +305 -0
  152. package/dest/public/unique_class_ids.d.ts +37 -0
  153. package/dest/public/unique_class_ids.d.ts.map +1 -0
  154. package/dest/public/unique_class_ids.js +61 -0
  155. package/dest/public/utils.d.ts +3 -0
  156. package/dest/public/utils.d.ts.map +1 -0
  157. package/dest/public/utils.js +18 -0
  158. package/dest/server.d.ts +7 -0
  159. package/dest/server.d.ts.map +1 -0
  160. package/dest/server.js +5 -0
  161. package/package.json +109 -0
  162. package/src/client.ts +5 -0
  163. package/src/common/errors.ts +219 -0
  164. package/src/common/index.ts +2 -0
  165. package/src/common/stats/index.ts +1 -0
  166. package/src/common/stats/stats.ts +20 -0
  167. package/src/private/acvm/acvm.ts +114 -0
  168. package/src/private/acvm/acvm_types.ts +11 -0
  169. package/src/private/acvm/deserialize.ts +58 -0
  170. package/src/private/acvm/index.ts +4 -0
  171. package/src/private/acvm/serialize.ts +123 -0
  172. package/src/private/acvm_native.ts +200 -0
  173. package/src/private/acvm_wasm.ts +80 -0
  174. package/src/private/acvm_wasm_with_blobs.ts +55 -0
  175. package/src/private/circuit_simulator.ts +91 -0
  176. package/src/private/factory.ts +40 -0
  177. package/src/public/avm/testing/account_proof.json +553 -0
  178. package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
  179. package/src/public/avm/testing/base_avm_simulation_tester.ts +162 -0
  180. package/src/public/avm/testing/utils.ts +114 -0
  181. package/src/public/avm_simulator.ts +29 -0
  182. package/src/public/avm_simulator_pool.ts +355 -0
  183. package/src/public/cdb_ipc_server.ts +198 -0
  184. package/src/public/contracts_db_checkpoint.ts +41 -0
  185. package/src/public/db_interfaces.ts +76 -0
  186. package/src/public/executor_metrics.ts +102 -0
  187. package/src/public/executor_metrics_interface.ts +20 -0
  188. package/src/public/fixtures/amm_test.ts +331 -0
  189. package/src/public/fixtures/bulk_test.ts +194 -0
  190. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  191. package/src/public/fixtures/index.ts +13 -0
  192. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  193. package/src/public/fixtures/public_tx_simulation_tester.ts +315 -0
  194. package/src/public/fixtures/simple_contract_data_source.ts +122 -0
  195. package/src/public/fixtures/token_test.ts +148 -0
  196. package/src/public/fixtures/utils.ts +269 -0
  197. package/src/public/fuzzing/avm_fuzzer_simulator.ts +302 -0
  198. package/src/public/fuzzing/avm_simulator_bin.ts +156 -0
  199. package/src/public/index.ts +16 -0
  200. package/src/public/public_db_sources.ts +405 -0
  201. package/src/public/public_errors.ts +14 -0
  202. package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
  203. package/src/public/public_processor/public_processor.ts +657 -0
  204. package/src/public/public_processor/public_processor_metrics.ts +138 -0
  205. package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +66 -0
  206. package/src/public/public_tx_simulator/factories.ts +61 -0
  207. package/src/public/public_tx_simulator/index.ts +8 -0
  208. package/src/public/public_tx_simulator/public_tx_simulator.ts +190 -0
  209. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  210. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  211. package/src/public/side_effect_errors.ts +96 -0
  212. package/src/public/test_executor_metrics.ts +399 -0
  213. package/src/public/unique_class_ids.ts +79 -0
  214. package/src/public/utils.ts +16 -0
  215. package/src/server.ts +6 -0
@@ -0,0 +1,95 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { getFunctionSelector } from '../avm/testing/utils.js';
3
+ /**
4
+ * This class is used during public/avm testing to function as a database of
5
+ * contract contract classes and instances. Tests can populate it with classes
6
+ * and instances and then probe it via the ContractDataSource interface.
7
+ *
8
+ * This class does not include any real merkle trees & merkle operations.
9
+ */ export class SimpleContractDataSource {
10
+ logger = createLogger('simple-contract-data-source');
11
+ // maps contract class ID to class
12
+ contractClasses = new Map();
13
+ // maps contract instance address to instance
14
+ contractInstances = new Map();
15
+ // maps contract instance address to address
16
+ contractArtifacts = new Map();
17
+ // maps `${classID}:${fnSelector}` to name
18
+ debugFunctionName = new Map();
19
+ /////////////////////////////////////////////////////////////
20
+ // Helper functions not in the contract data source interface
21
+ /**
22
+ * Derive the contract class and instance with some seed.
23
+ * Add both to the contract data source along with the contract artifact.
24
+ */ async addNewContract(contractArtifact, contractClass, contractInstance) {
25
+ await this.addContractArtifact(contractClass.id, contractArtifact);
26
+ await this.addContractClass(contractClass);
27
+ await this.addContractInstance(contractInstance);
28
+ }
29
+ async addContractArtifact(classId, artifact) {
30
+ this.contractArtifacts.set(classId.toString(), artifact);
31
+ const classIdStr = classId.toString();
32
+ const publicFns = artifact.nonDispatchPublicFunctions;
33
+ if (publicFns.length !== 0) {
34
+ for (const fn of publicFns){
35
+ const actualFnName = `${fn.name}`;
36
+ const fnSelector = await getFunctionSelector(actualFnName, artifact);
37
+ const key = `${classIdStr}:${fnSelector.toString()}`;
38
+ const longFnName = `${artifact.name}.${actualFnName}`;
39
+ this.debugFunctionName.set(key, longFnName);
40
+ }
41
+ }
42
+ }
43
+ /////////////////////////////////////////////////////////////
44
+ // ContractDataSource function implementations
45
+ getBlockNumber() {
46
+ throw new Error('Method not implemented.');
47
+ }
48
+ getContractClass(id) {
49
+ return Promise.resolve(this.contractClasses.get(id.toString()));
50
+ }
51
+ getBytecodeCommitment(_id) {
52
+ return Promise.resolve(undefined);
53
+ }
54
+ getContract(address) {
55
+ return Promise.resolve(this.contractInstances.get(address.toString()));
56
+ }
57
+ getContractClassIds() {
58
+ throw new Error('Method not implemented.');
59
+ }
60
+ async getContractArtifact(address) {
61
+ const contractInstance = await this.getContract(address);
62
+ if (!contractInstance) {
63
+ this.logger.warn(`Contract not found at address: ${address}`);
64
+ return undefined;
65
+ }
66
+ this.logger.debug(`Retrieved contract artifact for address: ${address}`);
67
+ this.logger.debug(`Contract class ID: ${contractInstance.currentContractClassId}`);
68
+ return this.contractArtifacts.get(contractInstance.currentContractClassId.toString());
69
+ }
70
+ async getDebugFunctionName(address, selector) {
71
+ const contractInstance = await this.getContract(address);
72
+ if (!contractInstance) {
73
+ this.logger.warn(`Couldn't get fn name for debugging. Contract not in tester's ContractDataSource.`);
74
+ return undefined;
75
+ }
76
+ const key = `${contractInstance.currentContractClassId.toString()}:${selector.toString()}`;
77
+ const fnName = this.debugFunctionName.get(key);
78
+ if (!fnName) {
79
+ this.logger.warn(`Couldn't get fn name for debugging...`);
80
+ return undefined;
81
+ }
82
+ return fnName;
83
+ }
84
+ registerContractFunctionSignatures(_signatures) {
85
+ return Promise.resolve();
86
+ }
87
+ addContractClass(contractClass) {
88
+ this.contractClasses.set(contractClass.id.toString(), contractClass);
89
+ return Promise.resolve();
90
+ }
91
+ addContractInstance(contractInstance) {
92
+ this.contractInstances.set(contractInstance.address.toString(), contractInstance);
93
+ return Promise.resolve();
94
+ }
95
+ }
@@ -0,0 +1,12 @@
1
+ import type { Logger } from '@aztec-labs/foundation/log';
2
+ import type { ContractArtifact } from '@aztec-labs/stdlib/abi';
3
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ import type { ContractInstanceWithAddress } from '@aztec-labs/stdlib/contract';
5
+ import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
6
+ export type TokenTestOptions = {
7
+ /** Skip return value assertions in balance checks (useful for benchmarking with collectCallMetadata=false) */
8
+ skipReturnValueAssertions?: boolean;
9
+ };
10
+ export declare function tokenTest(tester: PublicTxSimulationTester, logger: Logger, tokenArtifact: ContractArtifact, expectToBeTrue: (x: boolean) => void, options?: TokenTestOptions): Promise<void>;
11
+ export declare function setUpToken(tester: PublicTxSimulationTester, tokenArtifact: ContractArtifact, admin: AztecAddress, expectToBeTrue: (x: boolean) => void, seed?: number): Promise<ContractInstanceWithAddress>;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fdGVzdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy90b2tlbl90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFNUUsTUFBTSxNQUFNLGdCQUFnQixHQUFHO0lBQzdCLDhHQUE4RztJQUM5Ryx5QkFBeUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUNyQyxDQUFDO0FBRUYsd0JBQXNCLFNBQVMsQ0FDN0IsTUFBTSxFQUFFLHdCQUF3QixFQUNoQyxNQUFNLEVBQUUsTUFBTSxFQUNkLGFBQWEsRUFBRSxnQkFBZ0IsRUFDL0IsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQ3BDLE9BQU8sR0FBRSxnQkFBcUIsaUJBK0QvQjtBQUVELHdCQUFzQixVQUFVLENBQzlCLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsYUFBYSxFQUFFLGdCQUFnQixFQUMvQixLQUFLLEVBQUUsWUFBWSxFQUNuQixjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLElBQUksRUFDcEMsSUFBSSxTQUFJLHdDQTBCVCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_test.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/token_test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8GAA8G;IAC9G,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,gBAAgB,EAC/B,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EACpC,OAAO,GAAE,gBAAqB,iBA+D/B;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,wBAAwB,EAChC,aAAa,EAAE,gBAAgB,EAC/B,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EACpC,IAAI,SAAI,wCA0BT"}
@@ -0,0 +1,96 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { Timer } from '@aztec-labs/foundation/timer';
3
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue, options = {}) {
5
+ const timer = new Timer();
6
+ const admin = AztecAddress.fromNumberUnsafe(42);
7
+ const sender = AztecAddress.fromNumberUnsafe(111);
8
+ const receiver = AztecAddress.fromNumberUnsafe(222);
9
+ const token = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue);
10
+ const mintAmount = 100n;
11
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
12
+ const mintResult = await tester.executeTxWithLabel(/*txLabel=*/ 'Token/mint_to_public', /*sender=*/ admin, /*setupCalls=*/ [], /*appCalls=*/ [
13
+ {
14
+ address: token.address,
15
+ fnName: 'mint_to_public',
16
+ args: [
17
+ /*to=*/ sender,
18
+ mintAmount
19
+ ]
20
+ }
21
+ ]);
22
+ expectToBeTrue(mintResult.revertCode.isOK());
23
+ await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue, options);
24
+ const authwitNonce = new Fr(0);
25
+ const transferAmount = 50n;
26
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
27
+ const transferResult = await tester.executeTxWithLabel(/*txLabel=*/ 'Token/transfer_in_public', /*sender=*/ sender, /*setupCalls=*/ [], /*appCalls=*/ [
28
+ {
29
+ address: token.address,
30
+ fnName: 'transfer_in_public',
31
+ args: [
32
+ /*from=*/ sender,
33
+ /*to=*/ receiver,
34
+ transferAmount,
35
+ authwitNonce
36
+ ]
37
+ }
38
+ ]);
39
+ expectToBeTrue(transferResult.revertCode.isOK());
40
+ await checkBalance(tester, token, sender, sender, mintAmount - transferAmount, expectToBeTrue, options);
41
+ await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue, options);
42
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
43
+ const burnResult = await tester.executeTxWithLabel(/*txLabel=*/ 'Token/burn_public', /*sender=*/ receiver, /*setupCalls=*/ [], /*appCalls=*/ [
44
+ {
45
+ address: token.address,
46
+ fnName: 'burn_public',
47
+ args: [
48
+ /*from=*/ receiver,
49
+ transferAmount,
50
+ authwitNonce
51
+ ]
52
+ }
53
+ ]);
54
+ expectToBeTrue(burnResult.revertCode.isOK());
55
+ await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue, options);
56
+ logger.info(`TokenContract test took ${timer.ms()}ms\n`);
57
+ }
58
+ export async function setUpToken(tester, tokenArtifact, admin, expectToBeTrue, seed = 0) {
59
+ const constructorArgs = [
60
+ admin,
61
+ /*name=*/ 'Token',
62
+ /*symbol=*/ 'TOK',
63
+ /*decimals=*/ new Fr(18)
64
+ ];
65
+ const token = await tester.registerAndDeployContract(constructorArgs, /*deployer=*/ admin, tokenArtifact, /*skipNullifierInsertion=*/ false, seed);
66
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
67
+ const result = await tester.executeTxWithLabel(/*txLabel=*/ 'Token/constructor', /*sender=*/ admin, /*setupCalls=*/ [], /*appCalls=*/ [
68
+ {
69
+ fnName: 'constructor',
70
+ args: constructorArgs,
71
+ address: token.address
72
+ }
73
+ ]);
74
+ expectToBeTrue(result.revertCode.isOK());
75
+ return token;
76
+ }
77
+ async function checkBalance(tester, token, sender, account, expectedBalance, expectToBeTrue, options = {}) {
78
+ // Strictly simulate this! No need to "execute" (aka prove if using AvmProvingTester subclass).
79
+ const balResult = await tester.simulateTxWithLabel(/*txLabel=*/ 'Token/balance_of_public', sender, /*setupCalls=*/ [], /*appCalls=*/ [
80
+ {
81
+ address: token.address,
82
+ fnName: 'balance_of_public',
83
+ args: [
84
+ /*owner=*/ account
85
+ ],
86
+ isStaticCall: true
87
+ }
88
+ ]);
89
+ expectToBeTrue(balResult.revertCode.isOK());
90
+ if (!options.skipReturnValueAssertions) {
91
+ // should be 1 call with 1 return value that is expectedBalance
92
+ const appLogicReturnValues = balResult.getAppLogicReturnValues();
93
+ expectToBeTrue(appLogicReturnValues.length === 1);
94
+ expectToBeTrue(appLogicReturnValues[0].values?.[0]?.toBigInt() === expectedBalance);
95
+ }
96
+ }
@@ -0,0 +1,26 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
3
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec-labs/stdlib/contract';
4
+ import { Gas } from '@aztec-labs/stdlib/gas';
5
+ import type { ScopedL2ToL1Message } from '@aztec-labs/stdlib/messaging';
6
+ import { GlobalVariables, PublicCallRequestWithCalldata, Tx } from '@aztec-labs/stdlib/tx';
7
+ export type TestPrivateInsertions = {
8
+ revertible?: {
9
+ nullifiers?: Fr[];
10
+ noteHashes?: Fr[];
11
+ l2ToL1Msgs?: ScopedL2ToL1Message[];
12
+ };
13
+ nonRevertible?: {
14
+ nullifiers?: Fr[];
15
+ noteHashes?: Fr[];
16
+ l2ToL1Msgs?: ScopedL2ToL1Message[];
17
+ };
18
+ };
19
+ /**
20
+ * Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
21
+ */
22
+ export declare function createTxForPublicCalls(privateInsertions: TestPrivateInsertions, setupCallRequests: PublicCallRequestWithCalldata[], appCallRequests: PublicCallRequestWithCalldata[], teardownCallRequest?: PublicCallRequestWithCalldata, feePayer?: AztecAddress, gasUsedByPrivate?: Gas, globals?: GlobalVariables, gasLimits?: Gas): Promise<Tx>;
23
+ export declare function createTxForPrivateOnly(feePayer?: AztecAddress, gasUsedByPrivate?: Gas): Promise<Tx>;
24
+ export declare function addNewContractClassToTx(tx: Tx, contractClass: ContractClassPublic, skipNullifierInsertion?: boolean): Promise<void>;
25
+ export declare function addNewContractInstanceToTx(tx: Tx, contractInstance: ContractInstanceWithAddress, skipNullifierInsertion?: boolean): Promise<void>;
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZml4dHVyZXMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBR3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxHQUFHLEVBQXdCLE1BQU0sd0JBQXdCLENBQUM7QUFVbkUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV4RSxPQUFPLEVBRUwsZUFBZSxFQUVmLDZCQUE2QixFQUM3QixFQUFFLEVBR0gsTUFBTSx1QkFBdUIsQ0FBQztBQU0vQixNQUFNLE1BQU0scUJBQXFCLEdBQUc7SUFDbEMsVUFBVSxDQUFDLEVBQUU7UUFDWCxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsQixVQUFVLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0tBQ3BDLENBQUM7SUFDRixhQUFhLENBQUMsRUFBRTtRQUNkLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUM7S0FDcEMsQ0FBQztDQUNILENBQUM7QUFFRjs7R0FFRztBQUNILHdCQUFzQixzQkFBc0IsQ0FDMUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQ3hDLGlCQUFpQixFQUFFLDZCQUE2QixFQUFFLEVBQ2xELGVBQWUsRUFBRSw2QkFBNkIsRUFBRSxFQUNoRCxtQkFBbUIsQ0FBQyxFQUFFLDZCQUE2QixFQUNuRCxRQUFRLGVBQXNCLEVBQzlCLGdCQUFnQixHQUFFLEdBQWlCLEVBQ25DLE9BQU8sR0FBRSxlQUF5QyxFQUNsRCxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQ2QsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQTRGYjtBQUVELHdCQUFzQixzQkFBc0IsQ0FDMUMsUUFBUSxlQUFzQixFQUM5QixnQkFBZ0IsR0FBRSxHQUFxQixHQUN0QyxPQUFPLENBQUMsRUFBRSxDQUFDLENBMEJiO0FBRUQsd0JBQXNCLHVCQUF1QixDQUMzQyxFQUFFLEVBQUUsRUFBRSxFQUNOLGFBQWEsRUFBRSxtQkFBbUIsRUFDbEMsc0JBQXNCLFVBQVEsaUJBNkIvQjtBQUVELHdCQUFzQiwwQkFBMEIsQ0FDOUMsRUFBRSxFQUFFLEVBQUUsRUFDTixnQkFBZ0IsRUFBRSwyQkFBMkIsRUFDN0Msc0JBQXNCLFVBQVEsaUJBeUMvQiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/utils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,GAAG,EAAwB,MAAM,wBAAwB,CAAC;AAUnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,EAEL,eAAe,EAEf,6BAA6B,EAC7B,EAAE,EAGH,MAAM,uBAAuB,CAAC;AAM/B,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;IACF,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,EAAE,6BAA6B,EAAE,EAClD,eAAe,EAAE,6BAA6B,EAAE,EAChD,mBAAmB,CAAC,EAAE,6BAA6B,EACnD,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAiB,EACnC,OAAO,GAAE,eAAyC,EAClD,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,EAAE,CAAC,CA4Fb;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAqB,GACtC,OAAO,CAAC,EAAE,CAAC,CA0Bb;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,mBAAmB,EAClC,sBAAsB,UAAQ,iBA6B/B;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,gBAAgB,EAAE,2BAA2B,EAC7C,sBAAsB,UAAQ,iBAyC/B"}
@@ -0,0 +1,170 @@
1
+ import { CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE, CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec-labs/constants';
2
+ import { padArrayEnd } from '@aztec-labs/foundation/collection';
3
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
4
+ import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec-labs/protocol-contracts';
5
+ import { bufferAsFields } from '@aztec-labs/stdlib/abi';
6
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
7
+ import { Gas, GasFees, GasSettings } from '@aztec-labs/stdlib/gas';
8
+ import { siloNullifier } from '@aztec-labs/stdlib/hash';
9
+ import { LogHash, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, countAccumulatedItems } from '@aztec-labs/stdlib/kernel';
10
+ import { ContractClassLogFields, PrivateLog } from '@aztec-labs/stdlib/logs';
11
+ import { ChonkProof } from '@aztec-labs/stdlib/proofs';
12
+ import { BlockHeader, GlobalVariables, HashedValues, Tx, TxConstantData, TxContext } from '@aztec-labs/stdlib/tx';
13
+ import { strict as assert } from 'assert';
14
+ const TEARDOWN_DA_GAS_LIMIT = 98_304;
15
+ const TEARDOWN_L2_GAS_LIMIT = 817_500;
16
+ /**
17
+ * Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
18
+ */ export async function createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer = AztecAddress.zero(), gasUsedByPrivate = Gas.empty(), globals = GlobalVariables.empty(), gasLimits) {
19
+ assert(setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined, "Can't create public tx with no enqueued calls");
20
+ // use max limits
21
+ gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
22
+ const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
23
+ // Non revertible private insertions
24
+ if (!privateInsertions.nonRevertible?.nullifiers?.length) {
25
+ throw new Error('At least one non-revertible nullifier is required');
26
+ }
27
+ for(let i = 0; i < privateInsertions.nonRevertible.nullifiers.length; i++){
28
+ assert(i < forPublic.nonRevertibleAccumulatedData.nullifiers.length, 'Nullifier index out of bounds');
29
+ forPublic.nonRevertibleAccumulatedData.nullifiers[i] = privateInsertions.nonRevertible.nullifiers[i];
30
+ }
31
+ if (privateInsertions.nonRevertible.noteHashes) {
32
+ for(let i = 0; i < privateInsertions.nonRevertible.noteHashes.length; i++){
33
+ assert(i < forPublic.nonRevertibleAccumulatedData.noteHashes.length, 'Note hash index out of bounds');
34
+ forPublic.nonRevertibleAccumulatedData.noteHashes[i] = privateInsertions.nonRevertible.noteHashes[i];
35
+ }
36
+ }
37
+ if (privateInsertions.nonRevertible.l2ToL1Msgs) {
38
+ for(let i = 0; i < privateInsertions.nonRevertible.l2ToL1Msgs.length; i++){
39
+ assert(i < forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs.length, 'L2 to L1 message index out of bounds');
40
+ forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs[i] = privateInsertions.nonRevertible.l2ToL1Msgs[i];
41
+ }
42
+ }
43
+ // Revertible private insertions
44
+ if (privateInsertions.revertible) {
45
+ if (privateInsertions.revertible.noteHashes) {
46
+ for(let i = 0; i < privateInsertions.revertible.noteHashes.length; i++){
47
+ assert(i < forPublic.revertibleAccumulatedData.noteHashes.length, 'Note hash index out of bounds');
48
+ forPublic.revertibleAccumulatedData.noteHashes[i] = privateInsertions.revertible.noteHashes[i];
49
+ }
50
+ }
51
+ if (privateInsertions.revertible.nullifiers) {
52
+ for(let i = 0; i < privateInsertions.revertible.nullifiers.length; i++){
53
+ assert(i < forPublic.revertibleAccumulatedData.nullifiers.length, 'Nullifier index out of bounds');
54
+ forPublic.revertibleAccumulatedData.nullifiers[i] = privateInsertions.revertible.nullifiers[i];
55
+ }
56
+ }
57
+ if (privateInsertions.revertible.l2ToL1Msgs) {
58
+ for(let i = 0; i < privateInsertions.revertible.l2ToL1Msgs.length; i++){
59
+ assert(i < forPublic.revertibleAccumulatedData.l2ToL1Msgs.length, 'L2 to L1 message index out of bounds');
60
+ forPublic.revertibleAccumulatedData.l2ToL1Msgs[i] = privateInsertions.revertible.l2ToL1Msgs[i];
61
+ }
62
+ }
63
+ }
64
+ for(let i = 0; i < setupCallRequests.length; i++){
65
+ forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i].request;
66
+ }
67
+ for(let i = 0; i < appCallRequests.length; i++){
68
+ forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i].request;
69
+ }
70
+ if (teardownCallRequest) {
71
+ forPublic.publicTeardownCallRequest = teardownCallRequest.request;
72
+ }
73
+ const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
74
+ const teardownGasLimits = teardownCallRequest ? new Gas(TEARDOWN_DA_GAS_LIMIT, TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
75
+ const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
76
+ const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
77
+ const header = BlockHeader.empty({
78
+ globalVariables: globals
79
+ });
80
+ const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
81
+ const expirationTimestamp = 0n; // Not used in the simulator.
82
+ const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, expirationTimestamp, forPublic);
83
+ const calldata = [
84
+ ...setupCallRequests,
85
+ ...appCallRequests,
86
+ ...teardownCallRequest ? [
87
+ teardownCallRequest
88
+ ] : []
89
+ ].map((r)=>new HashedValues(r.calldata, r.request.calldataHash));
90
+ return await Tx.create({
91
+ data: txData,
92
+ chonkProof: ChonkProof.random(),
93
+ contractClassLogFields: [],
94
+ publicFunctionCalldata: calldata
95
+ });
96
+ }
97
+ export async function createTxForPrivateOnly(feePayer = AztecAddress.zero(), gasUsedByPrivate = new Gas(10, 10)) {
98
+ // use max limits
99
+ const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
100
+ const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
101
+ const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
102
+ const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
103
+ const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
104
+ const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
105
+ const expirationTimestamp = 0n; // Not used in the simulator.
106
+ const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, expirationTimestamp, /*forPublic=*/ undefined, forRollup);
107
+ return await Tx.create({
108
+ data: txData,
109
+ chonkProof: ChonkProof.empty(),
110
+ contractClassLogFields: [],
111
+ publicFunctionCalldata: []
112
+ });
113
+ }
114
+ export async function addNewContractClassToTx(tx, contractClass, skipNullifierInsertion = false) {
115
+ const contractClassLogFields = [
116
+ new Fr(CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE),
117
+ contractClass.id,
118
+ new Fr(contractClass.version),
119
+ new Fr(contractClass.artifactHash),
120
+ new Fr(contractClass.privateFunctionsRoot),
121
+ ...bufferAsFields(contractClass.packedBytecode, Math.ceil(contractClass.packedBytecode.length / 31) + 1)
122
+ ];
123
+ const contractAddress = new AztecAddress(new Fr(CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS));
124
+ const emittedLength = contractClassLogFields.length;
125
+ const logFields = ContractClassLogFields.fromEmittedFields(contractClassLogFields);
126
+ const contractClassLogHash = LogHash.from({
127
+ value: await logFields.hash(),
128
+ length: emittedLength
129
+ }).scope(contractAddress);
130
+ const accumulatedData = tx.data.forPublic ? tx.data.forPublic.revertibleAccumulatedData : tx.data.forRollup.end;
131
+ if (!skipNullifierInsertion) {
132
+ const nextNullifierIndex = countAccumulatedItems(accumulatedData.nullifiers);
133
+ accumulatedData.nullifiers[nextNullifierIndex] = contractClass.id;
134
+ }
135
+ const nextLogIndex = countAccumulatedItems(accumulatedData.contractClassLogsHashes);
136
+ accumulatedData.contractClassLogsHashes[nextLogIndex] = contractClassLogHash;
137
+ tx.contractClassLogFields.push(logFields);
138
+ }
139
+ export async function addNewContractInstanceToTx(tx, contractInstance, skipNullifierInsertion = false) {
140
+ // Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
141
+ const publicKeysAsFields = [
142
+ contractInstance.publicKeys.npkMHash,
143
+ contractInstance.publicKeys.ivpkM.x,
144
+ contractInstance.publicKeys.ivpkM.y,
145
+ contractInstance.publicKeys.ovpkMHash,
146
+ contractInstance.publicKeys.tpkMHash,
147
+ contractInstance.publicKeys.mspkMHash,
148
+ contractInstance.publicKeys.fbpkMHash
149
+ ];
150
+ const logFields = [
151
+ CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
152
+ contractInstance.address.toField(),
153
+ new Fr(contractInstance.version),
154
+ new Fr(contractInstance.salt),
155
+ contractInstance.currentContractClassId,
156
+ contractInstance.initializationHash,
157
+ contractInstance.immutablesHash,
158
+ ...publicKeysAsFields,
159
+ contractInstance.deployer.toField()
160
+ ];
161
+ const contractInstanceLog = new PrivateLog(padArrayEnd(logFields, Fr.ZERO, PRIVATE_LOG_SIZE_IN_FIELDS), logFields.length);
162
+ const contractAddressNullifier = await siloNullifier(AztecAddress.fromNumberUnsafe(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS), contractInstance.address.toField());
163
+ const accumulatedData = tx.data.forPublic ? tx.data.forPublic.revertibleAccumulatedData : tx.data.forRollup.end;
164
+ if (!skipNullifierInsertion) {
165
+ const nextNullifierIndex = countAccumulatedItems(accumulatedData.nullifiers);
166
+ accumulatedData.nullifiers[nextNullifierIndex] = contractAddressNullifier;
167
+ }
168
+ const nextLogIndex = countAccumulatedItems(accumulatedData.privateLogs);
169
+ accumulatedData.privateLogs[nextLogIndex] = contractInstanceLog;
170
+ }
@@ -0,0 +1,65 @@
1
+ import { AvmTxHint, type PublicTxResult } from '@aztec-labs/stdlib/avm';
2
+ import { type MerkleTreeWriteOperations } from '@aztec-labs/stdlib/trees';
3
+ import { GlobalVariables, ProtocolContracts } from '@aztec-labs/stdlib/tx';
4
+ import type { NativeWorldStateService } from '@aztec-labs/world-state';
5
+ import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
6
+ import { AvmSimulatorPool } from '../avm_simulator_pool.js';
7
+ import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
8
+ import { PublicContractsDB } from '../public_db_sources.js';
9
+ /**
10
+ * Request structure for fuzzer simulation communication from C++.
11
+ * Matches the C++ FuzzerSimulationRequest struct
12
+ */
13
+ export declare class FuzzerSimulationRequest {
14
+ readonly tx: AvmTxHint;
15
+ readonly globals: GlobalVariables;
16
+ readonly contractClasses: any[];
17
+ readonly contractInstances: [any, any][];
18
+ readonly publicDataWrites: any[];
19
+ readonly noteHashes: any[];
20
+ readonly protocolContracts: ProtocolContracts;
21
+ constructor(tx: AvmTxHint, globals: GlobalVariables, contractClasses: any[], contractInstances: [any, any][], publicDataWrites: any[], noteHashes: any[], protocolContracts: ProtocolContracts);
22
+ static fromPlainObject(obj: any): FuzzerSimulationRequest;
23
+ }
24
+ /**
25
+ * A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
26
+ * It provides methods for registering contracts from C++ msgpack data and simulating transactions.
27
+ * The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
28
+ * execution against the real AVM rather than a TS reference.
29
+ */
30
+ export declare class AvmFuzzerSimulator extends BaseAvmSimulationTester {
31
+ private avmSimulator;
32
+ private simulator;
33
+ constructor(merkleTrees: MerkleTreeWriteOperations, contractDataSource: SimpleContractDataSource, globals: GlobalVariables, avmSimulator: AvmSimulatorPool, contractsDB: PublicContractsDB, forkId: number);
34
+ /**
35
+ * Static factory method to create an AvmFuzzerSimulator.
36
+ */
37
+ static create(worldStateService: NativeWorldStateService, globals: GlobalVariables): Promise<AvmFuzzerSimulator>;
38
+ /** Tear down the AVM simulator pool (AVM processes and CDB server). */
39
+ close(): Promise<void>;
40
+ /**
41
+ * Simulate a transaction from a C++ AvmTxHint.
42
+ */
43
+ simulate(txHint: AvmTxHint): Promise<PublicTxResult>;
44
+ /**
45
+ * Add a contract class from C++ raw msgpack data.
46
+ */
47
+ addContractClassFromCpp(rawClass: any): Promise<void>;
48
+ /**
49
+ * Add a contract instance from C++ raw msgpack data.
50
+ * This also inserts the contract address nullifier into the nullifier tree,
51
+ * unless the address is a protocol canonical address (1-11).
52
+ */
53
+ addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void>;
54
+ /**
55
+ * Apply public data tree writes from C++ raw msgpack data.
56
+ * This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
57
+ */
58
+ applyPublicDataWrites(rawWrites: any[]): Promise<void>;
59
+ /**
60
+ * Apply note hashes from C++ raw msgpack data.
61
+ * This is used to pre-populate the note hash tree before simulation.
62
+ */
63
+ applyNoteHashes(rawNoteHashes: any[]): Promise<void>;
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2Z1enplcl9zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZnV6emluZy9hdm1fZnV6emVyX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFleEUsT0FBTyxFQUFnQixLQUFLLHlCQUF5QixFQUFzQixNQUFNLDBCQUEwQixDQUFDO0FBQzVHLE9BQU8sRUFFTCxlQUFlLEVBRWYsaUJBQWlCLEVBS2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc1RDs7O0dBR0c7QUFDSCxxQkFBYSx1QkFBdUI7YUFFaEIsRUFBRSxFQUFFLFNBQVM7YUFDYixPQUFPLEVBQUUsZUFBZTthQUN4QixlQUFlLEVBQUUsR0FBRyxFQUFFO2FBQ3RCLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQy9CLGdCQUFnQixFQUFFLEdBQUcsRUFBRTthQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFO2FBQ2pCLGlCQUFpQixFQUFFLGlCQUFpQjtJQVB0RCxZQUNrQixFQUFFLEVBQUUsU0FBUyxFQUNiLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFDdEIsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFDL0IsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEVBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFDakIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ2xEO0lBRUosTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLHVCQUF1QixDQWF4RDtDQUNGO0FBbUhEOzs7OztHQUtHO0FBQ0gscUJBQWEsa0JBQW1CLFNBQVEsdUJBQXVCO0lBTzNELE9BQU8sQ0FBQyxZQUFZO0lBTnRCLE9BQU8sQ0FBQyxTQUFTLENBQW9CO0lBRXJDLFlBQ0UsV0FBVyxFQUFFLHlCQUF5QixFQUN0QyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFDaEIsWUFBWSxFQUFFLGdCQUFnQixFQUN0QyxXQUFXLEVBQUUsaUJBQWlCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBb0JmO0lBRUQ7O09BRUc7SUFDSCxPQUFvQixNQUFNLENBQ3hCLGlCQUFpQixFQUFFLHVCQUF1QixFQUMxQyxPQUFPLEVBQUUsZUFBZSxHQUN2QixPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPN0I7SUFFRCx1RUFBdUU7SUFDMUQsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFbEM7SUFFRDs7T0FFRztJQUNVLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FVaEU7SUFFRDs7T0FFRztJQUNVLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdqRTtJQUVEOzs7O09BSUc7SUFDVSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU14RjtJQUVEOzs7T0FHRztJQUNVLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBS2xFO0lBRUQ7OztPQUdHO0lBQ1UsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avm_fuzzer_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/fuzzing/avm_fuzzer_simulator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,OAAO,EAAgB,KAAK,yBAAyB,EAAsB,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAEL,eAAe,EAEf,iBAAiB,EAKlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;;GAGG;AACH,qBAAa,uBAAuB;aAEhB,EAAE,EAAE,SAAS;aACb,OAAO,EAAE,eAAe;aACxB,eAAe,EAAE,GAAG,EAAE;aACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;aAC/B,gBAAgB,EAAE,GAAG,EAAE;aACvB,UAAU,EAAE,GAAG,EAAE;aACjB,iBAAiB,EAAE,iBAAiB;IAPtD,YACkB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,GAAG,EAAE,EACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC/B,gBAAgB,EAAE,GAAG,EAAE,EACvB,UAAU,EAAE,GAAG,EAAE,EACjB,iBAAiB,EAAE,iBAAiB,EAClD;IAEJ,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,uBAAuB,CAaxD;CACF;AAmHD;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,uBAAuB;IAO3D,OAAO,CAAC,YAAY;IANtB,OAAO,CAAC,SAAS,CAAoB;IAErC,YACE,WAAW,EAAE,yBAAyB,EACtC,kBAAkB,EAAE,wBAAwB,EAC5C,OAAO,EAAE,eAAe,EAChB,YAAY,EAAE,gBAAgB,EACtC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EAoBf;IAED;;OAEG;IACH,OAAoB,MAAM,CACxB,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAO7B;IAED,uEAAuE;IAC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAED;;OAEG;IACU,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhE;IAED;;OAEG;IACU,uBAAuB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;IAED;;;;OAIG;IACU,0BAA0B,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;IAED;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;IAED;;;OAGG;IACU,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;CACF"}