@aztec/simulator 0.0.0-test.1 → 0.0.1-fake-ceab37513c

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 (436) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +10 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +2 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +4 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +13 -18
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +1 -16
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +0 -37
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -3
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +10 -11
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +16 -15
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  94. package/dest/public/avm/opcodes/accrued_substate.js +22 -19
  95. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/addressing_mode.js +48 -27
  98. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  99. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  101. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  102. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/bitwise.js +19 -26
  104. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/comparators.js +3 -3
  106. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  107. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/contract.js +9 -10
  109. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  110. package/dest/public/avm/opcodes/control_flow.js +10 -8
  111. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  112. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  113. package/dest/public/avm/opcodes/conversion.js +264 -3
  114. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/ec_add.js +2 -2
  116. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  117. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/environment_getters.js +12 -12
  119. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  120. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/external_calls.js +39 -33
  122. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  123. package/dest/public/avm/opcodes/hashing.js +6 -6
  124. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  125. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  126. package/dest/public/avm/opcodes/instruction.js +18 -13
  127. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  128. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  129. package/dest/public/avm/opcodes/memory.js +37 -33
  130. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  131. package/dest/public/avm/opcodes/misc.js +17 -12
  132. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/storage.js +7 -5
  134. package/dest/public/avm/revert_reason.d.ts +18 -0
  135. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  136. package/dest/public/avm/revert_reason.js +38 -0
  137. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  138. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  139. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  140. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  142. package/dest/public/avm/serialization/instruction_serialization.d.ts +5 -4
  143. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  144. package/dest/public/avm/serialization/instruction_serialization.js +60 -35
  145. package/dest/public/avm/test_utils.d.ts +10 -13
  146. package/dest/public/avm/test_utils.d.ts.map +1 -1
  147. package/dest/public/avm/test_utils.js +12 -17
  148. package/dest/public/db_interfaces.d.ts +56 -0
  149. package/dest/public/db_interfaces.d.ts.map +1 -0
  150. package/dest/public/db_interfaces.js +3 -0
  151. package/dest/public/debug_fn_name.d.ts +5 -0
  152. package/dest/public/debug_fn_name.d.ts.map +1 -0
  153. package/dest/public/debug_fn_name.js +9 -0
  154. package/dest/public/executor_metrics.d.ts +10 -3
  155. package/dest/public/executor_metrics.d.ts.map +1 -1
  156. package/dest/public/executor_metrics.js +37 -6
  157. package/dest/public/executor_metrics_interface.d.ts +9 -0
  158. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  159. package/dest/public/executor_metrics_interface.js +1 -0
  160. package/dest/public/fixtures/amm_test.d.ts +10 -0
  161. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  162. package/dest/public/fixtures/amm_test.js +213 -0
  163. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  164. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  165. package/dest/public/fixtures/bulk_test.js +393 -0
  166. package/dest/public/fixtures/index.d.ts +6 -0
  167. package/dest/public/fixtures/index.d.ts.map +1 -1
  168. package/dest/public/fixtures/index.js +6 -0
  169. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  170. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  171. package/dest/public/fixtures/minimal_public_tx.js +43 -0
  172. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +33 -13
  173. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  174. package/dest/public/fixtures/public_tx_simulation_tester.js +90 -70
  175. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  176. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  177. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  178. package/dest/public/fixtures/token_test.d.ts +8 -0
  179. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/token_test.js +95 -0
  181. package/dest/public/fixtures/utils.d.ts +16 -3
  182. package/dest/public/fixtures/utils.d.ts.map +1 -1
  183. package/dest/public/fixtures/utils.js +100 -58
  184. package/dest/public/hinting_db_sources.d.ts +68 -0
  185. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  186. package/dest/public/hinting_db_sources.js +294 -0
  187. package/dest/public/index.d.ts +4 -8
  188. package/dest/public/index.d.ts.map +1 -1
  189. package/dest/public/index.js +4 -7
  190. package/dest/public/public_db_sources.d.ts +30 -39
  191. package/dest/public/public_db_sources.d.ts.map +1 -1
  192. package/dest/public/public_db_sources.js +141 -67
  193. package/dest/public/public_processor/guarded_merkle_tree.d.ts +47 -0
  194. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  195. package/dest/public/public_processor/guarded_merkle_tree.js +105 -0
  196. package/dest/public/public_processor/public_processor.d.ts +19 -29
  197. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  198. package/dest/public/public_processor/public_processor.js +133 -94
  199. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  200. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  201. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  202. package/dest/public/public_tx_simulator/index.d.ts +3 -0
  203. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  204. package/dest/public/public_tx_simulator/index.js +2 -0
  205. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +23 -0
  206. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  207. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +52 -0
  208. package/dest/public/public_tx_simulator/public_tx_context.d.ts +17 -29
  209. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  210. package/dest/public/public_tx_simulator/public_tx_context.js +59 -91
  211. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +27 -42
  212. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  213. package/dest/public/public_tx_simulator/public_tx_simulator.js +128 -171
  214. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +20 -0
  215. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  216. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  217. package/dest/public/side_effect_trace.d.ts +10 -62
  218. package/dest/public/side_effect_trace.d.ts.map +1 -1
  219. package/dest/public/side_effect_trace.js +43 -108
  220. package/dest/public/side_effect_trace_interface.d.ts +5 -22
  221. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  222. package/dest/public/state_manager/index.d.ts +2 -0
  223. package/dest/public/state_manager/index.d.ts.map +1 -0
  224. package/dest/public/state_manager/index.js +1 -0
  225. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -2
  226. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  227. package/dest/public/{avm/journal → state_manager}/nullifiers.js +2 -2
  228. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  229. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  230. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +37 -85
  231. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  232. package/dest/public/state_manager/state_manager.js +352 -0
  233. package/dest/public/test_executor_metrics.d.ts +54 -0
  234. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  235. package/dest/public/test_executor_metrics.js +306 -0
  236. package/dest/public/unique_class_ids.d.ts.map +1 -1
  237. package/dest/public/utils.d.ts +2 -4
  238. package/dest/public/utils.d.ts.map +1 -1
  239. package/dest/public/utils.js +4 -21
  240. package/dest/server.d.ts +6 -3
  241. package/dest/server.d.ts.map +1 -1
  242. package/dest/server.js +5 -2
  243. package/dest/testing.d.ts +2 -0
  244. package/dest/testing.d.ts.map +1 -0
  245. package/dest/testing.js +1 -0
  246. package/package.json +31 -30
  247. package/src/client.ts +5 -3
  248. package/src/common/errors.ts +79 -44
  249. package/src/common/index.ts +0 -1
  250. package/src/private/acvm/acvm.ts +17 -32
  251. package/src/private/acvm/acvm_types.ts +1 -1
  252. package/src/private/acvm/deserialize.ts +35 -29
  253. package/src/private/acvm/index.ts +0 -1
  254. package/src/private/acvm/serialize.ts +63 -0
  255. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +31 -15
  256. package/src/private/acvm_wasm.ts +72 -0
  257. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  258. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  259. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  260. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  261. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  262. package/src/private/circuit_simulator.ts +90 -0
  263. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  264. package/src/public/avm/avm_context.ts +4 -4
  265. package/src/public/avm/avm_contract_call_result.ts +17 -5
  266. package/src/public/avm/avm_execution_environment.ts +7 -1
  267. package/src/public/avm/avm_gas.ts +23 -35
  268. package/src/public/avm/avm_machine_state.ts +5 -0
  269. package/src/public/avm/avm_memory_types.ts +19 -6
  270. package/src/public/avm/avm_simulator.ts +30 -29
  271. package/src/public/avm/avm_simulator_interface.ts +8 -0
  272. package/src/public/avm/errors.ts +1 -53
  273. package/src/public/avm/fixtures/avm_simulation_tester.ts +19 -18
  274. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +15 -14
  275. package/src/public/avm/fixtures/initializers.ts +103 -0
  276. package/src/public/avm/fixtures/utils.ts +150 -0
  277. package/src/public/avm/index.ts +0 -2
  278. package/src/public/avm/opcodes/accrued_substate.ts +62 -27
  279. package/src/public/avm/opcodes/addressing_mode.ts +57 -33
  280. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  281. package/src/public/avm/opcodes/bitwise.ts +33 -29
  282. package/src/public/avm/opcodes/comparators.ts +6 -3
  283. package/src/public/avm/opcodes/contract.ts +10 -7
  284. package/src/public/avm/opcodes/control_flow.ts +19 -10
  285. package/src/public/avm/opcodes/conversion.ts +23 -3
  286. package/src/public/avm/opcodes/ec_add.ts +5 -2
  287. package/src/public/avm/opcodes/environment_getters.ts +22 -15
  288. package/src/public/avm/opcodes/external_calls.ts +61 -28
  289. package/src/public/avm/opcodes/hashing.ts +28 -8
  290. package/src/public/avm/opcodes/instruction.ts +23 -15
  291. package/src/public/avm/opcodes/memory.ts +71 -32
  292. package/src/public/avm/opcodes/misc.ts +24 -16
  293. package/src/public/avm/opcodes/storage.ts +22 -6
  294. package/src/public/avm/revert_reason.ts +55 -0
  295. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  296. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  297. package/src/public/avm/serialization/instruction_serialization.ts +63 -34
  298. package/src/public/avm/test_utils.ts +23 -32
  299. package/src/public/db_interfaces.ts +61 -0
  300. package/src/{common → public}/debug_fn_name.ts +7 -7
  301. package/src/public/executor_metrics.ts +55 -6
  302. package/src/public/executor_metrics_interface.ts +14 -0
  303. package/src/public/fixtures/amm_test.ts +331 -0
  304. package/src/public/fixtures/bulk_test.ts +151 -0
  305. package/src/public/fixtures/index.ts +6 -0
  306. package/src/public/fixtures/minimal_public_tx.ts +59 -0
  307. package/src/public/fixtures/public_tx_simulation_tester.ts +154 -113
  308. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  309. package/src/public/fixtures/token_test.ts +140 -0
  310. package/src/public/fixtures/utils.ts +141 -68
  311. package/src/public/hinting_db_sources.ts +500 -0
  312. package/src/public/index.ts +4 -8
  313. package/src/public/public_db_sources.ts +179 -96
  314. package/src/public/public_processor/guarded_merkle_tree.ts +149 -0
  315. package/src/public/public_processor/public_processor.ts +179 -139
  316. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  317. package/src/public/public_tx_simulator/index.ts +2 -0
  318. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +106 -0
  319. package/src/public/public_tx_simulator/public_tx_context.ts +153 -193
  320. package/src/public/public_tx_simulator/public_tx_simulator.ts +167 -211
  321. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +72 -0
  322. package/src/public/side_effect_trace.ts +52 -303
  323. package/src/public/side_effect_trace_interface.ts +4 -58
  324. package/src/public/state_manager/index.ts +1 -0
  325. package/src/public/{avm/journal → state_manager}/nullifiers.ts +4 -4
  326. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  327. package/src/public/state_manager/state_manager.ts +512 -0
  328. package/src/public/test_executor_metrics.ts +395 -0
  329. package/src/public/utils.ts +5 -21
  330. package/src/server.ts +6 -3
  331. package/src/testing.ts +1 -0
  332. package/dest/common/db_interfaces.d.ts +0 -80
  333. package/dest/common/db_interfaces.d.ts.map +0 -1
  334. package/dest/common/db_interfaces.js +0 -1
  335. package/dest/common/debug_fn_name.d.ts +0 -5
  336. package/dest/common/debug_fn_name.d.ts.map +0 -1
  337. package/dest/common/debug_fn_name.js +0 -6
  338. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  339. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  340. package/dest/common/message_load_oracle_inputs.js +0 -15
  341. package/dest/private/acvm/oracle/index.d.ts +0 -14
  342. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  343. package/dest/private/acvm/oracle/index.js +0 -2
  344. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  345. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  346. package/dest/private/acvm/oracle/oracle.js +0 -263
  347. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  348. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  349. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  350. package/dest/private/execution_data_provider.d.ts +0 -261
  351. package/dest/private/execution_data_provider.d.ts.map +0 -1
  352. package/dest/private/execution_data_provider.js +0 -14
  353. package/dest/private/execution_note_cache.d.ts +0 -93
  354. package/dest/private/execution_note_cache.d.ts.map +0 -1
  355. package/dest/private/execution_note_cache.js +0 -180
  356. package/dest/private/hashed_values_cache.d.ts +0 -28
  357. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  358. package/dest/private/hashed_values_cache.js +0 -46
  359. package/dest/private/index.d.ts +0 -13
  360. package/dest/private/index.d.ts.map +0 -1
  361. package/dest/private/index.js +0 -12
  362. package/dest/private/pick_notes.d.ts +0 -85
  363. package/dest/private/pick_notes.d.ts.map +0 -1
  364. package/dest/private/pick_notes.js +0 -51
  365. package/dest/private/private_execution.d.ts +0 -25
  366. package/dest/private/private_execution.d.ts.map +0 -1
  367. package/dest/private/private_execution.js +0 -92
  368. package/dest/private/private_execution_oracle.d.ts +0 -215
  369. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  370. package/dest/private/private_execution_oracle.js +0 -382
  371. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  372. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  373. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  374. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  375. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  376. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  377. package/dest/private/providers/factory.d.ts +0 -12
  378. package/dest/private/providers/factory.d.ts.map +0 -1
  379. package/dest/private/providers/simulation_provider.d.ts +0 -19
  380. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  381. package/dest/private/providers/simulation_provider.js +0 -24
  382. package/dest/private/simulator.d.ts +0 -34
  383. package/dest/private/simulator.d.ts.map +0 -1
  384. package/dest/private/simulator.js +0 -76
  385. package/dest/private/unconstrained_execution.d.ts +0 -10
  386. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  387. package/dest/private/unconstrained_execution.js +0 -27
  388. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  389. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  390. package/dest/private/unconstrained_execution_oracle.js +0 -258
  391. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  392. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  393. package/dest/public/avm/bytecode_utils.js +0 -17
  394. package/dest/public/avm/fixtures/index.d.ts +0 -84
  395. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  396. package/dest/public/avm/fixtures/index.js +0 -175
  397. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  398. package/dest/public/avm/journal/index.d.ts +0 -2
  399. package/dest/public/avm/journal/index.d.ts.map +0 -1
  400. package/dest/public/avm/journal/index.js +0 -1
  401. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  402. package/dest/public/avm/journal/journal.js +0 -486
  403. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  404. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  405. package/dest/public/execution.d.ts +0 -108
  406. package/dest/public/execution.d.ts.map +0 -1
  407. package/dest/public/execution.js +0 -9
  408. package/dest/test/utils.d.ts +0 -13
  409. package/dest/test/utils.d.ts.map +0 -1
  410. package/dest/test/utils.js +0 -22
  411. package/src/common/db_interfaces.ts +0 -94
  412. package/src/common/message_load_oracle_inputs.ts +0 -15
  413. package/src/private/acvm/oracle/index.ts +0 -16
  414. package/src/private/acvm/oracle/oracle.ts +0 -455
  415. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  416. package/src/private/execution_data_provider.ts +0 -323
  417. package/src/private/execution_note_cache.ts +0 -217
  418. package/src/private/hashed_values_cache.ts +0 -55
  419. package/src/private/index.ts +0 -16
  420. package/src/private/pick_notes.ts +0 -141
  421. package/src/private/private_execution.ts +0 -151
  422. package/src/private/private_execution_oracle.ts +0 -614
  423. package/src/private/providers/acvm_wasm.ts +0 -63
  424. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  425. package/src/private/providers/simulation_provider.ts +0 -45
  426. package/src/private/simulator.ts +0 -147
  427. package/src/private/unconstrained_execution.ts +0 -50
  428. package/src/private/unconstrained_execution_oracle.ts +0 -373
  429. package/src/public/avm/bytecode_utils.ts +0 -17
  430. package/src/public/avm/fixtures/index.ts +0 -296
  431. package/src/public/avm/journal/index.ts +0 -1
  432. package/src/public/avm/journal/journal.ts +0 -742
  433. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  434. package/src/public/execution.ts +0 -140
  435. package/src/test/utils.ts +0 -36
  436. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,25 +1,31 @@
