@aztec/simulator 0.0.0-test.0 → 0.0.1-fake-c83136db25

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 (466) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +9 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +3 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +7 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +23 -35
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +6 -30
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +7 -57
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +5 -4
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -14
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +6 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts +2 -2
  94. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  95. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  97. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  98. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  99. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  100. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  101. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  102. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  103. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  104. package/dest/public/avm/opcodes/bitwise.js +19 -26
  105. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/comparators.js +3 -3
  107. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  108. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/contract.js +9 -10
  110. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/control_flow.js +10 -8
  112. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  113. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/conversion.js +267 -3
  115. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  116. package/dest/public/avm/opcodes/ec_add.js +6 -6
  117. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  118. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  119. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  120. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  121. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  122. package/dest/public/avm/opcodes/external_calls.js +39 -34
  123. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/hashing.js +6 -6
  125. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  126. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/instruction.js +23 -19
  128. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  129. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/memory.js +37 -33
  131. package/dest/public/avm/opcodes/misc.d.ts +2 -1
  132. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/misc.js +41 -16
  134. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  135. package/dest/public/avm/opcodes/storage.js +7 -5
  136. package/dest/public/avm/revert_reason.d.ts +18 -0
  137. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  138. package/dest/public/avm/revert_reason.js +38 -0
  139. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  140. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  142. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  143. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  144. package/dest/public/avm/serialization/instruction_serialization.d.ts +13 -4
  145. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  146. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  147. package/dest/public/avm/test_utils.d.ts +10 -13
  148. package/dest/public/avm/test_utils.d.ts.map +1 -1
  149. package/dest/public/avm/test_utils.js +16 -24
  150. package/dest/public/db_interfaces.d.ts +56 -0
  151. package/dest/public/db_interfaces.d.ts.map +1 -0
  152. package/dest/public/db_interfaces.js +3 -0
  153. package/dest/public/debug_fn_name.d.ts +5 -0
  154. package/dest/public/debug_fn_name.d.ts.map +1 -0
  155. package/dest/public/debug_fn_name.js +9 -0
  156. package/dest/public/executor_metrics.d.ts +10 -3
  157. package/dest/public/executor_metrics.d.ts.map +1 -1
  158. package/dest/public/executor_metrics.js +37 -6
  159. package/dest/public/executor_metrics_interface.d.ts +9 -0
  160. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  161. package/dest/public/executor_metrics_interface.js +1 -0
  162. package/dest/public/fixtures/amm_test.d.ts +10 -0
  163. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  164. package/dest/public/fixtures/amm_test.js +213 -0
  165. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  166. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  167. package/dest/public/fixtures/bulk_test.js +326 -0
  168. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  169. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  170. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  171. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  172. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  173. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  174. package/dest/public/fixtures/index.d.ts +7 -0
  175. package/dest/public/fixtures/index.d.ts.map +1 -1
  176. package/dest/public/fixtures/index.js +7 -0
  177. package/dest/public/fixtures/minimal_public_tx.d.ts +10 -0
  178. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  179. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  180. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -13
  181. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  182. package/dest/public/fixtures/public_tx_simulation_tester.js +96 -71
  183. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  184. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  185. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  186. package/dest/public/fixtures/token_test.d.ts +8 -0
  187. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  188. package/dest/public/fixtures/token_test.js +95 -0
  189. package/dest/public/fixtures/utils.d.ts +16 -3
  190. package/dest/public/fixtures/utils.d.ts.map +1 -1
  191. package/dest/public/fixtures/utils.js +100 -58
  192. package/dest/public/hinting_db_sources.d.ts +70 -0
  193. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  194. package/dest/public/hinting_db_sources.js +297 -0
  195. package/dest/public/index.d.ts +4 -8
  196. package/dest/public/index.d.ts.map +1 -1
  197. package/dest/public/index.js +4 -7
  198. package/dest/public/public_db_sources.d.ts +30 -39
  199. package/dest/public/public_db_sources.d.ts.map +1 -1
  200. package/dest/public/public_db_sources.js +151 -67
  201. package/dest/public/public_errors.d.ts +12 -0
  202. package/dest/public/public_errors.d.ts.map +1 -0
  203. package/dest/public/public_errors.js +13 -0
  204. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  205. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  206. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  207. package/dest/public/public_processor/public_processor.d.ts +25 -30
  208. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  209. package/dest/public/public_processor/public_processor.js +141 -96
  210. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  211. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  212. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  213. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +41 -0
  214. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  215. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +89 -0
  216. package/dest/public/public_tx_simulator/index.d.ts +4 -0
  217. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  218. package/dest/public/public_tx_simulator/index.js +2 -0
  219. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +24 -0
  220. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  221. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  222. package/dest/public/public_tx_simulator/public_tx_context.d.ts +19 -29
  223. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  224. package/dest/public/public_tx_simulator/public_tx_context.js +63 -91
  225. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +45 -47
  226. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  227. package/dest/public/public_tx_simulator/public_tx_simulator.js +209 -184
  228. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  229. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  230. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  231. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  232. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  233. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  234. package/dest/public/side_effect_errors.d.ts +41 -1
  235. package/dest/public/side_effect_errors.d.ts.map +1 -1
  236. package/dest/public/side_effect_errors.js +70 -1
  237. package/dest/public/side_effect_trace.d.ts +20 -65
  238. package/dest/public/side_effect_trace.d.ts.map +1 -1
  239. package/dest/public/side_effect_trace.js +71 -121
  240. package/dest/public/side_effect_trace_interface.d.ts +11 -22
  241. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  242. package/dest/public/state_manager/index.d.ts +2 -0
  243. package/dest/public/state_manager/index.d.ts.map +1 -0
  244. package/dest/public/state_manager/index.js +1 -0
  245. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -5
  246. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  247. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  248. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  249. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  250. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +42 -85
  251. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  252. package/dest/public/state_manager/state_manager.js +391 -0
  253. package/dest/public/test_executor_metrics.d.ts +54 -0
  254. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  255. package/dest/public/test_executor_metrics.js +306 -0
  256. package/dest/public/unique_class_ids.d.ts.map +1 -1
  257. package/dest/public/utils.d.ts +2 -4
  258. package/dest/public/utils.d.ts.map +1 -1
  259. package/dest/public/utils.js +4 -21
  260. package/dest/server.d.ts +6 -3
  261. package/dest/server.d.ts.map +1 -1
  262. package/dest/server.js +5 -2
  263. package/dest/testing.d.ts +2 -0
  264. package/dest/testing.d.ts.map +1 -0
  265. package/dest/testing.js +1 -0
  266. package/package.json +36 -31
  267. package/src/client.ts +5 -3
  268. package/src/common/errors.ts +79 -44
  269. package/src/common/index.ts +0 -1
  270. package/src/private/acvm/acvm.ts +17 -32
  271. package/src/private/acvm/acvm_types.ts +1 -1
  272. package/src/private/acvm/deserialize.ts +35 -29
  273. package/src/private/acvm/index.ts +0 -1
  274. package/src/private/acvm/serialize.ts +63 -0
  275. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +30 -15
  276. package/src/private/acvm_wasm.ts +72 -0
  277. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  278. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  279. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  280. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  281. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  282. package/src/private/circuit_simulator.ts +90 -0
  283. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  284. package/src/public/avm/avm_context.ts +4 -4
  285. package/src/public/avm/avm_contract_call_result.ts +17 -5
  286. package/src/public/avm/avm_execution_environment.ts +10 -1
  287. package/src/public/avm/avm_gas.ts +23 -35
  288. package/src/public/avm/avm_machine_state.ts +5 -0
  289. package/src/public/avm/avm_memory_types.ts +19 -6
  290. package/src/public/avm/avm_simulator.ts +44 -54
  291. package/src/public/avm/avm_simulator_interface.ts +8 -0
  292. package/src/public/avm/errors.ts +8 -77
  293. package/src/public/avm/fixtures/avm_simulation_tester.ts +23 -20
  294. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  295. package/src/public/avm/fixtures/initializers.ts +104 -0
  296. package/src/public/avm/fixtures/utils.ts +150 -0
  297. package/src/public/avm/index.ts +0 -2
  298. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  299. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  300. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  301. package/src/public/avm/opcodes/bitwise.ts +33 -29
  302. package/src/public/avm/opcodes/comparators.ts +6 -3
  303. package/src/public/avm/opcodes/contract.ts +10 -7
  304. package/src/public/avm/opcodes/control_flow.ts +19 -10
  305. package/src/public/avm/opcodes/conversion.ts +27 -3
  306. package/src/public/avm/opcodes/ec_add.ts +9 -6
  307. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  308. package/src/public/avm/opcodes/external_calls.ts +61 -29
  309. package/src/public/avm/opcodes/hashing.ts +28 -8
  310. package/src/public/avm/opcodes/instruction.ts +31 -21
  311. package/src/public/avm/opcodes/memory.ts +71 -32
  312. package/src/public/avm/opcodes/misc.ts +60 -18
  313. package/src/public/avm/opcodes/storage.ts +22 -6
  314. package/src/public/avm/revert_reason.ts +55 -0
  315. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  316. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  317. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  318. package/src/public/avm/test_utils.ts +24 -41
  319. package/src/public/db_interfaces.ts +61 -0
  320. package/src/{common → public}/debug_fn_name.ts +7 -7
  321. package/src/public/executor_metrics.ts +55 -6
  322. package/src/public/executor_metrics_interface.ts +14 -0
  323. package/src/public/fixtures/amm_test.ts +331 -0
  324. package/src/public/fixtures/bulk_test.ts +169 -0
  325. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  326. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  327. package/src/public/fixtures/index.ts +7 -0
  328. package/src/public/fixtures/minimal_public_tx.ts +36 -0
  329. package/src/public/fixtures/public_tx_simulation_tester.ts +158 -113
  330. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  331. package/src/public/fixtures/token_test.ts +140 -0
  332. package/src/public/fixtures/utils.ts +141 -68
  333. package/src/public/hinting_db_sources.ts +505 -0
  334. package/src/public/index.ts +9 -8
  335. package/src/public/public_db_sources.ts +196 -97
  336. package/src/public/public_errors.ts +14 -0
  337. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  338. package/src/public/public_processor/public_processor.ts +191 -153
  339. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  340. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +128 -0
  341. package/src/public/public_tx_simulator/index.ts +3 -0
  342. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +109 -0
  343. package/src/public/public_tx_simulator/public_tx_context.ts +160 -193
  344. package/src/public/public_tx_simulator/public_tx_simulator.ts +294 -220
  345. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +11 -0
  346. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  347. package/src/public/side_effect_errors.ts +91 -1
  348. package/src/public/side_effect_trace.ts +94 -320
  349. package/src/public/side_effect_trace_interface.ts +10 -58
  350. package/src/public/state_manager/index.ts +1 -0
  351. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  352. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  353. package/src/public/state_manager/state_manager.ts +560 -0
  354. package/src/public/test_executor_metrics.ts +395 -0
  355. package/src/public/utils.ts +5 -21
  356. package/src/server.ts +6 -3
  357. package/src/testing.ts +1 -0
  358. package/dest/common/db_interfaces.d.ts +0 -80
  359. package/dest/common/db_interfaces.d.ts.map +0 -1
  360. package/dest/common/db_interfaces.js +0 -1
  361. package/dest/common/debug_fn_name.d.ts +0 -5
  362. package/dest/common/debug_fn_name.d.ts.map +0 -1
  363. package/dest/common/debug_fn_name.js +0 -6
  364. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  365. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  366. package/dest/common/message_load_oracle_inputs.js +0 -15
  367. package/dest/private/acvm/oracle/index.d.ts +0 -14
  368. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  369. package/dest/private/acvm/oracle/index.js +0 -2
  370. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  371. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  372. package/dest/private/acvm/oracle/oracle.js +0 -263
  373. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  374. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  375. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  376. package/dest/private/execution_data_provider.d.ts +0 -261
  377. package/dest/private/execution_data_provider.d.ts.map +0 -1
  378. package/dest/private/execution_data_provider.js +0 -14
  379. package/dest/private/execution_note_cache.d.ts +0 -93
  380. package/dest/private/execution_note_cache.d.ts.map +0 -1
  381. package/dest/private/execution_note_cache.js +0 -180
  382. package/dest/private/hashed_values_cache.d.ts +0 -28
  383. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  384. package/dest/private/hashed_values_cache.js +0 -46
  385. package/dest/private/index.d.ts +0 -13
  386. package/dest/private/index.d.ts.map +0 -1
  387. package/dest/private/index.js +0 -12
  388. package/dest/private/pick_notes.d.ts +0 -85
  389. package/dest/private/pick_notes.d.ts.map +0 -1
  390. package/dest/private/pick_notes.js +0 -51
  391. package/dest/private/private_execution.d.ts +0 -25
  392. package/dest/private/private_execution.d.ts.map +0 -1
  393. package/dest/private/private_execution.js +0 -92
  394. package/dest/private/private_execution_oracle.d.ts +0 -215
  395. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  396. package/dest/private/private_execution_oracle.js +0 -382
  397. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  398. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  399. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  400. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  401. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  402. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  403. package/dest/private/providers/factory.d.ts +0 -12
  404. package/dest/private/providers/factory.d.ts.map +0 -1
  405. package/dest/private/providers/simulation_provider.d.ts +0 -19
  406. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  407. package/dest/private/providers/simulation_provider.js +0 -24
  408. package/dest/private/simulator.d.ts +0 -34
  409. package/dest/private/simulator.d.ts.map +0 -1
  410. package/dest/private/simulator.js +0 -76
  411. package/dest/private/unconstrained_execution.d.ts +0 -10
  412. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  413. package/dest/private/unconstrained_execution.js +0 -27
  414. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  415. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  416. package/dest/private/unconstrained_execution_oracle.js +0 -258
  417. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  418. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  419. package/dest/public/avm/bytecode_utils.js +0 -17
  420. package/dest/public/avm/fixtures/index.d.ts +0 -84
  421. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  422. package/dest/public/avm/fixtures/index.js +0 -175
  423. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  424. package/dest/public/avm/journal/index.d.ts +0 -2
  425. package/dest/public/avm/journal/index.d.ts.map +0 -1
  426. package/dest/public/avm/journal/index.js +0 -1
  427. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  428. package/dest/public/avm/journal/journal.js +0 -486
  429. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  430. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  431. package/dest/public/bytecode_errors.d.ts +0 -4
  432. package/dest/public/bytecode_errors.d.ts.map +0 -1
  433. package/dest/public/bytecode_errors.js +0 -6
  434. package/dest/public/execution.d.ts +0 -108
  435. package/dest/public/execution.d.ts.map +0 -1
  436. package/dest/public/execution.js +0 -9
  437. package/dest/test/utils.d.ts +0 -13
  438. package/dest/test/utils.d.ts.map +0 -1
  439. package/dest/test/utils.js +0 -22
  440. package/src/common/db_interfaces.ts +0 -94
  441. package/src/common/message_load_oracle_inputs.ts +0 -15
  442. package/src/private/acvm/oracle/index.ts +0 -16
  443. package/src/private/acvm/oracle/oracle.ts +0 -455
  444. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  445. package/src/private/execution_data_provider.ts +0 -323
  446. package/src/private/execution_note_cache.ts +0 -217
  447. package/src/private/hashed_values_cache.ts +0 -55
  448. package/src/private/index.ts +0 -16
  449. package/src/private/pick_notes.ts +0 -141
  450. package/src/private/private_execution.ts +0 -151
  451. package/src/private/private_execution_oracle.ts +0 -614
  452. package/src/private/providers/acvm_wasm.ts +0 -63
  453. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  454. package/src/private/providers/simulation_provider.ts +0 -45
  455. package/src/private/simulator.ts +0 -147
  456. package/src/private/unconstrained_execution.ts +0 -50
  457. package/src/private/unconstrained_execution_oracle.ts +0 -373
  458. package/src/public/avm/bytecode_utils.ts +0 -17
  459. package/src/public/avm/fixtures/index.ts +0 -296
  460. package/src/public/avm/journal/index.ts +0 -1
  461. package/src/public/avm/journal/journal.ts +0 -742
  462. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  463. package/src/public/bytecode_errors.ts +0 -6
  464. package/src/public/execution.ts +0 -140
  465. package/src/test/utils.ts +0 -36
  466. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -17,19 +17,28 @@ export class AvmContractCallResult {
17
17
  public output: Fr[],
18
18
  public gasLeft: AvmGas,
19
19
  public revertReason?: AvmRevertReason,
20
+ public totalInstructions: number = 0, // including nested calls
20
21
  ) {}
