@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.0b941701

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 (527) hide show
  1. package/README.md +8 -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 -9
  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 +210 -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 +8 -8
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +12 -8
  59. package/dest/public/avm/avm_execution_environment.d.ts +9 -6
  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 +9 -6
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +5 -2
  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 +21 -7
  71. package/dest/public/avm/avm_simulator.d.ts +8 -7
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +32 -42
  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/calldata.d.ts +51 -0
  78. package/dest/public/avm/calldata.d.ts.map +1 -0
  79. package/dest/public/avm/calldata.js +63 -0
  80. package/dest/public/avm/errors.d.ts +11 -29
  81. package/dest/public/avm/errors.d.ts.map +1 -1
  82. package/dest/public/avm/errors.js +19 -57
  83. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  84. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
  86. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
  87. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  88. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
  89. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  90. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/initializers.js +45 -0
  92. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  93. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  94. package/dest/public/avm/fixtures/utils.js +96 -0
  95. package/dest/public/avm/index.d.ts +1 -3
  96. package/dest/public/avm/index.d.ts.map +1 -1
  97. package/dest/public/avm/index.js +0 -2
  98. package/dest/public/avm/opcodes/accrued_substate.d.ts +16 -16
  99. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/accrued_substate.js +52 -45
  101. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  102. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  104. package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
  105. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  107. package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
  108. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/bitwise.js +22 -29
  110. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  111. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/comparators.js +3 -3
  113. package/dest/public/avm/opcodes/contract.d.ts +3 -4
  114. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/contract.js +11 -12
  116. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  117. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/control_flow.js +13 -11
  119. package/dest/public/avm/opcodes/conversion.d.ts +4 -3
  120. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/conversion.js +270 -6
  122. package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
  123. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/ec_add.js +21 -12
  125. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  126. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/environment_getters.js +20 -22
  128. package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
  129. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/external_calls.js +52 -46
  131. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  132. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/hashing.js +24 -19
  134. package/dest/public/avm/opcodes/index.d.ts +1 -1
  135. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  136. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/instruction.js +23 -19
  138. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  139. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  140. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  141. package/dest/public/avm/opcodes/memory.d.ts +15 -15
  142. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  143. package/dest/public/avm/opcodes/memory.js +52 -48
  144. package/dest/public/avm/opcodes/misc.d.ts +4 -3
  145. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  146. package/dest/public/avm/opcodes/misc.js +42 -17
  147. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  148. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  149. package/dest/public/avm/opcodes/storage.js +39 -27
  150. package/dest/public/avm/revert_reason.d.ts +18 -0
  151. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  152. package/dest/public/avm/revert_reason.js +39 -0
  153. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  154. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  155. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  156. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  157. package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
  158. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  159. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  160. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  161. package/dest/public/avm/test_utils.d.ts +12 -15
  162. package/dest/public/avm/test_utils.d.ts.map +1 -1
  163. package/dest/public/avm/test_utils.js +17 -25
  164. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  165. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  166. package/dest/public/contracts_db_checkpoint.js +30 -0
  167. package/dest/public/db_interfaces.d.ts +68 -0
  168. package/dest/public/db_interfaces.d.ts.map +1 -0
  169. package/dest/public/db_interfaces.js +3 -0
  170. package/dest/public/debug_fn_name.d.ts +18 -0
  171. package/dest/public/debug_fn_name.d.ts.map +1 -0
  172. package/dest/public/debug_fn_name.js +37 -0
  173. package/dest/public/executor_metrics.d.ts +12 -4
  174. package/dest/public/executor_metrics.d.ts.map +1 -1
  175. package/dest/public/executor_metrics.js +29 -24
  176. package/dest/public/executor_metrics_interface.d.ts +10 -0
  177. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  178. package/dest/public/executor_metrics_interface.js +1 -0
  179. package/dest/public/fixtures/amm_test.d.ts +10 -0
  180. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  181. package/dest/public/fixtures/amm_test.js +213 -0
  182. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  183. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  184. package/dest/public/fixtures/bulk_test.js +262 -0
  185. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  186. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  187. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  188. package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
  189. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  190. package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
  191. package/dest/public/fixtures/index.d.ts +10 -1
  192. package/dest/public/fixtures/index.d.ts.map +1 -1
  193. package/dest/public/fixtures/index.js +9 -0
  194. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  195. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  196. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  197. package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
  198. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  199. package/dest/public/fixtures/opcode_spammer.js +1693 -0
  200. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
  201. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  202. package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
  203. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  204. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  205. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  206. package/dest/public/fixtures/token_test.d.ts +12 -0
  207. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  208. package/dest/public/fixtures/token_test.js +96 -0
  209. package/dest/public/fixtures/utils.d.ts +18 -5
  210. package/dest/public/fixtures/utils.d.ts.map +1 -1
  211. package/dest/public/fixtures/utils.js +102 -59
  212. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  213. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  214. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  215. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  216. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  217. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  218. package/dest/public/hinting_db_sources.d.ts +80 -0
  219. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  220. package/dest/public/hinting_db_sources.js +355 -0
  221. package/dest/public/index.d.ts +6 -9
  222. package/dest/public/index.d.ts.map +1 -1
  223. package/dest/public/index.js +4 -7
  224. package/dest/public/public_db_sources.d.ts +52 -102
  225. package/dest/public/public_db_sources.d.ts.map +1 -1
  226. package/dest/public/public_db_sources.js +220 -193
  227. package/dest/public/public_errors.d.ts +12 -0
  228. package/dest/public/public_errors.d.ts.map +1 -0
  229. package/dest/public/public_errors.js +13 -0
  230. package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
  231. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  232. package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
  233. package/dest/public/public_processor/public_processor.d.ts +26 -38
  234. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  235. package/dest/public/public_processor/public_processor.js +573 -136
  236. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  237. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  238. package/dest/public/public_processor/public_processor_metrics.js +13 -46
  239. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
  240. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  241. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
  242. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  243. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  244. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +132 -0
  245. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  246. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  247. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  248. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  249. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  250. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  251. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
  252. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  253. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  254. package/dest/public/public_tx_simulator/factories.d.ts +13 -0
  255. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  256. package/dest/public/public_tx_simulator/factories.js +28 -0
  257. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  258. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  259. package/dest/public/public_tx_simulator/index.js +5 -0
  260. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  261. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  262. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  263. package/dest/public/public_tx_simulator/public_tx_context.d.ts +24 -31
  264. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  265. package/dest/public/public_tx_simulator/public_tx_context.js +72 -92
  266. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +37 -58
  267. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  268. package/dest/public/public_tx_simulator/public_tx_simulator.js +217 -206
  269. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  270. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  271. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  272. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  273. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  274. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
  275. package/dest/public/side_effect_errors.d.ts +42 -2
  276. package/dest/public/side_effect_errors.d.ts.map +1 -1
  277. package/dest/public/side_effect_errors.js +70 -1
  278. package/dest/public/side_effect_trace.d.ts +22 -67
  279. package/dest/public/side_effect_trace.d.ts.map +1 -1
  280. package/dest/public/side_effect_trace.js +72 -122
  281. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  282. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  283. package/dest/public/state_manager/index.d.ts +2 -0
  284. package/dest/public/state_manager/index.d.ts.map +1 -0
  285. package/dest/public/state_manager/index.js +1 -0
  286. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  287. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  288. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  289. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  290. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  291. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  292. package/dest/public/state_manager/state_manager.d.ts +164 -0
  293. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  294. package/dest/public/state_manager/state_manager.js +395 -0
  295. package/dest/public/test_executor_metrics.d.ts +55 -0
  296. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  297. package/dest/public/test_executor_metrics.js +307 -0
  298. package/dest/public/unique_class_ids.d.ts +1 -1
  299. package/dest/public/unique_class_ids.d.ts.map +1 -1
  300. package/dest/public/utils.d.ts +3 -5
  301. package/dest/public/utils.d.ts.map +1 -1
  302. package/dest/public/utils.js +4 -21
  303. package/dest/server.d.ts +7 -4
  304. package/dest/server.d.ts.map +1 -1
  305. package/dest/server.js +5 -2
  306. package/dest/testing.d.ts +2 -0
  307. package/dest/testing.d.ts.map +1 -0
  308. package/dest/testing.js +1 -0
  309. package/package.json +39 -33
  310. package/src/client.ts +5 -3
  311. package/src/common/errors.ts +80 -45
  312. package/src/common/index.ts +0 -1
  313. package/src/private/acvm/acvm.ts +17 -32
  314. package/src/private/acvm/acvm_types.ts +1 -1
  315. package/src/private/acvm/deserialize.ts +36 -30
  316. package/src/private/acvm/index.ts +0 -1
  317. package/src/private/acvm/serialize.ts +64 -1
  318. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  319. package/src/private/acvm_wasm.ts +72 -0
  320. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  321. package/src/private/circuit_recording/circuit_recorder.ts +261 -0
  322. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  323. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  324. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  325. package/src/private/circuit_simulator.ts +90 -0
  326. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  327. package/src/public/avm/avm_context.ts +6 -6
  328. package/src/public/avm/avm_contract_call_result.ts +23 -9
  329. package/src/public/avm/avm_execution_environment.ts +17 -5
  330. package/src/public/avm/avm_gas.ts +26 -38
  331. package/src/public/avm/avm_machine_state.ts +12 -6
  332. package/src/public/avm/avm_memory_types.ts +24 -7
  333. package/src/public/avm/avm_simulator.ts +57 -62
  334. package/src/public/avm/avm_simulator_interface.ts +8 -0
  335. package/src/public/avm/calldata.ts +100 -0
  336. package/src/public/avm/errors.ts +20 -75
  337. package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
  338. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
  339. package/src/public/avm/fixtures/initializers.ts +103 -0
  340. package/src/public/avm/fixtures/utils.ts +151 -0
  341. package/src/public/avm/index.ts +0 -2
  342. package/src/public/avm/opcodes/accrued_substate.ts +74 -33
  343. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  344. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  345. package/src/public/avm/opcodes/bitwise.ts +33 -29
  346. package/src/public/avm/opcodes/comparators.ts +6 -3
  347. package/src/public/avm/opcodes/contract.ts +10 -10
  348. package/src/public/avm/opcodes/control_flow.ts +19 -10
  349. package/src/public/avm/opcodes/conversion.ts +29 -5
  350. package/src/public/avm/opcodes/ec_add.ts +22 -10
  351. package/src/public/avm/opcodes/environment_getters.ts +28 -23
  352. package/src/public/avm/opcodes/external_calls.ts +70 -36
  353. package/src/public/avm/opcodes/hashing.ts +39 -13
  354. package/src/public/avm/opcodes/instruction.ts +31 -21
  355. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  356. package/src/public/avm/opcodes/memory.ts +81 -42
  357. package/src/public/avm/opcodes/misc.ts +61 -19
  358. package/src/public/avm/opcodes/storage.ts +47 -23
  359. package/src/public/avm/revert_reason.ts +58 -0
  360. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  361. package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
  362. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  363. package/src/public/avm/test_utils.ts +25 -42
  364. package/src/public/contracts_db_checkpoint.ts +41 -0
  365. package/src/public/db_interfaces.ts +76 -0
  366. package/src/public/debug_fn_name.ts +52 -0
  367. package/src/public/executor_metrics.ts +47 -24
  368. package/src/public/executor_metrics_interface.ts +15 -0
  369. package/src/public/fixtures/amm_test.ts +331 -0
  370. package/src/public/fixtures/bulk_test.ts +169 -0
  371. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  372. package/src/public/fixtures/custom_bytecode_tests.ts +228 -0
  373. package/src/public/fixtures/index.ts +13 -0
  374. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  375. package/src/public/fixtures/opcode_spammer.ts +1754 -0
  376. package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
  377. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  378. package/src/public/fixtures/token_test.ts +148 -0
  379. package/src/public/fixtures/utils.ts +141 -69
  380. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  381. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  382. package/src/public/hinting_db_sources.ts +607 -0
  383. package/src/public/index.ts +11 -8
  384. package/src/public/public_db_sources.ts +279 -259
  385. package/src/public/public_errors.ts +14 -0
  386. package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
  387. package/src/public/public_processor/public_processor.ts +243 -178
  388. package/src/public/public_processor/public_processor_metrics.ts +13 -47
  389. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
  390. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +208 -0
  391. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
  392. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
  393. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
  394. package/src/public/public_tx_simulator/factories.ts +41 -0
  395. package/src/public/public_tx_simulator/index.ts +7 -0
  396. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  397. package/src/public/public_tx_simulator/public_tx_context.ts +168 -195
  398. package/src/public/public_tx_simulator/public_tx_simulator.ts +310 -261
  399. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  400. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  401. package/src/public/side_effect_errors.ts +91 -1
  402. package/src/public/side_effect_trace.ts +95 -321
  403. package/src/public/side_effect_trace_interface.ts +11 -59
  404. package/src/public/state_manager/index.ts +1 -0
  405. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  406. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  407. package/src/public/state_manager/state_manager.ts +546 -0
  408. package/src/public/test_executor_metrics.ts +397 -0
  409. package/src/public/utils.ts +5 -21
  410. package/src/server.ts +6 -3
  411. package/src/testing.ts +1 -0
  412. package/dest/common/db_interfaces.d.ts +0 -80
  413. package/dest/common/db_interfaces.d.ts.map +0 -1
  414. package/dest/common/db_interfaces.js +0 -1
  415. package/dest/common/debug_fn_name.d.ts +0 -5
  416. package/dest/common/debug_fn_name.d.ts.map +0 -1
  417. package/dest/common/debug_fn_name.js +0 -6
  418. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  419. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  420. package/dest/common/message_load_oracle_inputs.js +0 -15
  421. package/dest/private/acvm/oracle/index.d.ts +0 -14
  422. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  423. package/dest/private/acvm/oracle/index.js +0 -2
  424. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  425. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  426. package/dest/private/acvm/oracle/oracle.js +0 -263
  427. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  428. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  429. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  430. package/dest/private/execution_data_provider.d.ts +0 -261
  431. package/dest/private/execution_data_provider.d.ts.map +0 -1
  432. package/dest/private/execution_data_provider.js +0 -14
  433. package/dest/private/execution_note_cache.d.ts +0 -93
  434. package/dest/private/execution_note_cache.d.ts.map +0 -1
  435. package/dest/private/execution_note_cache.js +0 -180
  436. package/dest/private/hashed_values_cache.d.ts +0 -28
  437. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  438. package/dest/private/hashed_values_cache.js +0 -46
  439. package/dest/private/index.d.ts +0 -13
  440. package/dest/private/index.d.ts.map +0 -1
  441. package/dest/private/index.js +0 -12
  442. package/dest/private/pick_notes.d.ts +0 -85
  443. package/dest/private/pick_notes.d.ts.map +0 -1
  444. package/dest/private/pick_notes.js +0 -51
  445. package/dest/private/private_execution.d.ts +0 -25
  446. package/dest/private/private_execution.d.ts.map +0 -1
  447. package/dest/private/private_execution.js +0 -92
  448. package/dest/private/private_execution_oracle.d.ts +0 -215
  449. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  450. package/dest/private/private_execution_oracle.js +0 -382
  451. package/dest/private/providers/acvm_native.d.ts +0 -40
  452. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  453. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  454. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  455. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  456. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  457. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  458. package/dest/private/providers/factory.d.ts +0 -12
  459. package/dest/private/providers/factory.d.ts.map +0 -1
  460. package/dest/private/providers/simulation_provider.d.ts +0 -19
  461. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  462. package/dest/private/providers/simulation_provider.js +0 -24
  463. package/dest/private/simulator.d.ts +0 -34
  464. package/dest/private/simulator.d.ts.map +0 -1
  465. package/dest/private/simulator.js +0 -76
  466. package/dest/private/unconstrained_execution.d.ts +0 -10
  467. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  468. package/dest/private/unconstrained_execution.js +0 -27
  469. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  470. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  471. package/dest/private/unconstrained_execution_oracle.js +0 -258
  472. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  473. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  474. package/dest/public/avm/bytecode_utils.js +0 -17
  475. package/dest/public/avm/fixtures/index.d.ts +0 -84
  476. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  477. package/dest/public/avm/fixtures/index.js +0 -175
  478. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  479. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  480. package/dest/public/avm/journal/index.d.ts +0 -2
  481. package/dest/public/avm/journal/index.d.ts.map +0 -1
  482. package/dest/public/avm/journal/index.js +0 -1
  483. package/dest/public/avm/journal/journal.d.ts +0 -209
  484. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  485. package/dest/public/avm/journal/journal.js +0 -486
  486. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  487. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  488. package/dest/public/bytecode_errors.d.ts +0 -4
  489. package/dest/public/bytecode_errors.d.ts.map +0 -1
  490. package/dest/public/bytecode_errors.js +0 -6
  491. package/dest/public/execution.d.ts +0 -108
  492. package/dest/public/execution.d.ts.map +0 -1
  493. package/dest/public/execution.js +0 -9
  494. package/dest/public/tx_contract_cache.d.ts +0 -41
  495. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  496. package/dest/public/tx_contract_cache.js +0 -49
  497. package/dest/test/utils.d.ts +0 -13
  498. package/dest/test/utils.d.ts.map +0 -1
  499. package/dest/test/utils.js +0 -22
  500. package/src/common/db_interfaces.ts +0 -94
  501. package/src/common/debug_fn_name.ts +0 -18
  502. package/src/common/message_load_oracle_inputs.ts +0 -15
  503. package/src/private/acvm/oracle/index.ts +0 -16
  504. package/src/private/acvm/oracle/oracle.ts +0 -455
  505. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  506. package/src/private/execution_data_provider.ts +0 -323
  507. package/src/private/execution_note_cache.ts +0 -217
  508. package/src/private/hashed_values_cache.ts +0 -55
  509. package/src/private/index.ts +0 -16
  510. package/src/private/pick_notes.ts +0 -141
  511. package/src/private/private_execution.ts +0 -151
  512. package/src/private/private_execution_oracle.ts +0 -614
  513. package/src/private/providers/acvm_wasm.ts +0 -63
  514. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  515. package/src/private/providers/simulation_provider.ts +0 -45
  516. package/src/private/simulator.ts +0 -147
  517. package/src/private/unconstrained_execution.ts +0 -50
  518. package/src/private/unconstrained_execution_oracle.ts +0 -373
  519. package/src/public/avm/bytecode_utils.ts +0 -17
  520. package/src/public/avm/fixtures/index.ts +0 -296
  521. package/src/public/avm/journal/index.ts +0 -1
  522. package/src/public/avm/journal/journal.ts +0 -742
  523. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  524. package/src/public/bytecode_errors.ts +0 -6
  525. package/src/public/execution.ts +0 -140
  526. package/src/public/tx_contract_cache.ts +0 -69
  527. package/src/test/utils.ts +0 -36
