@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.03f7ef2

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 (521) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +6 -15
  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 +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +12 -6
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +10 -16
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +19 -20
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +32 -24
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +21 -4
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +54 -1
  27. package/dest/private/acvm_native.d.ts +39 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  30. package/dest/private/acvm_wasm.d.ts +15 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +2 -2
  54. package/dest/public/avm/avm_context.d.ts +7 -7
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +6 -4
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +11 -7
  59. package/dest/public/avm/avm_execution_environment.d.ts +5 -3
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +5 -3
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +27 -35
  65. package/dest/public/avm/avm_machine_state.d.ts +4 -2
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +2 -0
  68. package/dest/public/avm/avm_memory_types.d.ts +100 -89
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +18 -7
  71. package/dest/public/avm/avm_simulator.d.ts +7 -7
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +28 -39
  74. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  75. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  76. package/dest/public/avm/avm_simulator_interface.js +3 -0
  77. package/dest/public/avm/errors.d.ts +11 -29
  78. package/dest/public/avm/errors.d.ts.map +1 -1
  79. package/dest/public/avm/errors.js +19 -57
  80. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  81. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  82. package/dest/public/avm/fixtures/avm_simulation_tester.js +23 -16
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
  84. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
  86. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  87. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  88. package/dest/public/avm/fixtures/initializers.js +44 -0
  89. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  90. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/utils.js +96 -0
  92. package/dest/public/avm/index.d.ts +1 -3
  93. package/dest/public/avm/index.d.ts.map +1 -1
  94. package/dest/public/avm/index.js +0 -2
  95. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  96. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  98. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  99. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  101. package/dest/public/avm/opcodes/arithmetic.d.ts +19 -7
  102. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  104. package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
  105. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/bitwise.js +19 -26
  107. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  108. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/comparators.js +3 -3
  110. package/dest/public/avm/opcodes/contract.d.ts +2 -3
  111. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/contract.js +9 -10
  113. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  114. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/control_flow.js +10 -8
  116. package/dest/public/avm/opcodes/conversion.d.ts +2 -1
  117. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/conversion.js +267 -3
  119. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  120. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/ec_add.js +8 -8
  122. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  123. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  125. package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
  126. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/external_calls.js +39 -34
  128. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  129. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/hashing.js +15 -10
  131. package/dest/public/avm/opcodes/index.d.ts +1 -1
  132. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  133. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  134. package/dest/public/avm/opcodes/instruction.js +23 -19
  135. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  136. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/memory.d.ts +6 -6
  138. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  139. package/dest/public/avm/opcodes/memory.js +37 -33
  140. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  141. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  142. package/dest/public/avm/opcodes/misc.js +41 -16
  143. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  144. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  145. package/dest/public/avm/opcodes/storage.js +7 -5
  146. package/dest/public/avm/revert_reason.d.ts +18 -0
  147. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  148. package/dest/public/avm/revert_reason.js +39 -0
  149. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  150. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  151. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  152. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  153. package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
  154. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  155. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  156. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  157. package/dest/public/avm/test_utils.d.ts +12 -15
  158. package/dest/public/avm/test_utils.d.ts.map +1 -1
  159. package/dest/public/avm/test_utils.js +17 -25
  160. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  161. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  162. package/dest/public/contracts_db_checkpoint.js +30 -0
  163. package/dest/public/db_interfaces.d.ts +68 -0
  164. package/dest/public/db_interfaces.d.ts.map +1 -0
  165. package/dest/public/db_interfaces.js +3 -0
  166. package/dest/public/debug_fn_name.d.ts +18 -0
  167. package/dest/public/debug_fn_name.d.ts.map +1 -0
  168. package/dest/public/debug_fn_name.js +35 -0
  169. package/dest/public/executor_metrics.d.ts +12 -4
  170. package/dest/public/executor_metrics.d.ts.map +1 -1
  171. package/dest/public/executor_metrics.js +37 -6
  172. package/dest/public/executor_metrics_interface.d.ts +10 -0
  173. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  174. package/dest/public/executor_metrics_interface.js +1 -0
  175. package/dest/public/fixtures/amm_test.d.ts +10 -0
  176. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  177. package/dest/public/fixtures/amm_test.js +213 -0
  178. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  179. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/bulk_test.js +278 -0
  181. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  182. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  183. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  184. package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
  185. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  186. package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
  187. package/dest/public/fixtures/index.d.ts +10 -1
  188. package/dest/public/fixtures/index.d.ts.map +1 -1
  189. package/dest/public/fixtures/index.js +9 -0
  190. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  191. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  192. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  193. package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
  194. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  195. package/dest/public/fixtures/opcode_spammer.js +1681 -0
  196. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
  197. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  198. package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
  199. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  200. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  201. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  202. package/dest/public/fixtures/token_test.d.ts +12 -0
  203. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  204. package/dest/public/fixtures/token_test.js +96 -0
  205. package/dest/public/fixtures/utils.d.ts +18 -5
  206. package/dest/public/fixtures/utils.d.ts.map +1 -1
  207. package/dest/public/fixtures/utils.js +102 -59
  208. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
  209. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  210. package/dest/public/fuzzing/avm_fuzzer_simulator.js +139 -0
  211. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  212. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  213. package/dest/public/fuzzing/avm_simulator_bin.js +100 -0
  214. package/dest/public/hinting_db_sources.d.ts +80 -0
  215. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  216. package/dest/public/hinting_db_sources.js +353 -0
  217. package/dest/public/index.d.ts +6 -9
  218. package/dest/public/index.d.ts.map +1 -1
  219. package/dest/public/index.js +4 -7
  220. package/dest/public/public_db_sources.d.ts +52 -102
  221. package/dest/public/public_db_sources.d.ts.map +1 -1
  222. package/dest/public/public_db_sources.js +220 -193
  223. package/dest/public/public_errors.d.ts +12 -0
  224. package/dest/public/public_errors.d.ts.map +1 -0
  225. package/dest/public/public_errors.js +13 -0
  226. package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
  227. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  228. package/dest/public/public_processor/guarded_merkle_tree.js +111 -0
  229. package/dest/public/public_processor/public_processor.d.ts +26 -38
  230. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  231. package/dest/public/public_processor/public_processor.js +177 -121
  232. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  233. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  234. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  235. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
  236. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  237. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
  238. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  239. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  240. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
  241. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  242. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  243. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  244. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  245. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  246. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  247. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
  248. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  249. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  250. package/dest/public/public_tx_simulator/factories.d.ts +13 -0
  251. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  252. package/dest/public/public_tx_simulator/factories.js +28 -0
  253. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  254. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  255. package/dest/public/public_tx_simulator/index.js +5 -0
  256. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  257. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  258. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  259. package/dest/public/public_tx_simulator/public_tx_context.d.ts +24 -31
  260. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  261. package/dest/public/public_tx_simulator/public_tx_context.js +72 -92
  262. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
  263. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  264. package/dest/public/public_tx_simulator/public_tx_simulator.js +213 -205
  265. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  266. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  267. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  268. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  269. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  270. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  271. package/dest/public/side_effect_errors.d.ts +42 -2
  272. package/dest/public/side_effect_errors.d.ts.map +1 -1
  273. package/dest/public/side_effect_errors.js +70 -1
  274. package/dest/public/side_effect_trace.d.ts +22 -68
  275. package/dest/public/side_effect_trace.d.ts.map +1 -1
  276. package/dest/public/side_effect_trace.js +72 -122
  277. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  278. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  279. package/dest/public/state_manager/index.d.ts +2 -0
  280. package/dest/public/state_manager/index.d.ts.map +1 -0
  281. package/dest/public/state_manager/index.js +1 -0
  282. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  283. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  284. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  285. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  286. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  287. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  288. package/dest/public/state_manager/state_manager.d.ts +164 -0
  289. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  290. package/dest/public/state_manager/state_manager.js +395 -0
  291. package/dest/public/test_executor_metrics.d.ts +55 -0
  292. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  293. package/dest/public/test_executor_metrics.js +307 -0
  294. package/dest/public/unique_class_ids.d.ts +1 -1
  295. package/dest/public/unique_class_ids.d.ts.map +1 -1
  296. package/dest/public/utils.d.ts +3 -5
  297. package/dest/public/utils.d.ts.map +1 -1
  298. package/dest/public/utils.js +4 -21
  299. package/dest/server.d.ts +7 -4
  300. package/dest/server.d.ts.map +1 -1
  301. package/dest/server.js +5 -2
  302. package/dest/testing.d.ts +2 -0
  303. package/dest/testing.d.ts.map +1 -0
  304. package/dest/testing.js +1 -0
  305. package/package.json +39 -33
  306. package/src/client.ts +5 -3
  307. package/src/common/errors.ts +80 -45
  308. package/src/common/index.ts +0 -1
  309. package/src/private/acvm/acvm.ts +17 -32
  310. package/src/private/acvm/acvm_types.ts +1 -1
  311. package/src/private/acvm/deserialize.ts +36 -30
  312. package/src/private/acvm/index.ts +0 -1
  313. package/src/private/acvm/serialize.ts +64 -1
  314. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  315. package/src/private/acvm_wasm.ts +72 -0
  316. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  317. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  318. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  319. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  320. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  321. package/src/private/circuit_simulator.ts +90 -0
  322. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  323. package/src/public/avm/avm_context.ts +5 -5
  324. package/src/public/avm/avm_contract_call_result.ts +18 -6
  325. package/src/public/avm/avm_execution_environment.ts +9 -2
  326. package/src/public/avm/avm_gas.ts +26 -38
  327. package/src/public/avm/avm_machine_state.ts +6 -1
  328. package/src/public/avm/avm_memory_types.ts +20 -7
  329. package/src/public/avm/avm_simulator.ts +50 -58
  330. package/src/public/avm/avm_simulator_interface.ts +8 -0
  331. package/src/public/avm/errors.ts +20 -75
  332. package/src/public/avm/fixtures/avm_simulation_tester.ts +33 -22
  333. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
  334. package/src/public/avm/fixtures/initializers.ts +102 -0
  335. package/src/public/avm/fixtures/utils.ts +151 -0
  336. package/src/public/avm/index.ts +0 -2
  337. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  338. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  339. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  340. package/src/public/avm/opcodes/bitwise.ts +33 -29
  341. package/src/public/avm/opcodes/comparators.ts +6 -3
  342. package/src/public/avm/opcodes/contract.ts +10 -7
  343. package/src/public/avm/opcodes/control_flow.ts +19 -10
  344. package/src/public/avm/opcodes/conversion.ts +27 -3
  345. package/src/public/avm/opcodes/ec_add.ts +11 -8
  346. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  347. package/src/public/avm/opcodes/external_calls.ts +61 -29
  348. package/src/public/avm/opcodes/hashing.ts +38 -12
  349. package/src/public/avm/opcodes/instruction.ts +31 -21
  350. package/src/public/avm/opcodes/memory.ts +71 -32
  351. package/src/public/avm/opcodes/misc.ts +60 -18
  352. package/src/public/avm/opcodes/storage.ts +22 -6
  353. package/src/public/avm/revert_reason.ts +58 -0
  354. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  355. package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
  356. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  357. package/src/public/avm/test_utils.ts +25 -42
  358. package/src/public/contracts_db_checkpoint.ts +41 -0
  359. package/src/public/db_interfaces.ts +76 -0
  360. package/src/public/debug_fn_name.ts +50 -0
  361. package/src/public/executor_metrics.ts +56 -6
  362. package/src/public/executor_metrics_interface.ts +15 -0
  363. package/src/public/fixtures/amm_test.ts +331 -0
  364. package/src/public/fixtures/bulk_test.ts +169 -0
  365. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  366. package/src/public/fixtures/custom_bytecode_tests.ts +219 -0
  367. package/src/public/fixtures/index.ts +13 -0
  368. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  369. package/src/public/fixtures/opcode_spammer.ts +1638 -0
  370. package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
  371. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  372. package/src/public/fixtures/token_test.ts +148 -0
  373. package/src/public/fixtures/utils.ts +141 -69
  374. package/src/public/fuzzing/avm_fuzzer_simulator.ts +240 -0
  375. package/src/public/fuzzing/avm_simulator_bin.ts +140 -0
  376. package/src/public/hinting_db_sources.ts +607 -0
  377. package/src/public/index.ts +11 -8
  378. package/src/public/public_db_sources.ts +279 -259
  379. package/src/public/public_errors.ts +14 -0
  380. package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
  381. package/src/public/public_processor/public_processor.ts +242 -178
  382. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  383. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
  384. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +200 -0
  385. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
  386. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
  387. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
  388. package/src/public/public_tx_simulator/factories.ts +41 -0
  389. package/src/public/public_tx_simulator/index.ts +7 -0
  390. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  391. package/src/public/public_tx_simulator/public_tx_context.ts +168 -195
  392. package/src/public/public_tx_simulator/public_tx_simulator.ts +302 -260
  393. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  394. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  395. package/src/public/side_effect_errors.ts +91 -1
  396. package/src/public/side_effect_trace.ts +95 -321
  397. package/src/public/side_effect_trace_interface.ts +11 -59
  398. package/src/public/state_manager/index.ts +1 -0
  399. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  400. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  401. package/src/public/state_manager/state_manager.ts +560 -0
  402. package/src/public/test_executor_metrics.ts +397 -0
  403. package/src/public/utils.ts +5 -21
  404. package/src/server.ts +6 -3
  405. package/src/testing.ts +1 -0
  406. package/dest/common/db_interfaces.d.ts +0 -80
  407. package/dest/common/db_interfaces.d.ts.map +0 -1
  408. package/dest/common/db_interfaces.js +0 -1
  409. package/dest/common/debug_fn_name.d.ts +0 -5
  410. package/dest/common/debug_fn_name.d.ts.map +0 -1
  411. package/dest/common/debug_fn_name.js +0 -6
  412. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  413. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  414. package/dest/common/message_load_oracle_inputs.js +0 -15
  415. package/dest/private/acvm/oracle/index.d.ts +0 -14
  416. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  417. package/dest/private/acvm/oracle/index.js +0 -2
  418. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  419. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  420. package/dest/private/acvm/oracle/oracle.js +0 -263
  421. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  422. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  423. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  424. package/dest/private/execution_data_provider.d.ts +0 -261
  425. package/dest/private/execution_data_provider.d.ts.map +0 -1
  426. package/dest/private/execution_data_provider.js +0 -14
  427. package/dest/private/execution_note_cache.d.ts +0 -93
  428. package/dest/private/execution_note_cache.d.ts.map +0 -1
  429. package/dest/private/execution_note_cache.js +0 -180
  430. package/dest/private/hashed_values_cache.d.ts +0 -28
  431. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  432. package/dest/private/hashed_values_cache.js +0 -46
  433. package/dest/private/index.d.ts +0 -13
  434. package/dest/private/index.d.ts.map +0 -1
  435. package/dest/private/index.js +0 -12
  436. package/dest/private/pick_notes.d.ts +0 -85
  437. package/dest/private/pick_notes.d.ts.map +0 -1
  438. package/dest/private/pick_notes.js +0 -51
  439. package/dest/private/private_execution.d.ts +0 -25
  440. package/dest/private/private_execution.d.ts.map +0 -1
  441. package/dest/private/private_execution.js +0 -92
  442. package/dest/private/private_execution_oracle.d.ts +0 -215
  443. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  444. package/dest/private/private_execution_oracle.js +0 -382
  445. package/dest/private/providers/acvm_native.d.ts +0 -40
  446. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  447. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  448. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  449. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  450. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  451. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  452. package/dest/private/providers/factory.d.ts +0 -12
  453. package/dest/private/providers/factory.d.ts.map +0 -1
  454. package/dest/private/providers/simulation_provider.d.ts +0 -19
  455. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  456. package/dest/private/providers/simulation_provider.js +0 -24
  457. package/dest/private/simulator.d.ts +0 -34
  458. package/dest/private/simulator.d.ts.map +0 -1
  459. package/dest/private/simulator.js +0 -76
  460. package/dest/private/unconstrained_execution.d.ts +0 -10
  461. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  462. package/dest/private/unconstrained_execution.js +0 -27
  463. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  464. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  465. package/dest/private/unconstrained_execution_oracle.js +0 -258
  466. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  467. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  468. package/dest/public/avm/bytecode_utils.js +0 -17
  469. package/dest/public/avm/fixtures/index.d.ts +0 -84
  470. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  471. package/dest/public/avm/fixtures/index.js +0 -175
  472. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  473. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  474. package/dest/public/avm/journal/index.d.ts +0 -2
  475. package/dest/public/avm/journal/index.d.ts.map +0 -1
  476. package/dest/public/avm/journal/index.js +0 -1
  477. package/dest/public/avm/journal/journal.d.ts +0 -209
  478. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  479. package/dest/public/avm/journal/journal.js +0 -486
  480. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  481. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  482. package/dest/public/bytecode_errors.d.ts +0 -4
  483. package/dest/public/bytecode_errors.d.ts.map +0 -1
  484. package/dest/public/bytecode_errors.js +0 -6
  485. package/dest/public/execution.d.ts +0 -108
  486. package/dest/public/execution.d.ts.map +0 -1
  487. package/dest/public/execution.js +0 -9
  488. package/dest/public/tx_contract_cache.d.ts +0 -41
  489. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  490. package/dest/public/tx_contract_cache.js +0 -49
  491. package/dest/test/utils.d.ts +0 -13
  492. package/dest/test/utils.d.ts.map +0 -1
  493. package/dest/test/utils.js +0 -22
  494. package/src/common/db_interfaces.ts +0 -94
  495. package/src/common/debug_fn_name.ts +0 -18
  496. package/src/common/message_load_oracle_inputs.ts +0 -15
  497. package/src/private/acvm/oracle/index.ts +0 -16
  498. package/src/private/acvm/oracle/oracle.ts +0 -455
  499. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  500. package/src/private/execution_data_provider.ts +0 -323
  501. package/src/private/execution_note_cache.ts +0 -217
  502. package/src/private/hashed_values_cache.ts +0 -55
  503. package/src/private/index.ts +0 -16
  504. package/src/private/pick_notes.ts +0 -141
  505. package/src/private/private_execution.ts +0 -151
  506. package/src/private/private_execution_oracle.ts +0 -614
  507. package/src/private/providers/acvm_wasm.ts +0 -63
  508. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  509. package/src/private/providers/simulation_provider.ts +0 -45
  510. package/src/private/simulator.ts +0 -147
  511. package/src/private/unconstrained_execution.ts +0 -50
  512. package/src/private/unconstrained_execution_oracle.ts +0 -373
  513. package/src/public/avm/bytecode_utils.ts +0 -17
  514. package/src/public/avm/fixtures/index.ts +0 -296
  515. package/src/public/avm/journal/index.ts +0 -1
  516. package/src/public/avm/journal/journal.ts +0 -742
  517. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  518. package/src/public/bytecode_errors.ts +0 -6
  519. package/src/public/execution.ts +0 -140
  520. package/src/public/tx_contract_cache.ts +0 -69
  521. package/src/test/utils.ts +0 -36