21
22
 
22
23
  toString(): string {
23
- let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(this.gasLeft)}`;
24
+ let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
25
+ this.gasLeft,
26
+ )}, totalInstructions: ${this.totalInstructions}`;
24
27
  if (this.revertReason) {
25
- resultsStr += `, revertReason: ${this.revertReason}`;
28
+ resultsStr += `, revertReason: ${this.revertReason.message}`;
26
29
  }
27
30
  return resultsStr;
28
31
  }
29
32
 
30
33
  finalize(): AvmFinalizedCallResult {
31
34
  const revertReason = this.revertReason ? createSimulationError(this.revertReason, this.output) : undefined;
32
- return new AvmFinalizedCallResult(this.reverted, this.output, Gas.from(this.gasLeft), revertReason);
35
+ return new AvmFinalizedCallResult(
36
+ this.reverted,
37
+ this.output,
38
+ Gas.from(this.gasLeft),
39
+ revertReason,
40
+ this.totalInstructions,
41
+ );
33
42
  }
34
43
  }
35
44
 
@@ -43,12 +52,15 @@ export class AvmFinalizedCallResult {
43
52
  public output: Fr[],
44
53
  public gasLeft: Gas,
45
54
  public revertReason?: SimulationError,
55
+ public totalInstructions: number = 0, // including nested calls
46
56
  ) {}