@@ -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,103 @@
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 { CallDataArray } from '../calldata.js';
23
+ import { DEFAULT_TIMESTAMP } from './utils.js';
24
+
25
+ /**
26
+ * Create a new AVM context with default values.
27
+ */
28
+ export function initContext(overrides?: {
29
+ persistableState?: PublicPersistableStateManager;
30
+ env?: AvmExecutionEnvironment;
31
+ machineState?: AvmMachineState;
32
+ }): AvmContext {
33
+ const ctx = new AvmContext(
34
+ overrides?.persistableState || initPersistableStateManager(),
35
+ overrides?.env || initExecutionEnvironment(),
36
+ overrides?.machineState || initMachineState(),
37
+ );
38
+ ctx.provideSimulator = AvmSimulator.build;
39
+ return ctx;
40
+ }
41
+
42
+ /** Creates an empty state manager with mocked host storage. */
43
+ export function initPersistableStateManager(overrides?: {
44
+ treesDB?: PublicTreesDB;
45
+ contractsDB?: PublicContractsDB;
46
+ trace?: PublicSideEffectTraceInterface;
47
+ publicStorage?: PublicStorage;
48
+ nullifiers?: NullifierManager;
49
+ firstNullifier?: Fr;
50
+ timestamp?: UInt64;
51
+ }): PublicPersistableStateManager {
52
+ const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
53
+ return new PublicPersistableStateManager(
54
+ treesDB,
55
+ overrides?.contractsDB || mock<PublicContractsDB>(),
56
+ overrides?.trace || mock<PublicSideEffectTraceInterface>(),
57
+ overrides?.firstNullifier || new Fr(27),
58
+ overrides?.timestamp || DEFAULT_TIMESTAMP,
59
+ /*doMerkleOperations=*/ false,
60
+ );
61
+ }
62
+
63
+ /**
64
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
65
+ */
66
+ export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnvironment>): AvmExecutionEnvironment {
67
+ return new AvmExecutionEnvironment(
68
+ overrides?.address ?? AztecAddress.zero(),
69
+ overrides?.sender ?? AztecAddress.zero(),
70
+ overrides?.contractCallDepth ?? Fr.zero(),
71
+ overrides?.transactionFee ?? Fr.zero(),
72
+ overrides?.globals ?? GlobalVariables.empty(),
73
+ overrides?.isStaticCall ?? false,
74
+ overrides?.calldata ?? new CallDataArray([]),
75
+ overrides?.config ?? PublicSimulatorConfig.empty(),
76
+ );
77
+ }
78
+
79
+ /**
80
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
81
+ */
82
+ export function initGlobalVariables(overrides?: Partial<GlobalVariables>): GlobalVariables {
83
+ return new GlobalVariables(
84
+ overrides?.chainId ?? Fr.zero(),
85
+ overrides?.version ?? Fr.zero(),
86
+ overrides?.blockNumber ?? BlockNumber.ZERO,
87
+ overrides?.slotNumber ?? SlotNumber.ZERO,
88
+ overrides?.timestamp ?? 0n,
89
+ overrides?.coinbase ?? EthAddress.ZERO,
90
+ overrides?.feeRecipient ?? AztecAddress.zero(),
91
+ overrides?.gasFees ?? GasFees.empty(),
92
+ );
93
+ }
94
+
95
+ /**
96
+ * Create an empty instance of the Machine State where all values are set to a large enough amount, unless overridden in the overrides object
97
+ */
98
+ export function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState {
99
+ return AvmMachineState.fromState({
100
+ l2GasLeft: overrides?.l2GasLeft ?? AVM_MAX_PROCESSABLE_L2_GAS,
101
+ daGasLeft: overrides?.daGasLeft ?? 1e8,
102
+ });
103
+ }
@@ -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';
@@ -1,7 +1,9 @@
1
+ import { MAX_ETH_ADDRESS_VALUE } from '@aztec/constants';
2
+
3
+ import { NullifierCollisionError } from '../../side_effect_errors.js';
1
4
  import type { AvmContext } from '../avm_context.js';