@@ -1,27 +1,19 @@
1
- import type { Fr, Point } from '@aztec/foundation/fields';
2
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
1
+ import type { Point } from '@aztec/foundation/curves/grumpkin';
3
2
  import type { FailingFunction, NoirCallStack } from '@aztec/stdlib/errors';
4
3
 
5
4
  import { ExecutionError } from '../../common/errors.js';
6
- import type { AvmContext } from './avm_context.js';
5
+ import { CheckedPublicExecutionError } from '../public_errors.js';
7
6
 
8
7
  /**
9
8
  * Avm-specific errors should derive from this
10
9
  */
11
- export abstract class AvmExecutionError extends Error {
10
+ export abstract class AvmExecutionError extends CheckedPublicExecutionError {
12
11
  constructor(message: string) {
13
12
  super(message);
14
13
  this.name = 'AvmExecutionError';
15
14
  }
16
15
  }
17
16
 
18
- export class NoBytecodeForContractError extends AvmExecutionError {
19
- constructor(contractAddress: AztecAddress) {
20
- super(`No bytecode found at: ${contractAddress}`);
21
- this.name = 'NoBytecodeFoundInterpreterError';
22
- }
23
- }
24
-
25
17
  export class ArithmeticError extends AvmExecutionError {
26
18
  constructor(message: string) {
27
19
  super(message);
@@ -66,7 +58,7 @@ export class AvmParsingError extends AvmExecutionError {
66
58
  */
67
59
  export class InvalidTagValueError extends AvmExecutionError {
68
60
  constructor(tagValue: number) {
69
- super(`Tag value ${tagValue} is invalid.`);
61
+ super(`Tag check failed: Tag value ${tagValue} is invalid.`);
70
62
  this.name = 'InvalidTagValueError';
71
63
  }
72
64
  }
@@ -85,6 +77,12 @@ export class InstructionExecutionError extends AvmExecutionError {
85
77
  * Error thrown on failed AVM memory tag check.
86
78
  */
87
79
  export class TagCheckError extends AvmExecutionError {
80
+ public static forBaseAddress(gotTag: string): TagCheckError {
81
+ return new TagCheckError(`Base address (mem[0]) is not a valid address (has tag ${gotTag})`);
82
+ }
83
+ public static forIndirectAddress(address: number, gotTag: string): TagCheckError {
84
+ return new TagCheckError(`Address after indirection is not a valid address (address ${address} has tag ${gotTag})`);
85
+ }
88
86
  public static forOffset(offset: number, gotTag: string, expectedTag: string): TagCheckError {
89
87
  return new TagCheckError(`Tag mismatch at offset ${offset}, got ${gotTag}, expected ${expectedTag}`);
90
88
  }
@@ -105,7 +103,7 @@ export class TagCheckError extends AvmExecutionError {
105
103
  */
106
104
  export class RelativeAddressOutOfRangeError extends AvmExecutionError {
107
105
  constructor(baseAddr: number, relOffset: number) {
108
- super(`Address out of range. Base address ${baseAddr}, relative offset ${relOffset}`);
106
+ super(`Relative address out of range. Base address ${baseAddr}, relative offset ${relOffset}`);
109
107
  this.name = 'RelativeAddressOutOfRangeError';
110
108
  }
111
109
  }
@@ -130,22 +128,12 @@ export class OutOfGasError extends AvmExecutionError {
130
128
  }
131
129
 
132
130
  /**
133
- * Error is thrown when the supplied points length is not a multiple of 3. Specific for MSM opcode.
134
- */
135
- export class MSMPointsLengthError extends AvmExecutionError {
136
- constructor(pointsReadLength: number) {
137
- super(`Points vector length should be a multiple of 3, was ${pointsReadLength}`);
138
- this.name = 'MSMPointsLengthError';
139
- }
140
- }
141
-
142
- /**
143
- * Error is thrown when one of the supplied points does not lie on the Grumpkin curve. Specific for MSM opcode.
131
+ * Error is thrown when one of the supplied points does not lie on the Grumpkin curve. Specific for ECADD opcode.
144
132
  */
145
- export class MSMPointNotOnCurveError extends AvmExecutionError {
146
- constructor(point: Point) {
147
- super(`Point ${point.toString()} is not on the curve.`);
148
- this.name = 'MSMPointNotOnCurveError';
133
+ export class EcAddPointNotOnCurveError extends AvmExecutionError {
134
+ constructor(pointIndex: number, point: Point) {
135
+ super(`EcAdd point${pointIndex} (${point.toString()}) is not on the curve.`);
136
+ this.name = 'EcAddPointNotOnCurveError';
149
137
  }
150
138
  }
151
139
 
@@ -180,53 +168,10 @@ export class AvmRevertReason extends ExecutionError {
180
168
  }
181
169
  }
182
170
 
183
- async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
184
- // We drop the returnPc information.
185
- const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
186
-
187
- // If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
188
- let nestedError = undefined;
189
- const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
190
- if (
191
- context.machineState.collectedRevertInfo &&
192
- revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
193
- ) {
194
- nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
195
- message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
196
- }
197
-
198
- const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
199
-
200
- return new AvmRevertReason(
201
- message,
202
- /*failingFunction=*/ {
203
- contractAddress: context.environment.address,
204
- functionName: fnName,
205
- },
206
- /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
207
- /*options=*/ { cause: nestedError },
208
- );
209
- }
210
-
211
- /**
212
- * Create a "revert reason" error for an exceptional halt.
213
- *
214
- * @param haltingError - the lower-level error causing the exceptional halt
215
- * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
216
- */
217
- export async function revertReasonFromExceptionalHalt(
218
- haltingError: AvmExecutionError,
219
- context: AvmContext,
220
- ): Promise<AvmRevertReason> {
221
- return await createRevertReason(haltingError.message, [], context);
222
- }
223
-
224
171
  /**
225
- * Create a "revert reason" error for an explicit revert (a root cause).
226
- *
227
- * @param revertData - output data of the explicit REVERT instruction
228
- * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
172
+ * Helper to annotate errors occurring during instruction fetching.
229
173
  */
230
- export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
231
- return await createRevertReason('Assertion failed: ', revertData, context);
174
+ export function duringInstrFetch(error: Error, pc: number) {
175
+ error.message = `Instruction fetching error at pc ${pc}: ${error.message}`;
176
+ return error;
232
177
  }
@@ -1,5 +1,6 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { encodeArguments } from '@aztec/stdlib/abi';
3
+ import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
3
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
5
  import { GasFees } from '@aztec/stdlib/gas';
5
6
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
@@ -8,20 +9,19 @@ import { NativeWorldStateService } from '@aztec/world-state';
8
9
 
9
10
  import { SideEffectTrace } from '../../../public/side_effect_trace.js';
10
11
  import type { AvmContractCallResult } from '../../avm/avm_contract_call_result.js';
12
+ import { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
13
+ import { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
14
+ import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
15
+ import { AvmSimulator } from '../avm_simulator.js';
16
+ import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
17
+ import { initContext, initExecutionEnvironment } from './initializers.js';
11
18
  import {
12
- getContractFunctionArtifact,
19
+ DEFAULT_TIMESTAMP,
20
+ getContractFunctionAbi,
13
21
  getFunctionSelector,
14
- initContext,
15
- initExecutionEnvironment,
16
22
  resolveContractAssertionMessage,
17
- } from '../../avm/fixtures/index.js';
18
- import { AvmPersistableStateManager } from '../../avm/journal/journal.js';
19
- import { WorldStateDB } from '../../public_db_sources.js';
20
- import { AvmSimulator } from '../avm_simulator.js';
21
- import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
22
- import { SimpleContractDataSource } from './simple_contract_data_source.js';
23
+ } from './utils.js';
23
24
 
24
- const TIMESTAMP = new Fr(99833);
25
25
  const DEFAULT_GAS_FEES = new GasFees(2, 3);
26
26
 
27
27
  /**
@@ -33,24 +33,27 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
33
33
  constructor(
34
34
  contractDataSource: SimpleContractDataSource,
35
35
  merkleTrees: MerkleTreeWriteOperations,
36
- private stateManager: AvmPersistableStateManager,
36
+ private stateManager: PublicPersistableStateManager,
37
37
  ) {
38
38
  super(contractDataSource, merkleTrees);
39
39
  }
40
40
 
41
- static async create(): Promise<AvmSimulationTester> {
41
+ static async create(
42
+ worldStateService: NativeWorldStateService, // make sure to close this later
43
+ ): Promise<AvmSimulationTester> {
42
44
  const contractDataSource = new SimpleContractDataSource();
43
- const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
44
- const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
45
+ const merkleTrees = await worldStateService.fork();
46
+ const treesDB = new PublicTreesDB(merkleTrees);
47
+ const contractsDB = new PublicContractsDB(contractDataSource);
45
48
  const trace = new SideEffectTrace();
46
49
  const firstNullifier = new Fr(420000);
47
- // FIXME: merkle ops should work, but I'm seeing frequent (but inconsistent) bytecode retrieval
48
- // failures on 2nd call to simulateCall with merkle ops on
49
- const stateManager = AvmPersistableStateManager.create(
50
- worldStateDB,
50
+
51
+ const stateManager = PublicPersistableStateManager.create(
52
+ treesDB,
53
+ contractsDB,
51
54
  trace,
52
- /*doMerkleOperations=*/ false,
53
55
  firstNullifier,
56
+ DEFAULT_TIMESTAMP,
54
57
  );
55
58
  return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
56
59
  }
@@ -70,20 +73,28 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
70
73
  throw new Error(`Contract not found at address: ${address}`);
71
74
  }
72
75
  const fnSelector = await getFunctionSelector(fnName, contractArtifact);
73
- const fnAbi = getContractFunctionArtifact(fnName, contractArtifact);
76
+ const fnAbi = getContractFunctionAbi(fnName, contractArtifact);
74
77
  const encodedArgs = encodeArguments(fnAbi!, args);
75
78
  const calldata = [fnSelector.toField(), ...encodedArgs];
76
79
 
77
80
  const globals = GlobalVariables.empty();
78
- globals.timestamp = TIMESTAMP;
81
+ globals.timestamp = DEFAULT_TIMESTAMP;
79
82
  globals.gasFees = DEFAULT_GAS_FEES;
80
83
 
84
+ const config = PublicSimulatorConfig.from({
85
+ skipFeeEnforcement: false,
86
+ collectDebugLogs: true,
87
+ collectHints: false,
88
+ collectStatistics: false,
89
+ collectCallMetadata: true,
90
+ });
81
91
  const environment = initExecutionEnvironment({
82
92
  calldata,
83
93
  globals,
84
94
  address,
85
95
  sender,
86
96
  isStaticCall,
97
+ config,
87
98
  });
88
99
  const persistableState = await this.stateManager.fork();
89
100
  const context = initContext({ env: environment, persistableState });
@@ -1,18 +1,20 @@
1
- import { DEPLOYER_CONTRACT_ADDRESS } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/fields';
1
+ import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
5
+ import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registry';
5
6
  import { computeFeePayerBalanceStorageSlot, getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
7
+ import { getCanonicalInstanceRegistry } from '@aztec/protocol-contracts/instance-registry';
6
8
  import type { ContractArtifact } from '@aztec/stdlib/abi';
7
9
  import { PublicDataWrite } from '@aztec/stdlib/avm';
8
10
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
9
- import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
11
+ import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
10
12
  import { computePublicDataTreeLeafSlot, siloNullifier } from '@aztec/stdlib/hash';
11
13
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
12
14
  import { MerkleTreeId } from '@aztec/stdlib/trees';
13
15
 
14
- import { createContractClassAndInstance } from './index.js';
15
- import type { SimpleContractDataSource } from './simple_contract_data_source.js';
16
+ import type { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
17
+ import { createContractClassAndInstance } from './utils.js';
16
18
 
17
19
  /**
18
20
  * An abstract test class that enables tests of real apps in the AVM without requiring e2e tests.
@@ -44,7 +46,7 @@ export abstract class BaseAvmSimulationTester {
44
46
  const leafSlot = await computePublicDataTreeLeafSlot(address, slot);
45
47
  // get existing preimage
46
48
  const publicDataWrite = new PublicDataWrite(leafSlot, value);
47
- await this.merkleTrees.batchInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()], 0);
49
+ await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
48
50
  }
49
51
 
50
52
  /**
@@ -57,6 +59,7 @@ export abstract class BaseAvmSimulationTester {
57
59
  contractArtifact: ContractArtifact,
58
60
  skipNullifierInsertion = false,
59
61
  seed = 0,
62
+ contractClassSeed = seed,
60
63
  originalContractClassId?: Fr, // if previously upgraded
61
64
  ): Promise<ContractInstanceWithAddress> {
62
65
  const { contractClass, contractInstance } = await createContractClassAndInstance(
@@ -64,6 +67,7 @@ export abstract class BaseAvmSimulationTester {
64
67
  deployer,
65
68
  contractArtifact,
66
69
  seed,
70
+ contractClassSeed,
67
71
  originalContractClassId,
68
72
  );
69
73
 
@@ -80,16 +84,40 @@ export abstract class BaseAvmSimulationTester {
80
84
  const feeJuiceContractClassPublic = {
81
85
  ...feeJuice.contractClass,
82
86
  privateFunctions: [],
83
- unconstrainedFunctions: [],
87
+ utilityFunctions: [],
84
88
  };
85
89
  await this.contractDataSource.addNewContract(feeJuice.artifact, feeJuiceContractClassPublic, feeJuice.instance);
86
90
  return feeJuice.instance;
87
91
  }
88
92
 
89
- addContractClass(contractClass: ContractClassPublic, contractArtifact: ContractArtifact): Promise<void> {
90
- this.logger.debug(`Adding contract class with Id ${contractClass.id}`);
91
- this.contractDataSource.addContractArtifact(contractClass.id, contractArtifact);
92
- return this.contractDataSource.addContractClass(contractClass);
93
+ async registerAuthContract(): Promise<ContractInstanceWithAddress> {
94
+ const authRegistry = await getCanonicalAuthRegistry();
95
+ const authRegistryContractClassPublic = {
96
+ ...authRegistry.contractClass,
97
+ privateFunctions: [],
98
+ utilityFunctions: [],
99
+ };
100
+ await this.contractDataSource.addNewContract(
101
+ authRegistry.artifact,
102
+ authRegistryContractClassPublic,
103
+ authRegistry.instance,
104
+ );
105
+ return authRegistry.instance;
106
+ }
107
+
108
+ async registerInstanceRegistryContract(): Promise<ContractInstanceWithAddress> {
109
+ const instanceRegistry = await getCanonicalInstanceRegistry();
110
+ const instanceRegistryContractClassPublic = {
111
+ ...instanceRegistry.contractClass,
112
+ privateFunctions: [],
113
+ utilityFunctions: [],
114
+ };
115
+ await this.contractDataSource.addNewContract(
116
+ instanceRegistry.artifact,
117
+ instanceRegistryContractClassPublic,
118
+ instanceRegistry.instance,
119
+ );
120
+ return instanceRegistry.instance;
93
121
  }
94
122
 
95
123
  async addContractInstance(contractInstance: ContractInstanceWithAddress, skipNullifierInsertion = false) {
@@ -101,9 +129,14 @@ export abstract class BaseAvmSimulationTester {
101
129
 
102
130
  private async insertContractAddressNullifier(contractAddress: AztecAddress) {
103
131
  const contractAddressNullifier = await siloNullifier(
104
- AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS),
132
+ AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
105
133
  contractAddress.toField(),
106
134
  );
107
- await this.merkleTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()], 0);
135
+ await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()]);
136
+ }
137
+
138
+ async insertNullifier(contractThatEmitted: AztecAddress, nullifier: Fr) {
139
+ const siloedNullifier = await siloNullifier(contractThatEmitted, nullifier);
140
+ await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
108
141
  }
109
142
  }
@@ -0,0 +1,102 @@
1
+ import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
2
+ import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
6
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
+ import { GasFees } from '@aztec/stdlib/gas';
8
+ import { GlobalVariables } from '@aztec/stdlib/tx';
9
+ import type { UInt64 } from '@aztec/stdlib/types';
10
+
11
+ import { mock } from 'jest-mock-extended';
12
+
13
+ import type { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
14
+ import type { PublicSideEffectTraceInterface } from '../../side_effect_trace_interface.js';
15
+ import { NullifierManager } from '../../state_manager/nullifiers.js';
16
+ import { PublicStorage } from '../../state_manager/public_storage.js';
17
+ import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
18
+ import { AvmContext } from '../avm_context.js';
19
+ import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
20
+ import { AvmMachineState } from '../avm_machine_state.js';
21
+ import { AvmSimulator } from '../avm_simulator.js';
22
+ import { DEFAULT_TIMESTAMP } from './utils.js';
23
+
24
+ /**
25
+ * Create a new AVM context with default values.
26
+ */
27
+ export function initContext(overrides?: {
28
+ persistableState?: PublicPersistableStateManager;
29
+ env?: AvmExecutionEnvironment;
30
+ machineState?: AvmMachineState;
31
+ }): AvmContext {
32
+ const ctx = new AvmContext(
33
+ overrides?.persistableState || initPersistableStateManager(),
34
+ overrides?.env || initExecutionEnvironment(),
35
+ overrides?.machineState || initMachineState(),
36
+ );
37
+ ctx.provideSimulator = AvmSimulator.build;
38
+ return ctx;
39
+ }
40
+
41
+ /** Creates an empty state manager with mocked host storage. */
42
+ export function initPersistableStateManager(overrides?: {
43
+ treesDB?: PublicTreesDB;
44
+ contractsDB?: PublicContractsDB;
45
+ trace?: PublicSideEffectTraceInterface;
46
+ publicStorage?: PublicStorage;
47
+ nullifiers?: NullifierManager;
48
+ firstNullifier?: Fr;
49
+ timestamp?: UInt64;
50
+ }): PublicPersistableStateManager {
51
+ const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
52
+ return new PublicPersistableStateManager(
53
+ treesDB,
54
+ overrides?.contractsDB || mock<PublicContractsDB>(),
55
+ overrides?.trace || mock<PublicSideEffectTraceInterface>(),
56
+ overrides?.firstNullifier || new Fr(27),
57
+ overrides?.timestamp || DEFAULT_TIMESTAMP,
58
+ /*doMerkleOperations=*/ false,
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
64
+ */
65
+ export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnvironment>): AvmExecutionEnvironment {
66
+ return new AvmExecutionEnvironment(
67
+ overrides?.address ?? AztecAddress.zero(),
68
+ overrides?.sender ?? AztecAddress.zero(),
69
+ overrides?.contractCallDepth ?? Fr.zero(),
70
+ overrides?.transactionFee ?? Fr.zero(),
71
+ overrides?.globals ?? GlobalVariables.empty(),
72
+ overrides?.isStaticCall ?? false,
73
+ overrides?.calldata ?? [],
74
+ overrides?.config ?? PublicSimulatorConfig.empty(),
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
80
+ */
81
+ export function initGlobalVariables(overrides?: Partial<GlobalVariables>): GlobalVariables {
82
+ return new GlobalVariables(
83
+ overrides?.chainId ?? Fr.zero(),
84
+ overrides?.version ?? Fr.zero(),
85
+ overrides?.blockNumber ?? BlockNumber.ZERO,
86
+ overrides?.slotNumber ?? SlotNumber.ZERO,
87
+ overrides?.timestamp ?? 0n,
88
+ overrides?.coinbase ?? EthAddress.ZERO,
89
+ overrides?.feeRecipient ?? AztecAddress.zero(),
90
+ overrides?.gasFees ?? GasFees.empty(),
91
+ );
92
+ }
93
+
94
+ /**
95
+ * Create an empty instance of the Machine State where all values are set to a large enough amount, unless overridden in the overrides object
96
+ */
97
+ export function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState {
98
+ return AvmMachineState.fromState({
99
+ l2GasLeft: overrides?.l2GasLeft ?? AVM_MAX_PROCESSABLE_L2_GAS,
100
+ daGasLeft: overrides?.daGasLeft ?? 1e8,
101
+ });
102
+ }
@@ -0,0 +1,151 @@
1
+ import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
+ import {
5
+ type ContractArtifact,
6
+ type FunctionAbi,
7
+ type FunctionArtifact,
8
+ FunctionSelector,
9
+ getAllFunctionAbis,
10
+ } from '@aztec/stdlib/abi';
11
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
+ import {
13
+ type ContractClassPublic,
14
+ type ContractInstanceWithAddress,
15
+ computeInitializationHash,
16
+ } from '@aztec/stdlib/contract';
17
+ import { isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
18
+ import { siloNullifier } from '@aztec/stdlib/hash';
19
+ import { deriveKeys } from '@aztec/stdlib/keys';
20
+ import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/stdlib/testing';
21
+ import type { UInt64 } from '@aztec/stdlib/types';
22
+
23
+ import { strict as assert } from 'assert';
24
+ import merge from 'lodash.merge';
25
+
26
+ import { resolveAssertionMessageFromRevertData, traverseCauseChain } from '../../../common/index.js';
27
+ import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
28
+ import type { AvmRevertReason } from '../errors.js';
29
+
30
+ export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
31
+ export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
32
+ export const DEFAULT_BLOCK_NUMBER = BlockNumber(42);
33
+
34
+ /**
35
+ * Create a new object with all the same properties as the original, except for the ones in the overrides object.
36
+ */
37
+ export function allSameExcept(original: any, overrides: any): any {
38
+ return merge({}, original, overrides);
39
+ }
40
+
41
+ export function randomMemoryBytes(length: number): Uint8[] {
42
+ return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255)));
43
+ }
44
+
45
+ export function randomMemoryUint32s(length: number): Uint32[] {
46
+ return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255)));
47
+ }
48
+
49
+ export function randomMemoryUint64s(length: number): Uint64[] {
50
+ return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255)));
51
+ }
52
+
53
+ export function randomMemoryFields(length: number): Field[] {
54
+ return [...Array(length)].map(_ => new Field(Fr.random()));
55
+ }
56
+
57
+ export function getFunctionSelector(
58
+ functionName: string,
59
+ contractArtifact: ContractArtifact,
60
+ ): Promise<FunctionSelector> {
61
+ const fnArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName)!;
62
+ assert(!!fnArtifact, `Function ${functionName} not found in ${contractArtifact.name}`);
63
+ const params = fnArtifact.parameters;
64
+ return FunctionSelector.fromNameAndParameters(fnArtifact.name, params);
65
+ }
66
+
67
+ export function getContractFunctionArtifact(
68
+ functionName: string,
69
+ contractArtifact: ContractArtifact,
70
+ ): FunctionArtifact | undefined {
71
+ return contractArtifact.functions.find(f => f.name === functionName);
72
+ }
73
+
74
+ export function getContractFunctionAbi(
75
+ functionName: string,
76
+ contractArtifact: ContractArtifact,
77
+ ): FunctionAbi | undefined {
78
+ return (
79
+ contractArtifact.functions.find(f => f.name === functionName) ??
80
+ contractArtifact.nonDispatchPublicFunctions.find(f => f.name === functionName)
81
+ );
82
+ }
83
+
84
+ export function resolveContractAssertionMessage(
85
+ functionName: string,
86
+ revertReason: AvmRevertReason,
87
+ output: Fr[],
88
+ contractArtifact: ContractArtifact,
89
+ ): string | undefined {
90
+ traverseCauseChain(revertReason, cause => {
91
+ revertReason = cause as AvmRevertReason;
92
+ });
93
+
94
+ const functionArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName);
95
+ if (!functionArtifact || !revertReason.noirCallStack || !isNoirCallStackUnresolved(revertReason.noirCallStack)) {
96
+ return undefined;
97
+ }
98
+
99
+ return resolveAssertionMessageFromRevertData(output, functionArtifact);
100
+ }
101
+
102
+ /**
103
+ * Create a contract class and instance given constructor args, artifact, etc.
104
+ * NOTE: This is useful for testing real-ish contract class registration and instance deployment TXs (via logs)
105
+ * @param constructorArgs - The constructor arguments for the contract.
106
+ * @param deployer - The deployer of the contract.
107
+ * @param contractArtifact - The contract artifact for the contract.
108
+ * @param seed - The seed for the contract.
109
+ * @param originalContractClassId - The original contract class ID (if upgraded)
110
+ * @returns The contract class, instance, and contract address nullifier.
111
+ */
112
+ export async function createContractClassAndInstance(
113
+ constructorArgs: any[],
114
+ deployer: AztecAddress,
115
+ contractArtifact: ContractArtifact,
116
+ seed = 0,
117
+ contractClassSeed = seed,
118
+ originalContractClassId?: Fr, // if previously upgraded
119
+ ): Promise<{
120
+ contractClass: ContractClassPublic;
121
+ contractInstance: ContractInstanceWithAddress;
122
+ contractAddressNullifier: Fr;
123
+ }> {
124
+ const bytecode = (getContractFunctionArtifact(PUBLIC_DISPATCH_FN_NAME, contractArtifact) as FunctionArtifact)!
125
+ .bytecode;
126
+ const contractClass = await makeContractClassPublic(contractClassSeed, bytecode);
127
+
128
+ const constructorAbi = getContractFunctionAbi('constructor', contractArtifact);
129
+ const { publicKeys } = await deriveKeys(new Fr(seed));
130
+ const initializationHash = await computeInitializationHash(constructorAbi, constructorArgs);
131
+ const contractInstance =
132
+ originalContractClassId === undefined
133
+ ? await makeContractInstanceFromClassId(contractClass.id, seed, {
134
+ deployer,
135
+ initializationHash,
136
+ publicKeys,
137
+ })
138
+ : await makeContractInstanceFromClassId(originalContractClassId, seed, {
139
+ deployer,
140
+ initializationHash,
141
+ currentClassId: contractClass.id,
142
+ publicKeys,
143
+ });
144
+
145
+ const contractAddressNullifier = await siloNullifier(
146
+ AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
147
+ contractInstance.address.toField(),
148
+ );
149
+
150
+ return { contractClass, contractInstance, contractAddressNullifier };
151
+ }
@@ -1,3 +1 @@
1
1
  export * from './avm_simulator.js';
2
- export * from './journal/index.js';
3
- export * from './fixtures/simple_contract_data_source.js';