1
- import { PUBLIC_DISPATCH_SELECTOR } from '@aztec/constants';
1
+ import { asyncMap } from '@aztec/foundation/async-map';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
- import { type ContractArtifact, FunctionSelector, encodeArguments } from '@aztec/stdlib/abi';
3
+ import { type ContractArtifact, encodeArguments } from '@aztec/stdlib/abi';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import { GasFees } from '@aztec/stdlib/gas';
5
+ import { Gas, GasFees } from '@aztec/stdlib/gas';
6
6
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
7
- import { PublicExecutionRequest, type Tx } from '@aztec/stdlib/tx';
8
- import { CallContext, GlobalVariables } from '@aztec/stdlib/tx';
7
+ import { PublicCallRequest } from '@aztec/stdlib/kernel';
8
+ import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/stdlib/tx';
9
9
  import { NativeWorldStateService } from '@aztec/world-state';
10
10
 
11
11
  import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
12
- import { getContractFunctionArtifact, getFunctionSelector } from '../avm/fixtures/index.js';
13
- import { SimpleContractDataSource } from '../avm/fixtures/simple_contract_data_source.js';
14
- import { WorldStateDB } from '../public_db_sources.js';
15
- import { type PublicTxResult, PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
16
- import { createTxForPublicCalls } from './index.js';
12
+ import {
13
+ DEFAULT_BLOCK_NUMBER,
14
+ DEFAULT_TIMESTAMP,
15
+ getContractFunctionAbi,
16
+ getFunctionSelector,
17
+ } from '../avm/fixtures/utils.js';
18
+ import { PublicContractsDB } from '../public_db_sources.js';
19
+ import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
20
+ import type { PublicTxResult } from '../public_tx_simulator/public_tx_simulator.js';
21
+ import { TestExecutorMetrics } from '../test_executor_metrics.js';
22
+ import { SimpleContractDataSource } from './simple_contract_data_source.js';
23
+ import { type TestPrivateInsertions, createTxForPublicCalls } from './utils.js';
17
24
 
18
- const TIMESTAMP = new Fr(99833);
19
25
  const DEFAULT_GAS_FEES = new GasFees(2, 3);
20
- export const DEFAULT_BLOCK_NUMBER = 42;
21
26
 
22
27
  export type TestEnqueuedCall = {
28
+ sender?: AztecAddress;
23
29
  address: AztecAddress;
24
30
  fnName: string;
25
31
  args: any[];
@@ -33,21 +39,41 @@ export type TestEnqueuedCall = {
33
39
  * transactions.
34
40
  */
35
41
  export class PublicTxSimulationTester extends BaseAvmSimulationTester {
36
- private txCount = 0;
42
+ protected txCount: number = 0;
43
+ private simulator: MeasuredPublicTxSimulator;
44
+ private metricsPrefix?: string;
37
45
 
38
46
  constructor(
39
- private worldStateDB: WorldStateDB,
47
+ merkleTree: MerkleTreeWriteOperations,
40
48
  contractDataSource: SimpleContractDataSource,
41
- merkleTrees: MerkleTreeWriteOperations,
49
+ globals: GlobalVariables = defaultGlobals(),
50
+ private metrics: TestExecutorMetrics = new TestExecutorMetrics(),
42
51
  ) {
43
- super(contractDataSource, merkleTrees);
52
+ super(contractDataSource, merkleTree);
53
+
54
+ const contractsDB = new PublicContractsDB(contractDataSource);
55
+ this.simulator = new MeasuredPublicTxSimulator(
56
+ merkleTree,
57
+ contractsDB,
58
+ globals,
59
+ /*doMerkleOperations=*/ true,
60
+ /*skipFeeEnforcement=*/ false,
61
+ /*clientInitiatedSimulation=*/ true,
62
+ this.metrics,
63
+ );
44
64
  }
45
65
 
46
- public static async create(): Promise<PublicTxSimulationTester> {
66
+ public static async create(
67
+ globals: GlobalVariables = defaultGlobals(),
68
+ metrics: TestExecutorMetrics = new TestExecutorMetrics(),
69
+ ): Promise<PublicTxSimulationTester> {
47
70
  const contractDataSource = new SimpleContractDataSource();
48
- const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
49
- const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
50
- return new PublicTxSimulationTester(worldStateDB, contractDataSource, merkleTrees);
71
+ const merkleTree = await (await NativeWorldStateService.tmp()).fork();
72
+ return new PublicTxSimulationTester(merkleTree, contractDataSource, globals, metrics);
73
+ }
74
+
75
+ public setMetricsPrefix(prefix: string) {
76
+ this.metricsPrefix = prefix;
51
77
  }
52
78
 
53
79
  public async createTx(
@@ -57,69 +83,27 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
57
83
  teardownCall?: TestEnqueuedCall,
58
84
  feePayer: AztecAddress = sender,
59
85
  /* need some unique first nullifier for note-nonce computations */
60
- firstNullifier = new Fr(420000 + this.txCount++),
86
+ privateInsertions: TestPrivateInsertions = { nonRevertible: { nullifiers: [new Fr(420000 + this.txCount)] } },
61
87
  ): Promise<Tx> {
62
- const setupExecutionRequests: PublicExecutionRequest[] = [];
63
- for (let i = 0; i < setupCalls.length; i++) {
64
- const address = setupCalls[i].address;
65
- const contractArtifact =
66
- setupCalls[i].contractArtifact || (await this.contractDataSource.getContractArtifact(address));
67
- if (!contractArtifact) {
68
- throw new Error(`Contract artifact not found for address: ${address}`);
69
- }
70
- const req = await executionRequestForCall(
71
- contractArtifact,
72
- sender,
73
- address,
74
- setupCalls[i].fnName,
75
- setupCalls[i].args,
76
- setupCalls[i].isStaticCall,
77
- );
78
- setupExecutionRequests.push(req);
79
- }
80
- const appExecutionRequests: PublicExecutionRequest[] = [];
81
- for (let i = 0; i < appCalls.length; i++) {
82
- const address = appCalls[i].address;
83
- const contractArtifact =
84
- appCalls[i].contractArtifact || (await this.contractDataSource.getContractArtifact(address));
85
- if (!contractArtifact) {
86
- throw new Error(`Contract artifact not found for address: ${address}`);
87
- }
88
- const req = await executionRequestForCall(
89
- contractArtifact,
90
- sender,
91
- address,
92
- appCalls[i].fnName,
93
- appCalls[i].args,
94
- appCalls[i].isStaticCall,
95
- );
96
- appExecutionRequests.push(req);
97
- }
98
-
99
- let teardownExecutionRequest: PublicExecutionRequest | undefined = undefined;
100
- if (teardownCall) {
101
- const address = teardownCall.address;
102
- const contractArtifact =
103
- teardownCall.contractArtifact || (await this.contractDataSource.getContractArtifact(address));
104
- if (!contractArtifact) {
105
- throw new Error(`Contract artifact not found for address: ${address}`);
106
- }
107
- teardownExecutionRequest = await executionRequestForCall(
108
- contractArtifact,
109
- sender,
110
- address,
111
- teardownCall.fnName,
112
- teardownCall.args,
113
- teardownCall.isStaticCall,
114
- );
115
- }
116
-
117
- return await createTxForPublicCalls(
118
- firstNullifier,
119
- setupExecutionRequests,
120
- appExecutionRequests,
121
- teardownExecutionRequest,
88
+ const setupCallRequests = await asyncMap(setupCalls, call =>
89
+ this.#createPubicCallRequestForCall(call, call.sender ?? sender),
90
+ );
91
+ const appCallRequests = await asyncMap(appCalls, call =>
92
+ this.#createPubicCallRequestForCall(call, call.sender ?? sender),
93
+ );
94
+ const teardownCallRequest = teardownCall
95
+ ? await this.#createPubicCallRequestForCall(teardownCall, teardownCall.sender ?? sender)
96
+ : undefined;
97
+
98
+ this.txCount++;
99
+ return createTxForPublicCalls(
100
+ privateInsertions,
101
+ setupCallRequests,
102
+ appCallRequests,
103
+ teardownCallRequest,
122
104
  feePayer,
105
+ /*gasUsedByPrivate*/ Gas.empty(),
106
+ defaultGlobals(),
123
107
  );
124
108
  }
125
109
 
@@ -130,50 +114,107 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
130
114
  teardownCall?: TestEnqueuedCall,
131
115
  feePayer: AztecAddress = sender,
132
116
  /* need some unique first nullifier for note-nonce computations */
133
- firstNullifier = new Fr(420000 + this.txCount++),
134
- globals = defaultGlobals(),
117
+ privateInsertions?: TestPrivateInsertions,
118
+ txLabel: string = 'unlabeledTx',
135
119
  ): Promise<PublicTxResult> {
136
- const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, firstNullifier);
120
+ const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
137
121
 
138
122
  await this.setFeePayerBalance(feePayer);
139
123
 
140
- const simulator = new PublicTxSimulator(this.merkleTrees, this.worldStateDB, globals, /*doMerkleOperations=*/ true);
124
+ const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
125
+ const fullTxLabel = this.metricsPrefix ? `${this.metricsPrefix}/${txLabelWithCount}` : txLabelWithCount;
126
+
127
+ const avmResult = await this.simulator.simulate(tx, fullTxLabel);
128
+
129
+ // Something like this is often useful for debugging:
130
+ //if (avmResult.revertReason) {
131
+ // // resolve / enrich revert reason
132
+ // const lastAppCall = appCalls[appCalls.length - 1];
141
133
 
142
- const startTime = performance.now();
143
- const avmResult = await simulator.simulate(tx);
144
- const endTime = performance.now();
145
- this.logger.debug(`Public transaction simulation took ${endTime - startTime}ms`);
134
+ // const contractArtifact =
135
+ // lastAppCall.contractArtifact || (await this.contractDataSource.getContractArtifact(lastAppCall.address));
136
+ // const fnAbi = getContractFunctionAbi(lastAppCall.fnName, contractArtifact!);
137
+ // const revertReason = resolveAssertionMessageFromRevertData(avmResult.revertReason.revertData, fnAbi!);
138
+ // this.logger.debug(`Revert reason: ${revertReason}`);
139
+ //}
146
140
 
147
141
  return avmResult;
148
142
  }
149
- }
150
143
 
151
- async function executionRequestForCall(
152
- contractArtifact: ContractArtifact,
153
- sender: AztecAddress,
154
- address: AztecAddress,
155
- fnName: string,
156
- args: Fr[] = [],
157
- isStaticCall: boolean = false,
158
- ): Promise<PublicExecutionRequest> {
159
- const fnSelector = await getFunctionSelector(fnName, contractArtifact);
160
- const fnAbi = getContractFunctionArtifact(fnName, contractArtifact);
161
- const encodedArgs = encodeArguments(fnAbi!, args);
162
- const calldata = [fnSelector.toField(), ...encodedArgs];
163
-
164
- const callContext = new CallContext(
165
- sender,
166
- address,
167
- /*selector=*/ new FunctionSelector(PUBLIC_DISPATCH_SELECTOR),
168
- isStaticCall,
169
- );
170
- return new PublicExecutionRequest(callContext, calldata);
144
+ /**
145
+ * Just simulate the transaction and return the result.
146
+ *
147
+ * This wrapper around simulation allows for easy labeling of a TX
148
+ * which is especially useful when reporting benchmarks or metrics.
149
+ */
150
+ public async simulateTxWithLabel(
151
+ txLabel: string,
152
+ sender: AztecAddress,
153
+ setupCalls?: TestEnqueuedCall[],
154
+ appCalls?: TestEnqueuedCall[],
155
+ teardownCall?: TestEnqueuedCall,
156
+ feePayer?: AztecAddress,
157
+ privateInsertions?: TestPrivateInsertions,
158
+ ): Promise<PublicTxResult> {
159
+ return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel);
160
+ }
161
+
162
+ /**
163
+ * Execute a transaction and return the result.
164
+ *
165
+ * This function can be (it is) overridden by a subclass (AvmProvingTester)
166
+ * to do more work (like prove and verify) while still reusing existing
167
+ * test fixtures (like amm_test). That is why it is not named "simulate*".
168
+ */
169
+ public async executeTxWithLabel(
170
+ txLabel: string,
171
+ sender: AztecAddress,
172
+ setupCalls?: TestEnqueuedCall[],
173
+ appCalls?: TestEnqueuedCall[],
174
+ teardownCall?: TestEnqueuedCall,
175
+ feePayer?: AztecAddress,
176
+ privateInsertions?: TestPrivateInsertions,
177
+ ): Promise<PublicTxResult> {
178
+ return await this.simulateTxWithLabel(
179
+ txLabel,
180
+ sender,
181
+ setupCalls,
182
+ appCalls,
183
+ teardownCall,
184
+ feePayer,
185
+ privateInsertions,
186
+ );
187
+ }
188
+
189
+ public prettyPrintMetrics() {
190
+ this.metrics.prettyPrint();
191
+ }
192
+
193
+ async #createPubicCallRequestForCall(
194
+ call: TestEnqueuedCall,
195
+ sender: AztecAddress,
196
+ ): Promise<PublicCallRequestWithCalldata> {
197
+ const address = call.address;
198
+ const contractArtifact = call.contractArtifact || (await this.contractDataSource.getContractArtifact(address));
199
+ if (!contractArtifact) {
200
+ throw new Error(`Contract artifact not found for address: ${address}`);
201
+ }
202
+
203
+ const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
204
+ const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact)!;
205
+ const encodedArgs = encodeArguments(fnAbi, call.args);
206
+ const calldata = [fnSelector.toField(), ...encodedArgs];
207
+ const isStaticCall = call.isStaticCall ?? false;
208
+ const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
209
+
210
+ return new PublicCallRequestWithCalldata(request, calldata);
211
+ }
171
212
  }