2
5
  import { TypeTag, Uint1 } from '../avm_memory_types.js';
3
6
  import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
4
- import { NullifierCollisionError } from '../journal/nullifiers.js';
5
7
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
6
8
  import { Addressing } from './addressing_mode.js';
7
9
  import { Instruction } from './instruction.js';
@@ -19,7 +21,7 @@ export class NoteHashExists extends Instruction {
19
21
  ];
20
22
 
21
23
  constructor(
22
- private indirect: number,
24
+ private addressingMode: number,
23
25
  private noteHashOffset: number,
24
26
  private leafIndexOffset: number,
25
27
  private existsOffset: number,
@@ -29,15 +31,19 @@ export class NoteHashExists extends Instruction {
29
31
 
30
32
  public async execute(context: AvmContext): Promise<void> {
31
33
  const memory = context.machineState.memory;
32
- context.machineState.consumeGas(this.gasCost());
34
+ const addressing = Addressing.fromWire(this.addressingMode);
35
+
36
+ context.machineState.consumeGas(
37
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
38
+ );
33
39
  const operands = [this.noteHashOffset, this.leafIndexOffset, this.existsOffset];
34
- const addressing = Addressing.fromWire(this.indirect, operands.length);
35
40
  const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
36
- memory.checkTags(TypeTag.FIELD, noteHashOffset, leafIndexOffset);
41
+ memory.checkTag(TypeTag.FIELD, noteHashOffset);
42
+ memory.checkTag(TypeTag.UINT64, leafIndexOffset);
37
43
 
38
44
  // Note that this instruction accepts any type in memory, and converts to Field.
39
45
  const noteHash = memory.get(noteHashOffset).toFr();
40
- const leafIndex = memory.get(leafIndexOffset).toFr();
46
+ const leafIndex = memory.get(leafIndexOffset).toBigInt();
41
47
 
42
48
  const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
43
49
  memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
@@ -50,16 +56,22 @@ export class EmitNoteHash extends Instruction {
50
56
  // Informs (de)serialization. See Instruction.deserialize.
51
57
  static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
52
58
 
53
- constructor(private indirect: number, private noteHashOffset: number) {
59
+ constructor(
60
+ private addressingMode: number,
61
+ private noteHashOffset: number,
62
+ ) {
54
63
  super();
55
64
  }
56
65
 
57
66
  public async execute(context: AvmContext): Promise<void> {
58
67
  const memory = context.machineState.memory;
59
- context.machineState.consumeGas(this.gasCost());
68
+ const addressing = Addressing.fromWire(this.addressingMode);
69
+
70
+ context.machineState.consumeGas(
71
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
72
+ );
60
73
 
61
74
  const operands = [this.noteHashOffset];
62
- const addressing = Addressing.fromWire(this.indirect, operands.length);
63
75
  const [noteHashOffset] = addressing.resolve(operands, memory);
64
76
  memory.checkTag(TypeTag.FIELD, noteHashOffset);
65
77
 
@@ -85,7 +97,7 @@ export class NullifierExists extends Instruction {
85
97
  ];
86
98
 
87
99
  constructor(
88
- private indirect: number,
100
+ private addressingMode: number,
89
101
  private nullifierOffset: number,
90
102
  private addressOffset: number,
91
103
  private existsOffset: number,
@@ -95,10 +107,13 @@ export class NullifierExists extends Instruction {
95
107
 
96
108
  public async execute(context: AvmContext): Promise<void> {
97
109
  const memory = context.machineState.memory;
98
- context.machineState.consumeGas(this.gasCost());
110
+ const addressing = Addressing.fromWire(this.addressingMode);
111
+
112
+ context.machineState.consumeGas(
113
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
114
+ );
99
115
 
100
116
  const operands = [this.nullifierOffset, this.addressOffset, this.existsOffset];
101
- const addressing = Addressing.fromWire(this.indirect, operands.length);
102
117
  const [nullifierOffset, addressOffset, existsOffset] = addressing.resolve(operands, memory);
103
118
  memory.checkTags(TypeTag.FIELD, nullifierOffset, addressOffset);
104
119
 
@@ -116,7 +131,10 @@ export class EmitNullifier extends Instruction {
116
131
  // Informs (de)serialization. See Instruction.deserialize.
117
132
  static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
118
133
 
119
- constructor(private indirect: number, private nullifierOffset: number) {
134
+ constructor(
135
+ private addressingMode: number,
136
+ private nullifierOffset: number,
137
+ ) {
120
138
  super();
121
139
  }
122
140
 
@@ -126,10 +144,13 @@ export class EmitNullifier extends Instruction {
126
144
  }
127
145
 
128
146
  const memory = context.machineState.memory;
129
- context.machineState.consumeGas(this.gasCost());
147
+ const addressing = Addressing.fromWire(this.addressingMode);
148
+
149
+ context.machineState.consumeGas(
150
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
151
+ );
130
152
 
131
153
  const operands = [this.nullifierOffset];
132
- const addressing = Addressing.fromWire(this.indirect, operands.length);
133
154
  const [nullifierOffset] = addressing.resolve(operands, memory);
134
155
  memory.checkTag(TypeTag.FIELD, nullifierOffset);
135
156
 
@@ -162,7 +183,7 @@ export class L1ToL2MessageExists extends Instruction {
162
183
  ];
163
184
 
164
185
  constructor(
165
- private indirect: number,
186
+ private addressingMode: number,
166
187
  private msgHashOffset: number,
167
188
  private msgLeafIndexOffset: number,
168
189
  private existsOffset: number,
@@ -172,20 +193,21 @@ export class L1ToL2MessageExists extends Instruction {
172
193
 
173
194
  public async execute(context: AvmContext): Promise<void> {
174
195
  const memory = context.machineState.memory;
175
- context.machineState.consumeGas(this.gasCost());
196
+ const addressing = Addressing.fromWire(this.addressingMode);
197
+
198
+ context.machineState.consumeGas(
199
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
200
+ );
176
201
 
177
202
  const operands = [this.msgHashOffset, this.msgLeafIndexOffset, this.existsOffset];
178
- const addressing = Addressing.fromWire(this.indirect, operands.length);
179
203
  const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
180
- memory.checkTags(TypeTag.FIELD, msgHashOffset, msgLeafIndexOffset);
204
+
205
+ memory.checkTag(TypeTag.FIELD, msgHashOffset);
206
+ memory.checkTag(TypeTag.UINT64, msgLeafIndexOffset);
181
207
 
182
208
  const msgHash = memory.get(msgHashOffset).toFr();
183
209
  const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
184
- const exists = await context.persistableState.checkL1ToL2MessageExists(
185
- context.environment.address,
186
- msgHash,
187
- msgLeafIndex,
188
- );
210
+ const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
189
211
  memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
190
212
  }
191
213
  }
@@ -197,7 +219,11 @@ export class EmitUnencryptedLog extends Instruction {
197
219
  // Informs (de)serialization. See Instruction.deserialize.
198
220
  static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
199
221
 
200
- constructor(private indirect: number, private logOffset: number, private logSizeOffset: number) {
222
+ constructor(
223
+ private addressingMode: number,
224
+ private logSizeOffset: number,
225
+ private logOffset: number,
226
+ ) {
201
227
  super();
202
228
  }
203
229
 
@@ -207,17 +233,21 @@ export class EmitUnencryptedLog extends Instruction {
207
233
  }
208
234
 
209
235
  const memory = context.machineState.memory;
236
+ const addressing = Addressing.fromWire(this.addressingMode);
237
+
238
+ context.machineState.consumeGas(
239
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
240
+ );
210
241
 
211
- const operands = [this.logOffset, this.logSizeOffset];
212
- const addressing = Addressing.fromWire(this.indirect, operands.length);
213
- const [logOffset, logSizeOffset] = addressing.resolve(operands, memory);
242
+ const operands = [this.logSizeOffset, this.logOffset];
243
+ const [logSizeOffset, logOffset] = addressing.resolve(operands, memory);
214
244
  memory.checkTag(TypeTag.UINT32, logSizeOffset);
215
245
  const logSize = memory.get(logSizeOffset).toNumber();
216
- memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
217
246
 
218
247
  const contractAddress = context.environment.address;
219
248
 
220
- context.machineState.consumeGas(this.gasCost(logSize));
249
+ context.machineState.consumeGas(this.dynamicGasCost(logSize));
250
+ memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
221
251
  const log = memory.getSlice(logOffset, logSize).map(f => f.toFr());
222
252
  context.persistableState.writePublicLog(contractAddress, log);
223
253
  }
@@ -229,7 +259,11 @@ export class SendL2ToL1Message extends Instruction {
229
259
  // Informs (de)serialization. See Instruction.deserialize.
230
260
  static readonly wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
231
261
 
232
- constructor(private indirect: number, private recipientOffset: number, private contentOffset: number) {
262
+ constructor(
263
+ private addressingMode: number,
264
+ private recipientOffset: number,
265
+ private contentOffset: number,
266
+ ) {
233
267
  super();
234
268
  }
235
269
 
@@ -239,14 +273,21 @@ export class SendL2ToL1Message extends Instruction {
239
273
  }
240
274
 
241
275
  const memory = context.machineState.memory;
242
- context.machineState.consumeGas(this.gasCost());
276
+ const addressing = Addressing.fromWire(this.addressingMode);
277
+
278
+ context.machineState.consumeGas(
279
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
280
+ );
243
281
 
244
282
  const operands = [this.recipientOffset, this.contentOffset];
245
- const addressing = Addressing.fromWire(this.indirect, operands.length);
246
283
  const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
247
284
  memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
248
285
 
249
286
  const recipient = memory.get(recipientOffset).toFr();
287
+
288
+ if (recipient.toBigInt() > MAX_ETH_ADDRESS_VALUE) {
289
+ throw new InstructionExecutionError(`SENDL2TOL1MSG: Recipient address is too large`);
290
+ }
250
291
  const content = memory.get(contentOffset).toFr();
251
292
  context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
252
293
  }