47
57
 
48
58
  toString(): string {
49
- let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(this.gasLeft)}`;
59
+ let resultsStr = `reverted: ${this.reverted}, output: ${this.output}, gasLeft: ${inspect(
60
+ this.gasLeft,
61
+ )}, totalInstructions: ${this.totalInstructions}`;
50
62
  if (this.revertReason) {
51
- resultsStr += `, revertReason: ${this.revertReason}`;
63
+ resultsStr += `, revertReason: ${this.revertReason.message}`;
52
64
  }
53
65
  return resultsStr;
54
66
  }
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_MAX_DEBUG_LOG_MEMORY_READS } from '@aztec/constants';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
4
  import type { GlobalVariables } from '@aztec/stdlib/tx';
@@ -15,9 +16,15 @@ export class AvmExecutionEnvironment {
15
16
  public readonly globals: GlobalVariables,
16
17
  public readonly isStaticCall: boolean,
17
18
  public readonly calldata: Fr[],
19
+ public readonly clientInitiatedSimulation: boolean = false,
20
+ public readonly maxDebugLogMemoryReads: number = DEFAULT_MAX_DEBUG_LOG_MEMORY_READS,
18
21
  ) {}
19
22
 
20
- private deriveEnvironmentForNestedCallInternal(targetAddress: AztecAddress, calldata: Fr[], isStaticCall: boolean) {
23
+ private deriveEnvironmentForNestedCallInternal(
24
+ targetAddress: AztecAddress,
25
+ calldata: Fr[],
26
+ isStaticCall: boolean,
27
+ ): AvmExecutionEnvironment {
21
28
  return new AvmExecutionEnvironment(
22
29
  /*address=*/ targetAddress,
23
30
  /*sender=*/ this.address,
@@ -26,6 +33,8 @@ export class AvmExecutionEnvironment {
26
33
  this.globals,
27
34
  isStaticCall,
28
35
  calldata,
36
+ this.clientInitiatedSimulation,
37
+ this.maxDebugLogMemoryReads,
29
38
  );
30
39
  }
31
40
 
@@ -2,7 +2,6 @@ import * as c from '@aztec/constants';
2
2
 
3
3
  import { TypeTag } from './avm_memory_types.js';
4
4
  import { InstructionExecutionError } from './errors.js';
5
- import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
6
5
  import { Opcode } from './serialization/instruction_serialization.js';
7
6
 
8
7
  /** Gas counters in L1, L2, and DA. */
@@ -105,13 +104,13 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
105
104
  [Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
106
105
  [Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0),
107
106
  [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0),
108
- [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, c.AVM_SSTORE_BASE_DA_GAS),
107
+ [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, 0), // DA gas is dynamic
109
108
  [Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0),
110
109
  [Opcode.EMITNOTEHASH]: makeCost(c.AVM_EMITNOTEHASH_BASE_L2_GAS, c.AVM_EMITNOTEHASH_BASE_DA_GAS),
111
110
  [Opcode.NULLIFIEREXISTS]: makeCost(c.AVM_NULLIFIEREXISTS_BASE_L2_GAS, 0),
112
111
  [Opcode.EMITNULLIFIER]: makeCost(c.AVM_EMITNULLIFIER_BASE_L2_GAS, c.AVM_EMITNULLIFIER_BASE_DA_GAS),
113
112
  [Opcode.L1TOL2MSGEXISTS]: makeCost(c.AVM_L1TOL2MSGEXISTS_BASE_L2_GAS, 0),
114
- [Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, 0),
113
+ [Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_BASE_DA_GAS),
115
114
  [Opcode.SENDL2TOL1MSG]: makeCost(c.AVM_SENDL2TOL1MSG_BASE_L2_GAS, c.AVM_SENDL2TOL1MSG_BASE_DA_GAS),
116
115
  [Opcode.GETCONTRACTINSTANCE]: makeCost(c.AVM_GETCONTRACTINSTANCE_BASE_L2_GAS, 0),
117
116
  [Opcode.CALL]: makeCost(c.AVM_CALL_BASE_L2_GAS, 0),
@@ -130,14 +129,16 @@ const BASE_GAS_COSTS: Record<Opcode, Gas> = {
130
129
  const DYNAMIC_GAS_COSTS = new Map<Opcode, Gas>([
131
130
  [Opcode.CALLDATACOPY, makeCost(c.AVM_CALLDATACOPY_DYN_L2_GAS, 0)],
132
131
  [Opcode.RETURNDATACOPY, makeCost(c.AVM_RETURNDATACOPY_DYN_L2_GAS, 0)],
132
+ // TODO: Call and static call based on bytecode length
133
133
  [Opcode.EMITUNENCRYPTEDLOG, makeCost(c.AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS)],
134
- [Opcode.CALL, makeCost(c.AVM_CALL_DYN_L2_GAS, 0)],
135
- [Opcode.STATICCALL, makeCost(c.AVM_STATICCALL_DYN_L2_GAS, 0)],
136
- [Opcode.RETURN, makeCost(c.AVM_RETURN_DYN_L2_GAS, 0)],
137
- [Opcode.REVERT_8, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)],
138
- [Opcode.REVERT_16, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)],
139
- [Opcode.DEBUGLOG, makeCost(c.AVM_DEBUGLOG_DYN_L2_GAS, 0)],
140
134
  [Opcode.TORADIXBE, makeCost(c.AVM_TORADIXBE_DYN_L2_GAS, 0)],
135
+ [Opcode.AND_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
136
+ [Opcode.AND_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
137
+ [Opcode.OR_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
138
+ [Opcode.OR_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
139
+ [Opcode.XOR_8, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
140
+ [Opcode.XOR_16, makeCost(c.AVM_BITWISE_DYN_L2_GAS, 0)],
141
+ [Opcode.SSTORE, makeCost(0, c.AVM_SSTORE_DYN_DA_GAS)],
141
142
  ]);
142
143
 
143
144
  /** Returns the fixed base gas cost for a given opcode. */
@@ -145,35 +146,22 @@ export function getBaseGasCost(opcode: Opcode): Gas {
145
146
  return BASE_GAS_COSTS[opcode];
146
147
  }
147
148
 
148
- export function getDynamicGasCost(opcode: Opcode): Gas {
149
- return DYNAMIC_GAS_COSTS.has(opcode) ? DYNAMIC_GAS_COSTS.get(opcode)! : makeCost(0, 0);
150
- }
151
-
152
- /** Returns the gas cost associated with the memory operations performed. */
153
- export function getMemoryGasCost(args: { reads?: number; writes?: number; indirect?: number }) {
154
- const { reads, writes, indirect } = args;
155
- const indirectCount = Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
156
- const l2MemoryGasCost =
157
- (reads ?? 0) * GAS_COST_CONSTANTS.MEMORY_READ +
158
- (writes ?? 0) * GAS_COST_CONSTANTS.MEMORY_WRITE +
159
- indirectCount * GAS_COST_CONSTANTS.MEMORY_INDIRECT_READ_PENALTY;
160
- return makeGas({ l2Gas: l2MemoryGasCost });
149
+ export function computeAddressingCost(indirectOperandsCount: number, relativeOperandsCount: number): Gas {
150
+ return makeCost(
151
+ (relativeOperandsCount !== 0 ? c.AVM_ADDRESSING_BASE_RESOLUTION_L2_GAS : 0) +
152
+ indirectOperandsCount * c.AVM_ADDRESSING_INDIRECT_L2_GAS +
153
+ relativeOperandsCount * c.AVM_ADDRESSING_RELATIVE_L2_GAS,
154
+ 0,
155
+ );
161
156
  }
162
157
 
163
- /** Constants used in base cost calculations. */
164
- export const GAS_COST_CONSTANTS = {
165
- MEMORY_READ: 10,
166
- MEMORY_INDIRECT_READ_PENALTY: 10,
167
- MEMORY_WRITE: 100,
168
- };
169
-
170
- /** Returns gas cost for an operation on a given type tag based on the base cost per byte. */
171
- export function getGasCostForTypeTag(tag: TypeTag, baseCost: Gas) {
172
- return mulGas(baseCost, getGasCostMultiplierFromTypeTag(tag));
158
+ export function getDynamicGasCost(opcode: Opcode): Gas {
159
+ return DYNAMIC_GAS_COSTS.has(opcode) ? DYNAMIC_GAS_COSTS.get(opcode)! : makeCost(0, 0);
173
160
  }
174
161
 
175
- /** Returns a multiplier based on the size of the type represented by the tag. Throws on uninitialized or invalid. */
176
- function getGasCostMultiplierFromTypeTag(tag: TypeTag) {
162
+ /** Returns a multiplier based on the byte size of the type represented by the integer tag.
163
+ * Used to account for necessary rows in the bitwise trace. Throws on invalid. */
164
+ export function getBitwiseDynamicGasMultiplier(tag: TypeTag) {
177
165
  switch (tag) {
178
166
  case TypeTag.UINT1: // same as u8
179
167
  return 1;
@@ -188,7 +176,7 @@ function getGasCostMultiplierFromTypeTag(tag: TypeTag) {
188
176
  case TypeTag.UINT128:
189
177
  return 16;
190
178
  case TypeTag.FIELD:
191
- return 32;
179
+ return 0; // Field is not allowed for bitwise operations. However we don't fail in gas, since we'll fail in bitwise.
192
180
  case TypeTag.INVALID:
193
181
  throw new InstructionExecutionError(`Invalid tag type for gas cost multiplier: ${TypeTag[tag]}`);
194
182
  }
@@ -68,6 +68,11 @@ export class AvmMachineState {
68
68
  /** Output data must NOT be modified once it is set */
69
69
  private output: Fr[] = [];
70
70
 
71
+ // Metrics only - not needed for execution
72
+ /** instruction counter, including nested calls */
73
+ public instrCounter: number = 0;
74
+ // End metrics only
75
+
71
76
  constructor(gasLeft: Gas);
72
77
  constructor(l2GasLeft: number, daGasLeft: number);
73
78
  constructor(gasLeftOrL2GasLeft: Gas | number, daGasLeft?: number) {
@@ -32,6 +32,9 @@ export abstract class MemoryValue {
32
32
 
33
33
  // Use sparingly.
34
34
  public abstract toBigInt(): bigint;
35
+ public getTag(): TypeTag {
36
+ return TaggedMemory.getTag(this);
37
+ }
35
38
 
36
39
  // To Buffer
37
40
  public abstract toBuffer(): Buffer;
@@ -71,6 +74,7 @@ export abstract class IntegralValue extends MemoryValue {
71
74
  **/
72
75
  function UnsignedIntegerClassFactory(bits: number) {
73
76
  return class NewUintClass extends IntegralValue {
77
+ static readonly bits: number = bits;
74
78
  static readonly mod: bigint = 1n << BigInt(bits);
75
79
  static readonly bitmask: bigint = this.mod - 1n;
76
80
  public readonly n: bigint; // Cannot be private due to TS limitations.
@@ -78,6 +82,7 @@ function UnsignedIntegerClassFactory(bits: number) {
78
82
  public constructor(n: bigint | number) {
79
83
  super();
80
84
  this.n = BigInt(n);
85
+ assert(n >= 0n, `${this.constructor.name} cannot handle negative values: ${n}.`);
81
86
  assert(n < NewUintClass.mod, `Value ${n} is too large for ${this.constructor.name}.`);
82
87
  }
83
88
 
@@ -104,12 +109,20 @@ function UnsignedIntegerClassFactory(bits: number) {
104
109
 
105
110
  // No sign extension.
106
111
  public shr(rhs: NewUintClass): NewUintClass {
107
- // Note that this.n is > 0 by class invariant.
112
+ // Note that this.n is >= 0 by class invariant.
108
113
  return this.build(this.n >> rhs.n);
109
114
  }
110
115
 
111
116
  public shl(rhs: NewUintClass): NewUintClass {
112
- return this.build((this.n << rhs.n) & NewUintClass.bitmask);
117
+ const shiftAmount = rhs.n;
118
+ const bitSize = BigInt(NewUintClass.bits);
119
+
120
+ // Shifting by more than the bit size always results in 0
121
+ if (shiftAmount >= bitSize) {
122
+ return this.build(0n);
123
+ }
124
+
125
+ return this.build((this.n << shiftAmount) & NewUintClass.bitmask);
113
126
  }
114
127
 
115
128
  public and(rhs: NewUintClass): NewUintClass {
@@ -252,7 +265,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
252
265
  public getAs<T>(offset: number): T {
253
266
  assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
254
267
  const word = this._mem.get(offset);
255
- //TaggedMemory.log.trace(`get(${offset}) = ${word}`);
268
+ //TaggedMemory.log.trace(`Memory read: ${offset} -> ${word}`);
256
269
  if (word === undefined) {
257
270
  TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
258
271
  return new Field(0) as T;
@@ -288,7 +301,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
288
301
  public set(offset: number, v: MemoryValue) {
289
302
  assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
290
303
  this._mem.set(offset, v);
291
- //TaggedMemory.log.trace(`set(${offset}, ${v})`);
304
+ //TaggedMemory.log.trace(`Memory write: ${offset} <- ${v}`);
292
305
  }
293
306
 
294
307
  public setSlice(offset: number, slice: MemoryValue[]) {
@@ -319,8 +332,8 @@ export class TaggedMemory implements TaggedMemoryInterface {
319
332
  }
320
333
  }
321
334
 
322
- public checkIsValidMemoryOffsetTag(offset: number) {
323
- this.checkTag(TypeTag.UINT32, offset);
335
+ public static isValidMemoryAddressTag(tag: TypeTag) {
336
+ return tag === TypeTag.UINT32;
324
337
  }
325
338
 
326
339
  public static checkIsIntegralTag(tag: TypeTag) {
@@ -1,27 +1,22 @@
1
- import { MAX_L2_GAS_PER_TX_PUBLIC_PORTION } from '@aztec/constants';
2
1
  import { Fr } from '@aztec/foundation/fields';
3
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
5
  import type { GlobalVariables } from '@aztec/stdlib/tx';
6
6
 
7
7
  import { strict as assert } from 'assert';
8
8
 
9
- import { SideEffectLimitReachedError } from '../side_effect_errors.js';
9
+ import { CheckedPublicExecutionError } from '../public_errors.js';
10
+ import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
10
11
  import { AvmContext } from './avm_context.js';
11
12
  import { AvmContractCallResult } from './avm_contract_call_result.js';
12
13
  import { AvmExecutionEnvironment } from './avm_execution_environment.js';
13
14
  import type { Gas } from './avm_gas.js';
14
15
  import { AvmMachineState } from './avm_machine_state.js';
15
- import { isAvmBytecode } from './bytecode_utils.js';
16
- import {
17
- AvmExecutionError,
18
- AvmRevertReason,
19
- InvalidProgramCounterError,
20
- revertReasonFromExceptionalHalt,
21
- revertReasonFromExplicitRevert,
22
- } from './errors.js';
23
- import type { AvmPersistableStateManager } from './journal/journal.js';
16
+ import type { AvmSimulatorInterface } from './avm_simulator_interface.js';
17
+ import { AvmRevertReason, InvalidProgramCounterError } from './errors.js';
24
18
  import type { Instruction } from './opcodes/instruction.js';
19
+ import { revertReasonFromExceptionalHalt, revertReasonFromExplicitRevert } from './revert_reason.js';
25
20
  import {
26
21
  INSTRUCTION_SET,
27
22
  type InstructionSet,
@@ -33,7 +28,7 @@ type OpcodeTally = {
33
28
  gas: Gas;
34
29
  };
35
30
 
36
- export class AvmSimulator {
31
+ export class AvmSimulator implements AvmSimulatorInterface {
37
32
  private log: Logger;
38
33
  private bytecode: Buffer | undefined;
39
34
  private opcodeTallies: Map<string, OpcodeTally> = new Map();
@@ -53,10 +48,6 @@ export class AvmSimulator {
53
48
  // This will be used by the CALL opcode to create a new simulator. It is required to
54
49
  // avoid a dependency cycle.
55
50
  context.provideSimulator = AvmSimulator.build;
56
- assert(
57
- context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
58
- `Cannot allocate more than ${MAX_L2_GAS_PER_TX_PUBLIC_PORTION} to the AVM for execution.`,
59
- );
60
51
  this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata[0]})`);