172
213
 
173
- function defaultGlobals() {
214
+ export function defaultGlobals() {
174
215
  const globals = GlobalVariables.empty();
175
- globals.timestamp = TIMESTAMP;
216
+ globals.timestamp = DEFAULT_TIMESTAMP;
176
217
  globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
177
- globals.blockNumber = new Fr(DEFAULT_BLOCK_NUMBER);
218
+ globals.blockNumber = DEFAULT_BLOCK_NUMBER;
178
219
  return globals;
179
220
  }
@@ -1,15 +1,10 @@
1
1
  import type { Fr } from '@aztec/foundation/fields';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
- import { type ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
3
+ import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import type {
6
- ContractClassPublic,
7
- ContractDataSource,
8
- ContractInstanceWithAddress,
9
- PublicFunction,
10
- } from '@aztec/stdlib/contract';
5
+ import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
11
6
 
12
- import { PUBLIC_DISPATCH_FN_NAME } from './index.js';
7
+ import { getFunctionSelector } from '../avm/fixtures/utils.js';
13
8
 
14
9
  /**
15
10
  * This class is used during public/avm testing to function as a database of
@@ -27,6 +22,8 @@ export class SimpleContractDataSource implements ContractDataSource {
27
22
  private contractInstances: Map<string, ContractInstanceWithAddress> = new Map();
28
23
  // maps contract instance address to address
29
24
  private contractArtifacts: Map<string, ContractArtifact> = new Map();
25
+ // maps `${classID}:${fnSelector}` to name
26
+ private debugFunctionName: Map<string, string> = new Map();
30
27
 
31
28
  /////////////////////////////////////////////////////////////
32
29
  // Helper functions not in the contract data source interface
@@ -39,21 +36,29 @@ export class SimpleContractDataSource implements ContractDataSource {
39
36
  contractClass: ContractClassPublic,
40
37
  contractInstance: ContractInstanceWithAddress,
41
38
  ) {
42
- this.addContractArtifact(contractClass.id, contractArtifact);
39
+ await this.addContractArtifact(contractClass.id, contractArtifact);
43
40
  await this.addContractClass(contractClass);
44
41
  await this.addContractInstance(contractInstance);
45
42
  }
46
43
 
47
- addContractArtifact(classId: Fr, artifact: ContractArtifact): void {
44
+ async addContractArtifact(classId: Fr, artifact: ContractArtifact) {
48
45
  this.contractArtifacts.set(classId.toString(), artifact);
46
+ const classIdStr = classId.toString();
47
+ const publicFns = artifact.nonDispatchPublicFunctions;
48
+ if (publicFns.length !== 0) {
49
+ for (const fn of publicFns) {
50
+ const actualFnName = `${fn.name}`;
51
+ const fnSelector = await getFunctionSelector(actualFnName, artifact);
52
+ const key = `${classIdStr}:${fnSelector.toString()}`;
53
+
54
+ const longFnName = `${artifact.name}.${actualFnName}`;
55
+ this.debugFunctionName.set(key, longFnName);
56
+ }
57
+ }
49
58
  }
50
59
 
51
60
  /////////////////////////////////////////////////////////////
52
61
  // ContractDataSource function implementations
53
- getPublicFunction(_address: AztecAddress, _selector: FunctionSelector): Promise<PublicFunction> {
54
- throw new Error('Method not implemented.');
55
- }
56
-
57
62
  getBlockNumber(): Promise<number> {
58
63
  throw new Error('Method not implemented.');
59
64
  }
@@ -82,14 +87,27 @@ export class SimpleContractDataSource implements ContractDataSource {
82
87
  }
83
88
  this.logger.debug(`Retrieved contract artifact for address: ${address}`);
84
89
  this.logger.debug(`Contract class ID: ${contractInstance.currentContractClassId}`);
85
- return Promise.resolve(this.contractArtifacts.get(contractInstance!.currentContractClassId.toString()));
90
+ return this.contractArtifacts.get(contractInstance!.currentContractClassId.toString());
86
91
  }
87
92
 
88
- getContractFunctionName(_address: AztecAddress, _selector: FunctionSelector): Promise<string> {
89
- return Promise.resolve(PUBLIC_DISPATCH_FN_NAME);
93
+ async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string> {
94
+ const contractInstance = await this.getContract(address);
95
+ if (!contractInstance) {
96
+ this.logger.warn(
97
+ `Couldn't get fn name for debugging. Contract not in tester's ContractDataSource. Using selector:${selector} instead...`,
98
+ );
99
+ return `selector:${selector.toString()}`;
100
+ }
101
+ const key = `${contractInstance.currentContractClassId.toString()}:${selector.toString()}`;
102
+ const fnName = this.debugFunctionName.get(key);
103
+ if (!fnName) {
104
+ this.logger.warn(`Couldn't get fn name for debugging. Using selector:${selector} instead...`);
105
+ return selector.toString();
106
+ }
107
+ return fnName;
90
108
  }
91
109
 
92
- registerContractFunctionSignatures(_address: AztecAddress, _signatures: string[]): Promise<void> {
110
+ registerContractFunctionSignatures(_signatures: string[]): Promise<void> {
93
111
  return Promise.resolve();
94
112
  }
95
113
 
@@ -0,0 +1,140 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import type { ContractArtifact } from '@aztec/stdlib/abi';
5
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
7
+
8
+ import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
9
+
10
+ export async function tokenTest(
11
+ tester: PublicTxSimulationTester,
12
+ logger: Logger,
13
+ tokenArtifact: ContractArtifact,
14
+ expectToBeTrue: (x: boolean) => void,
15
+ ) {
16
+ const timer = new Timer();
17
+
18
+ const admin = AztecAddress.fromNumber(42);
19
+ const sender = AztecAddress.fromNumber(111);
20
+ const receiver = AztecAddress.fromNumber(222);
21
+
22
+ const token = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue);
23
+
24
+ const mintAmount = 100n;
25
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
26
+ const mintResult = await tester.executeTxWithLabel(
27
+ /*txLabel=*/ 'Token/mint_to_public',
28
+ /*sender=*/ admin,
29
+ /*setupCalls=*/ [],
30
+ /*appCalls=*/ [
31
+ {
32
+ address: token.address,
33
+ fnName: 'mint_to_public',
34
+ args: [/*to=*/ sender, mintAmount],
35
+ },
36
+ ],
37
+ );
38
+ expectToBeTrue(mintResult.revertCode.isOK());
39
+ await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue);
40
+
41
+ const authwitNonce = new Fr(0);
42
+ const transferAmount = 50n;
43
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
44
+ const transferResult = await tester.executeTxWithLabel(
45
+ /*txLabel=*/ 'Token/transfer_in_public',
46
+ /*sender=*/ sender,
47
+ /*setupCalls=*/ [],
48
+ /*appCalls=*/ [
49
+ {
50
+ address: token.address,
51
+ fnName: 'transfer_in_public',
52
+ args: [/*from=*/ sender, /*to=*/ receiver, transferAmount, authwitNonce],
53
+ },
54
+ ],
55
+ );
56
+ expectToBeTrue(transferResult.revertCode.isOK());
57
+ await checkBalance(tester, token, sender, receiver, mintAmount - transferAmount, expectToBeTrue);
58
+ await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue);
59
+
60
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
61
+ const burnResult = await tester.executeTxWithLabel(
62
+ /*txLabel=*/ 'Token/burn_public',
63
+ /*sender=*/ receiver,
64
+ /*setupCalls=*/ [],
65
+ /*appCalls=*/ [
66
+ {
67
+ address: token.address,
68
+ fnName: 'burn_public',
69
+ args: [/*from=*/ receiver, transferAmount, authwitNonce],
70
+ },
71
+ ],
72
+ );
73
+ expectToBeTrue(burnResult.revertCode.isOK());
74
+ await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue);
75
+
76
+ logger.info(`TokenContract test took ${timer.ms()}ms\n`);
77
+ }
78
+
79
+ export async function setUpToken(
80
+ tester: PublicTxSimulationTester,
81
+ tokenArtifact: ContractArtifact,
82
+ admin: AztecAddress,
83
+ expectToBeTrue: (x: boolean) => void,
84
+ seed = 0,
85
+ ) {
86
+ const constructorArgs = [admin, /*name=*/ 'Token', /*symbol=*/ 'TOK', /*decimals=*/ new Fr(18)];
87
+ const token = await tester.registerAndDeployContract(
88
+ constructorArgs,
89
+ /*deployer=*/ admin,
90
+ tokenArtifact,
91
+ /*skipNullifierInsertion=*/ false,
92
+ seed,
93
+ );
94
+
95
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
96
+ const result = await tester.executeTxWithLabel(
97
+ /*txLabel=*/ 'Token/constructor',
98
+ /*sender=*/ admin,
99
+ /*setupCalls=*/ [],
100
+ /*appCalls=*/ [
101
+ {
102
+ fnName: 'constructor',
103
+ args: constructorArgs,
104
+ address: token.address,
105
+ },
106
+ ],
107
+ );
108
+ expectToBeTrue(result.revertCode.isOK());
109
+ return token;
110
+ }
111
+
112
+ async function checkBalance(
113
+ tester: PublicTxSimulationTester,
114
+ token: ContractInstanceWithAddress,
115
+ sender: AztecAddress,
116
+ account: AztecAddress,
117
+ expectedBalance: bigint,
118
+ expectToBeTrue: (x: boolean) => void,
119
+ ) {
120
+ // Strictly simulate this! No need to "execute" (aka prove if using AvmProvingTester subclass).
121
+ const balResult = await tester.simulateTxWithLabel(
122
+ /*txLabel=*/ 'Token/balance_of_public',
123
+ sender,
124
+ /*setupCalls=*/ [],
125
+ /*appCalls=*/ [
126
+ {
127
+ address: token.address,
128
+ fnName: 'balance_of_public',
129
+ args: [/*owner=*/ account],
130
+ isStaticCall: true,
131
+ },
132
+ ],
133
+ );
134
+ expectToBeTrue(balResult.revertCode.isOK());
135
+ // should be 1 call with 1 return value that is expectedBalance
136
+ expectToBeTrue(balResult.processedPhases.length == 1);
137
+ expectToBeTrue(balResult.processedPhases[0].returnValues.length == 1);
138
+ expectToBeTrue(balResult.processedPhases[0].returnValues[0].values!.length == 1);
139
+ expectToBeTrue(balResult.processedPhases[0].returnValues[0].values![0].toBigInt() == expectedBalance);
140
+ }