61
52
  // Turn on tallying if explicitly enabled or if trace logging
62
53
  if (enableTallying || this.log.isLevelEnabled('trace')) {
@@ -76,7 +67,7 @@ export class AvmSimulator {
76
67
  }
77
68
 
78
69
  public static async create(
79
- stateManager: AvmPersistableStateManager,
70
+ stateManager: PublicPersistableStateManager,
80
71
  address: AztecAddress,
81
72
  sender: AztecAddress,
82
73
  transactionFee: Fr,
@@ -84,6 +75,8 @@ export class AvmSimulator {
84
75
  isStaticCall: boolean,
85
76
  calldata: Fr[],
86
77
  allocatedGas: Gas,
78
+ clientInitiatedSimulation: boolean = false,
79
+ maxDebugLogMemoryReads?: number,
87
80
  ) {
88
81
  const avmExecutionEnv = new AvmExecutionEnvironment(
89
82
  address,
@@ -93,6 +86,8 @@ export class AvmSimulator {
93
86
  globals,
94
87
  isStaticCall,
95
88
  calldata,
89
+ clientInitiatedSimulation,
90
+ maxDebugLogMemoryReads,
96
91
  );
97
92
 
98
93
  const avmMachineState = new AvmMachineState(allocatedGas);
@@ -104,22 +99,13 @@ export class AvmSimulator {
104
99
  * Fetch the bytecode and execute it in the current context.
105
100
  */
106
101
  public async execute(): Promise<AvmContractCallResult> {
107
- let bytecode: Buffer | undefined;
108
- try {
109
- bytecode = await this.context.persistableState.getBytecode(this.context.environment.address);
110
- } catch (err: any) {
111
- if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
112
- this.log.error(`Unknown error thrown by AVM during bytecode retrieval: ${err}`);
113
- throw err;
114
- }
115
- return await this.handleFailureToRetrieveBytecode(
116
- `Bytecode retrieval for contract '${this.context.environment.address}' failed with ${err}. Reverting...`,
117
- );
118
- }
102
+ const bytecode = await this.context.persistableState.getBytecode(this.context.environment.address);
103
+ // getBytecode returns undefined if bytecode is not found or if the limit of contract calls to unique class IDs is reached.
104
+ // If it throws an error that reaches this point, it is a bug.
119
105
 
120
106
  if (!bytecode) {
121
107
  return await this.handleFailureToRetrieveBytecode(
122
- `No bytecode found at: ${this.context.environment.address}. Reverting...`,
108
+ `No bytecode found, or limit encountered for max calls to unique contract class IDs. Contract address: ${this.context.environment.address}. Reverting...`,
123
109
  );
124
110
  }
125
111
 
@@ -138,18 +124,17 @@ export class AvmSimulator {
138
124
  * This method is useful for testing and debugging.
139
125
  */
140
126
  public async executeBytecode(bytecode: Buffer): Promise<AvmContractCallResult> {
141
- const startTotalTime = performance.now();
142
- assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode");
127
+ const timer = new Timer();
143
128
  assert(bytecode.length > 0, "AVM simulator can't execute empty bytecode");
144
129
 
145
130
  this.bytecode = bytecode;
131
+ let instructionName = 'NONE'; // This is used for logging purposes
146
132
 
147
133
  const { machineState } = this.context;
148
134
  const callStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
149
135
  try {
150
136
  // Execute instruction pointed to by the current program counter
151
137
  // continuing until the machine state signifies a halt
152
- let instrCounter = 0;
153
138
  while (!machineState.getHalted()) {
154
139
  // Get the instruction from cache, or deserialize for the first time
155
140
  let cachedInstruction = this.deserializedInstructionsCache.get(machineState.pc);
@@ -165,15 +150,14 @@ export class AvmSimulator {
165
150
  if (this.log.isLevelEnabled('trace')) {
166
151
  // Skip this entirely to avoid toStringing etc if trace is not enabled
167
152
  this.log.trace(
168
- `[PC:${machineState.pc}] [IC:${instrCounter}] ${instruction.toString()} (gasLeft l2=${
153
+ `[PC:${machineState.pc}] [IC:${machineState.instrCounter}] ${instruction.toString()} (gasLeft l2=${
169
154
  machineState.l2GasLeft
170
155
  } da=${machineState.daGasLeft})`,
171
156
  );
172
157
  }
173
- instrCounter++;
174
-
175
158
  machineState.nextPc = machineState.pc + bytesRead;
176
159
 
160
+ instructionName = instruction.constructor.name;
177
161
  // Execute the instruction.
178
162
  // Normal returns and reverts will return normally here.
179
163
  // "Exceptional halts" will throw.
@@ -183,6 +167,8 @@ export class AvmSimulator {
183
167
  machineState.pc += bytesRead;
184
168
  }
185
169
 
170
+ machineState.instrCounter++;
171
+
186
172
  // gas used by this instruction - used for profiling/tallying
187
173
  const gasUsed: Gas = {
188
174
  l2Gas: instrStartGas.l2Gas - machineState.l2GasLeft,
@@ -199,35 +185,33 @@ export class AvmSimulator {
199
185
  const output = machineState.getOutput();
200
186
  const reverted = machineState.getReverted();
201
187
  const revertReason = reverted ? await revertReasonFromExplicitRevert(output, this.context) : undefined;
202
- const results = new AvmContractCallResult(reverted, output, machineState.gasLeft, revertReason);
188
+ const results = new AvmContractCallResult(
189
+ reverted,
190
+ output,
191
+ machineState.gasLeft,
192
+ revertReason,
193
+ machineState.instrCounter,
194
+ );
203
195
  this.log.debug(`Context execution results: ${results.toString()}`);
204
196
  const totalGasUsed: Gas = {
205
197
  l2Gas: callStartGas.l2Gas - machineState.l2GasLeft,
206
198
  daGas: callStartGas.daGas - machineState.daGasLeft,
207
199
  };
208
- this.log.debug(`Executed ${instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
200
+ this.log.debug(`Executed ${machineState.instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
209
201
 
210
202
  this.tallyPrintFunction();
211
203
 
212
- const endTotalTime = performance.now();
213
- const totalTime = endTotalTime - startTotalTime;
214
- this.log.debug(`Core AVM simulation took ${totalTime}ms`);
204
+ this.log.debug(`Core AVM simulation took ${timer.ms()}ms`);
215
205
 
216
206
  // Return results for processing by calling context
217
207
  return results;
218
208
  } catch (err: any) {
219
- this.log.verbose('Exceptional halt (revert by something other than REVERT opcode)');
220
- // FIXME: weird that we have to do this OutOfGasError check because:
221
- // 1. OutOfGasError is an AvmExecutionError, so that check should cover both
222
- // 2. We should at least be able to do instanceof OutOfGasError instead of checking the constructor name
223
- if (
224
- !(
225
- err.constructor.name == 'OutOfGasError' ||
226
- err instanceof AvmExecutionError ||
227
- err instanceof SideEffectLimitReachedError
228
- )
229
- ) {
230
- this.log.error(`Unknown error thrown by AVM: ${err}`);
209
+ this.log.info(
210
+ `Exceptional halt (revert by something other than REVERT opcode) for instruction
211
+ ${instructionName} at pc ${machineState.pc} and instruction counter ${machineState.instrCounter}`,
212
+ );
213
+ if (!(err instanceof CheckedPublicExecutionError)) {
214
+ this.log.error(`Unchecked/unknown error thrown by AVM. This is a bug. Error: ${err}`);
231
215
  throw err;
232
216
  }
233
217
 
@@ -235,7 +219,13 @@ export class AvmSimulator {
235
219
  // Exceptional halts consume all allocated gas
236
220
  const noGasLeft = { l2Gas: 0, daGas: 0 };
237
221
  // Note: "exceptional halts" cannot return data, hence [].
238
- const results = new AvmContractCallResult(/*reverted=*/ true, /*output=*/ [], noGasLeft, revertReason);
222
+ const results = new AvmContractCallResult(
223
+ /*reverted=*/ true,
224
+ /*output=*/ [],
225
+ noGasLeft,
226
+ revertReason,
227
+ machineState.instrCounter,
228
+ );
239
229
  this.log.debug(`Context execution results: ${results.toString()}`);
240
230
 
241
231
  this.tallyPrintFunction();
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Interface for AvmSimulator to break the circular dependency between avm_context.ts and avm_simulator.ts
3
+ */
4
+ export interface AvmSimulatorInterface {
5
+ execute(): Promise<any>; // Using any here to avoid importing AvmContractCallResult
6
+ executeBytecode(bytecode: Buffer): Promise<any>;
7
+ getBytecode(): Buffer | undefined;
8
+ }
@@ -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/fields';
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);
@@ -130,22 +122,12 @@ export class OutOfGasError extends AvmExecutionError {
130
122
  }
131
123
 
132
124
  /**
133
- * Error is thrown when the supplied points length is not a multiple of 3. Specific for MSM opcode.
125
+ * Error is thrown when one of the supplied points does not lie on the Grumpkin curve. Specific for ECADD opcode.
134
126
  */
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.
144
- */
145
- export class MSMPointNotOnCurveError extends AvmExecutionError {
146
- constructor(point: Point) {
147
- super(`Point ${point.toString()} is not on the curve.`);
148
- this.name = 'MSMPointNotOnCurveError';
127
+ export class EcAddPointNotOnCurveError extends AvmExecutionError {
128
+ constructor(pointIndex: number, point: Point) {
129
+ super(`EcAdd point${pointIndex} (${point.toString()}) is not on the curve.`);
130
+ this.name = 'EcAddPointNotOnCurveError';
149
131
  }
150
132
  }
151
133
 
@@ -179,54 +161,3 @@ export class AvmRevertReason extends ExecutionError {
179
161
  super(message, failingFunction, noirCallStack, options);
180
162
  }
181
163
  }
182
-
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
- /**
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
229
- */
230
- export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
231
- return await createRevertReason('Assertion failed: ', revertData, context);
232
- }