@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.0208eb9

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 (528) 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 +15 -7
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +14 -19
  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 +41 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
  30. package/dest/private/acvm_wasm.d.ts +16 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/acvm_wasm.js +65 -0
  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 +109 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +212 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -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 +10 -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} +8 -5
  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 +17 -18
  99. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/accrued_substate.js +58 -55
  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 +33 -23
  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 +122 -0
  198. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  199. package/dest/public/fixtures/opcode_spammer.js +1653 -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 +54 -103
  225. package/dest/public/public_db_sources.d.ts.map +1 -1
  226. package/dest/public/public_db_sources.js +222 -195
  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 +28 -38
  234. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  235. package/dest/public/public_processor/public_processor.js +576 -136
  236. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
  237. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  238. package/dest/public/public_processor/public_processor_metrics.js +29 -46
  239. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -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 +23 -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 +14 -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 +25 -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 +75 -95
  266. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -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 +220 -207
  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 +24 -69
  279. package/dest/public/side_effect_trace.d.ts.map +1 -1
  280. package/dest/public/side_effect_trace.js +74 -124
  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 +170 -0
  293. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  294. package/dest/public/state_manager/state_manager.js +402 -0
  295. package/dest/public/test_executor_metrics.d.ts +56 -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 +21 -35
  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} +57 -28
  319. package/src/private/acvm_wasm.ts +76 -0
  320. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  321. package/src/private/circuit_recording/circuit_recorder.ts +263 -0
  322. package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
  323. package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -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} +13 -10
  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 +81 -48
  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 +49 -23
  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 +1721 -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 +290 -260
  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 +257 -179
  388. package/src/public/public_processor/public_processor_metrics.ts +18 -46
  389. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
  390. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -0
  391. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  392. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
  393. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  394. package/src/public/public_tx_simulator/factories.ts +43 -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 +179 -199
  398. package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
  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 +99 -322
  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 +569 -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.js +0 -62
  456. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  457. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  458. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  459. package/dest/private/providers/factory.d.ts +0 -12
  460. package/dest/private/providers/factory.d.ts.map +0 -1
  461. package/dest/private/providers/simulation_provider.d.ts +0 -19
  462. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  463. package/dest/private/providers/simulation_provider.js +0 -24
  464. package/dest/private/simulator.d.ts +0 -34
  465. package/dest/private/simulator.d.ts.map +0 -1
  466. package/dest/private/simulator.js +0 -76
  467. package/dest/private/unconstrained_execution.d.ts +0 -10
  468. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  469. package/dest/private/unconstrained_execution.js +0 -27
  470. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  471. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  472. package/dest/private/unconstrained_execution_oracle.js +0 -258
  473. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  474. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  475. package/dest/public/avm/bytecode_utils.js +0 -17
  476. package/dest/public/avm/fixtures/index.d.ts +0 -84
  477. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  478. package/dest/public/avm/fixtures/index.js +0 -175
  479. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  480. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  481. package/dest/public/avm/journal/index.d.ts +0 -2
  482. package/dest/public/avm/journal/index.d.ts.map +0 -1
  483. package/dest/public/avm/journal/index.js +0 -1
  484. package/dest/public/avm/journal/journal.d.ts +0 -209
  485. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  486. package/dest/public/avm/journal/journal.js +0 -486
  487. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  488. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  489. package/dest/public/bytecode_errors.d.ts +0 -4
  490. package/dest/public/bytecode_errors.d.ts.map +0 -1
  491. package/dest/public/bytecode_errors.js +0 -6
  492. package/dest/public/execution.d.ts +0 -108
  493. package/dest/public/execution.d.ts.map +0 -1
  494. package/dest/public/execution.js +0 -9
  495. package/dest/public/tx_contract_cache.d.ts +0 -41
  496. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  497. package/dest/public/tx_contract_cache.js +0 -49
  498. package/dest/test/utils.d.ts +0 -13
  499. package/dest/test/utils.d.ts.map +0 -1
  500. package/dest/test/utils.js +0 -22
  501. package/src/common/db_interfaces.ts +0 -94
  502. package/src/common/debug_fn_name.ts +0 -18
  503. package/src/common/message_load_oracle_inputs.ts +0 -15
  504. package/src/private/acvm/oracle/index.ts +0 -16
  505. package/src/private/acvm/oracle/oracle.ts +0 -455
  506. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  507. package/src/private/execution_data_provider.ts +0 -323
  508. package/src/private/execution_note_cache.ts +0 -217
  509. package/src/private/hashed_values_cache.ts +0 -55
  510. package/src/private/index.ts +0 -16
  511. package/src/private/pick_notes.ts +0 -141
  512. package/src/private/private_execution.ts +0 -151
  513. package/src/private/private_execution_oracle.ts +0 -614
  514. package/src/private/providers/acvm_wasm.ts +0 -63
  515. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  516. package/src/private/providers/simulation_provider.ts +0 -45
  517. package/src/private/simulator.ts +0 -147
  518. package/src/private/unconstrained_execution.ts +0 -50
  519. package/src/private/unconstrained_execution_oracle.ts +0 -373
  520. package/src/public/avm/bytecode_utils.ts +0 -17
  521. package/src/public/avm/fixtures/index.ts +0 -296
  522. package/src/public/avm/journal/index.ts +0 -1
  523. package/src/public/avm/journal/journal.ts +0 -742
  524. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  525. package/src/public/bytecode_errors.ts +0 -6
  526. package/src/public/execution.ts +0 -140
  527. package/src/public/tx_contract_cache.ts +0 -69
  528. package/src/test/utils.ts +0 -36
@@ -1,3 +1,7 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+
3
+ import { strict as assert } from 'assert';
4
+
1
5
  import type { AvmContext } from '../avm_context.js';
2
6
  import { Field, TaggedMemory, TypeTag, Uint32 } from '../avm_memory_types.js';
3
7
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
@@ -11,55 +15,56 @@ export class Set extends Instruction {
11
15
 
12
16
  public static readonly wireFormat8: OperandType[] = [
13
17
  OperandType.UINT8, // opcode
14
- OperandType.UINT8, // indirect
18
+ OperandType.UINT8, // addressing_mode
15
19
  OperandType.UINT8, // dstOffset
16
- OperandType.UINT8, // tag
20
+ OperandType.TAG, // tag
17
21
  OperandType.UINT8, // const (value)
18
22
  ];
19
23
  public static readonly wireFormat16: OperandType[] = [
20
24
  OperandType.UINT8, // opcode
21
- OperandType.UINT8, // indirect
25
+ OperandType.UINT8, // addressing_mode
22
26
  OperandType.UINT16, // dstOffset
23
- OperandType.UINT8, // tag
27
+ OperandType.TAG, // tag
24
28
  OperandType.UINT16, // const (value)
25
29
  ];
26
30
  public static readonly wireFormat32: OperandType[] = [
27
31
  OperandType.UINT8, // opcode
28
- OperandType.UINT8, // indirect
32
+ OperandType.UINT8, // addressing_mode
29
33
  OperandType.UINT16, // dstOffset
30
- OperandType.UINT8, // tag
34
+ OperandType.TAG, // tag
31
35
  OperandType.UINT32, // const (value)
32
36
  ];
33
37
  public static readonly wireFormat64: OperandType[] = [
34
38
  OperandType.UINT8, // opcode
35
- OperandType.UINT8, // indirect
39
+ OperandType.UINT8, // addressing_mode
36
40
  OperandType.UINT16, // dstOffset
37
- OperandType.UINT8, // tag
41
+ OperandType.TAG, // tag
38
42
  OperandType.UINT64, // const (value)
39
43
  ];
40
44
  public static readonly wireFormat128: OperandType[] = [
41
45
  OperandType.UINT8, // opcode
42
- OperandType.UINT8, // indirect
46
+ OperandType.UINT8, // addressing_mode
43
47
  OperandType.UINT16, // dstOffset
44
- OperandType.UINT8, // tag
48
+ OperandType.TAG, // tag
45
49
  OperandType.UINT128, // const (value)
46
50
  ];
47
51
  public static readonly wireFormatFF: OperandType[] = [
48
52
  OperandType.UINT8, // opcode
49
- OperandType.UINT8, // indirect
53
+ OperandType.UINT8, // addressing_mode
50
54
  OperandType.UINT16, // dstOffset
51
- OperandType.UINT8, // tag
55
+ OperandType.TAG, // tag
52
56
  OperandType.FF, // const (value)
53
57
  ];
54
58
 
55
59
  constructor(
56
- private indirect: number,
60
+ private addressingMode: number,
57
61
  private dstOffset: number,
58
62
  private inTag: number,
59
63
  private value: bigint | number,
60
64
  ) {
61
65
  super();
62
- TaggedMemory.checkIsValidTag(inTag);
66
+ assert(this.value >= 0, `Value ${this.value} is negative`);
67
+ assert(this.value < Fr.MODULUS, `Value ${this.value} is larger than Fr.MODULUS`);
63
68
  }
64
69
 
65
70
  public async execute(context: AvmContext): Promise<void> {
@@ -67,10 +72,13 @@ export class Set extends Instruction {
67
72
  const res = TaggedMemory.buildFromTagTruncating(this.value, this.inTag);
68
73
 
69
74
  const memory = context.machineState.memory;
70
- context.machineState.consumeGas(this.gasCost());
75
+ const addressing = Addressing.fromWire(this.addressingMode);
76
+
77
+ context.machineState.consumeGas(
78
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
79
+ );
71
80
 
72
81
  const operands = [this.dstOffset];
73
- const addressing = Addressing.fromWire(this.indirect, operands.length);
74
82
  const [dstOffset] = addressing.resolve(operands, memory);
75
83
  memory.set(dstOffset, res);
76
84
  }
@@ -85,27 +93,34 @@ export class Cast extends Instruction {
85
93
  OperandType.UINT8,
86
94
  OperandType.UINT8,
87
95
  OperandType.UINT8,
88
- OperandType.UINT8,
96
+ OperandType.TAG,
89
97
  ];
90
98
  static readonly wireFormat16 = [
91
99
  OperandType.UINT8,
92
100
  OperandType.UINT8,
93
101
  OperandType.UINT16,
94
102
  OperandType.UINT16,
95
- OperandType.UINT8,
103
+ OperandType.TAG,
96
104
  ];
97
105
 
98
- constructor(private indirect: number, private srcOffset: number, private dstOffset: number, private dstTag: number) {
106
+ constructor(
107
+ private addressingMode: number,
108
+ private srcOffset: number,
109
+ private dstOffset: number,
110
+ private dstTag: number,
111
+ ) {
99
112
  super();
100
- TaggedMemory.checkIsValidTag(dstTag);
101
113
  }
102
114
 
103
115
  public async execute(context: AvmContext): Promise<void> {
104
116
  const memory = context.machineState.memory;
105
- context.machineState.consumeGas(this.gasCost());
117
+ const addressing = Addressing.fromWire(this.addressingMode);
118
+
119
+ context.machineState.consumeGas(
120
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
121
+ );
106
122
 
107
123
  const operands = [this.srcOffset, this.dstOffset];
108
- const addressing = Addressing.fromWire(this.indirect, operands.length);
109
124
  const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
110
125
 
111
126
  const a = memory.get(srcOffset);
@@ -134,16 +149,23 @@ export class Mov extends Instruction {
134
149
  OperandType.UINT16,
135
150
  ];
136
151
 
137
- constructor(private indirect: number, private srcOffset: number, private dstOffset: number) {
152
+ constructor(
153
+ private addressingMode: number,
154
+ private srcOffset: number,
155
+ private dstOffset: number,
156
+ ) {
138
157
  super();
139
158
  }
140
159
 
141
160
  public async execute(context: AvmContext): Promise<void> {
142
161
  const memory = context.machineState.memory;
143
- context.machineState.consumeGas(this.gasCost());
162
+ const addressing = Addressing.fromWire(this.addressingMode);
163
+
164
+ context.machineState.consumeGas(
165
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
166
+ );
144
167
 
145
168
  const operands = [this.srcOffset, this.dstOffset];
146
- const addressing = Addressing.fromWire(this.indirect, operands.length);
147
169
  const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
148
170
  const a = memory.get(srcOffset);
149
171
  memory.set(dstOffset, a);
@@ -163,9 +185,9 @@ export class CalldataCopy extends Instruction {
163
185
  ];
164
186
 
165
187
  constructor(
166
- private indirect: number,
167
- private cdStartOffset: number,
188
+ private addressingMode: number,
168
189
  private copySizeOffset: number,
190
+ private cdStartOffset: number,
169
191
  private dstOffset: number,
170
192
  ) {
171
193
  super();
@@ -173,14 +195,19 @@ export class CalldataCopy extends Instruction {
173
195
 
174
196
  public async execute(context: AvmContext): Promise<void> {
175
197
  const memory = context.machineState.memory;
176
- const operands = [this.cdStartOffset, this.copySizeOffset, this.dstOffset];
177
- const addressing = Addressing.fromWire(this.indirect, operands.length);
178
- const [cdStartOffset, copySizeOffset, dstOffset] = addressing.resolve(operands, memory);
198
+ const addressing = Addressing.fromWire(this.addressingMode);
199
+
200
+ context.machineState.consumeGas(
201
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
202
+ );
203
+
204
+ const operands = [this.copySizeOffset, this.cdStartOffset, this.dstOffset];
205
+ const [copySizeOffset, cdStartOffset, dstOffset] = addressing.resolve(operands, memory);
179
206
 
180
207
  memory.checkTags(TypeTag.UINT32, cdStartOffset, copySizeOffset);
181
208
  const cdStart = memory.get(cdStartOffset).toNumber();
182
209
  const copySize = memory.get(copySizeOffset).toNumber();
183
- context.machineState.consumeGas(this.gasCost(copySize));
210
+ context.machineState.consumeGas(this.dynamicGasCost(copySize));
184
211
 
185
212
  // Values which are out-of-range of the calldata array will be set with Field(0);
186
213
  const slice = context.environment.calldata.slice(cdStart, cdStart + copySize).map(f => new Field(f));
@@ -197,18 +224,25 @@ export class ReturndataSize extends Instruction {
197
224
  // Informs (de)serialization. See Instruction.deserialize.
198
225
  static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
199
226
 
200
- constructor(private indirect: number, private dstOffset: number) {
227
+ constructor(
228
+ private addressingMode: number,
229
+ private dstOffset: number,
230
+ ) {
201
231
  super();
202
232
  }
203
233
 
204
234
  public async execute(context: AvmContext): Promise<void> {
205
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
+ );
241
+
206
242
  const operands = [this.dstOffset];
207
- const addressing = Addressing.fromWire(this.indirect, operands.length);
208
243
  const [dstOffset] = addressing.resolve(operands, memory);
209
- context.machineState.consumeGas(this.gasCost());
210
244
 
211
- memory.set(dstOffset, new Uint32(context.machineState.nestedReturndata.length));
245
+ memory.set(dstOffset, new Uint32(context.machineState.nestedReturndata.length()));
212
246
  }
213
247
  }
214
248
 
@@ -225,9 +259,9 @@ export class ReturndataCopy extends Instruction {
225
259
  ];
226
260
 
227
261
  constructor(
228
- private indirect: number,
229
- private rdStartOffset: number,
262
+ private addressingMode: number,
230
263
  private copySizeOffset: number,
264
+ private rdStartOffset: number,
231
265
  private dstOffset: number,
232
266
  ) {
233
267
  super();
@@ -235,14 +269,19 @@ export class ReturndataCopy extends Instruction {
235
269
 
236
270
  public async execute(context: AvmContext): Promise<void> {
237
271
  const memory = context.machineState.memory;
238
- const operands = [this.rdStartOffset, this.copySizeOffset, this.dstOffset];
239
- const addressing = Addressing.fromWire(this.indirect, operands.length);
240
- const [rdStartOffset, copySizeOffset, dstOffset] = addressing.resolve(operands, memory);
272
+ const addressing = Addressing.fromWire(this.addressingMode);
273
+
274
+ context.machineState.consumeGas(
275
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
276
+ );
277
+
278
+ const operands = [this.copySizeOffset, this.rdStartOffset, this.dstOffset];
279
+ const [copySizeOffset, rdStartOffset, dstOffset] = addressing.resolve(operands, memory);
241
280
 
242
281
  memory.checkTags(TypeTag.UINT32, rdStartOffset, copySizeOffset);
243
- const rdStart = memory.get(rdStartOffset).toNumber();
244
282
  const copySize = memory.get(copySizeOffset).toNumber();
245
- context.machineState.consumeGas(this.gasCost(copySize));
283
+ const rdStart = memory.get(rdStartOffset).toNumber();
284
+ context.machineState.consumeGas(this.dynamicGasCost(copySize));
246
285
 
247
286
  // Values which are out-of-range of the returndata array will be set with Field(0);
248
287
  const slice = context.machineState.nestedReturndata.slice(rdStart, rdStart + copySize).map(f => new Field(f));
@@ -1,4 +1,4 @@
1
- import { applyStringFormatting, createLogger } from '@aztec/foundation/log';
1
+ import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
2
2
 
3
3
  import type { AvmContext } from '../avm_context.js';
4
4
  import { TypeTag } from '../avm_memory_types.js';
@@ -15,6 +15,7 @@ export class DebugLog extends Instruction {
15
15
  static readonly wireFormat: OperandType[] = [
16
16
  OperandType.UINT8, // Opcode
17
17
  OperandType.UINT8, // Indirect
18
+ OperandType.UINT16, // level memory address
18
19
  OperandType.UINT16, // message memory address
19
20
  OperandType.UINT16, // fields memory address
20
21
  OperandType.UINT16, // fields size address
@@ -22,7 +23,8 @@ export class DebugLog extends Instruction {
22
23
  ];
23
24
 
24
25
  constructor(
25
- private indirect: number,
26
+ private addressingMode: number,
27
+ private levelOffset: number,
26
28
  private messageOffset: number,
27
29
  private fieldsOffset: number,
28
30
  private fieldsSizeOffset: number,
@@ -33,28 +35,68 @@ export class DebugLog extends Instruction {
33
35
 
34
36
  public async execute(context: AvmContext): Promise<void> {
35
37
  const memory = context.machineState.memory;
36
- const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
37
- const addressing = Addressing.fromWire(this.indirect, operands.length);
38
- const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
38
+ const addressing = Addressing.fromWire(this.addressingMode);
39
39
 
40
- memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
41
- const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
40
+ context.machineState.consumeGas(
41
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
42
+ );
42
43
 
43
- const rawMessage = memory.getSlice(messageOffset, this.messageSize);
44
- const fields = memory.getSlice(fieldsOffset, fieldsSize);
44
+ const operands = [this.levelOffset, this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
45
+ const [levelOffset, messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
45
46
 
46
- memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
47
- memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
47
+ // DebugLog is a no-op except unless the config is set to collect debug logs.
48
+ // Note that we still do address resolution and basic tag-checking (above)
49
+ // To avoid a special-case in the witness generator and circuit.
50
+ if (context.environment.config.collectDebugLogs) {
51
+ memory.checkTag(TypeTag.UINT8, levelOffset);
52
+ const levelNumber = memory.get(levelOffset).toNumber();
53
+ memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
54
+ const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
48
55
 
49
- context.machineState.consumeGas(this.gasCost(this.messageSize + fieldsSize));
56
+ const memoryReads = 1 /* level */ + 1 /* fieldsSize */ + this.messageSize /* message */ + fieldsSize; /* fields */
57
+ if (
58
+ context.persistableState.getDebugLogMemoryReads() + memoryReads >
59
+ context.environment.config.collectionLimits.maxDebugLogMemoryReads
60
+ ) {
61
+ // Regular error on purpose: this is not a recoverable error.
62
+ throw new Error(
63
+ `Max debug log memory reads exceeded: ${context.persistableState.getDebugLogMemoryReads() + memoryReads} > ${context.environment.config.collectionLimits.maxDebugLogMemoryReads}`,
64
+ );
65
+ }
66
+ context.persistableState.writeDebugLogMemoryReads(memoryReads);
50
67
 
51
- // Interpret str<N> = [u8; N] to string.
52
- const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
53
- const formattedStr = applyStringFormatting(
54
- messageAsStr,
55
- fields.map(field => field.toFr()),
56
- );
68
+ const rawMessage = memory.getSlice(messageOffset, this.messageSize);
69
+ const fields = memory.getSlice(fieldsOffset, fieldsSize);
70
+
71
+ memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
72
+ memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
73
+
74
+ // Interpret str<N> = [u8; N] to string.
75
+ const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
76
+
77
+ if (!LogLevels[levelNumber]) {
78
+ // Regular error on purpose: this is not a recoverable error.
79
+ throw new Error(`Invalid debug log level: ${levelNumber}`);
80
+ }
81
+
82
+ const level = LogLevels[levelNumber];
83
+
84
+ context.persistableState.writeDebugLog(
85
+ context.environment.address,
86
+ level,
87
+ messageAsStr,
88
+ fields.map(field => field.toFr()),
89
+ );
90
+
91
+ // Skips string formatting if the level is disabled.
92
+ if (DebugLog.logger.isLevelEnabled(level)) {
93
+ const formattedStr = applyStringFormatting(
94
+ messageAsStr,
95
+ fields.map(field => field.toFr()),
96
+ );
57
97
 
58
- DebugLog.logger.verbose(formattedStr);
98
+ DebugLog.logger[level](formattedStr);
99
+ }
100
+ }
59
101
  }
60
102
  }
@@ -5,7 +5,9 @@ import { Opcode, OperandType } from '../serialization/instruction_serialization.
5
5
  import { Addressing } from './addressing_mode.js';
6
6
  import { Instruction } from './instruction.js';
7
7
 
8
- abstract class BaseStorageInstruction extends Instruction {
8
+ export class SStore extends Instruction {
9
+ static readonly type: string = 'SSTORE';
10
+ static readonly opcode = Opcode.SSTORE;
9
11
  // Informs (de)serialization. See Instruction.deserialize.
10
12
  public static readonly wireFormat: OperandType[] = [
11
13
  OperandType.UINT8,
@@ -14,18 +16,13 @@ abstract class BaseStorageInstruction extends Instruction {
14
16
  OperandType.UINT16,
15
17
  ];
16
18
 
17
- constructor(protected indirect: number, protected aOffset: number, protected bOffset: number) {
19
+ constructor(
20
+ private addressingMode: number,
21
+ private srcOffset: number,
22
+ private slotOffset: number,
23
+ ) {
18
24
  super();
19
25
  }
20
- }
21
-
22
- export class SStore extends BaseStorageInstruction {
23
- static readonly type: string = 'SSTORE';
24
- static readonly opcode = Opcode.SSTORE;
25
-
26
- constructor(indirect: number, srcOffset: number, slotOffset: number) {
27
- super(indirect, srcOffset, slotOffset);
28
- }
29
26
 
30
27
  public async execute(context: AvmContext): Promise<void> {
31
28
  if (context.environment.isStaticCall) {
@@ -33,39 +30,66 @@ export class SStore extends BaseStorageInstruction {
33
30
  }
34
31
 
35
32
  const memory = context.machineState.memory;
36
- context.machineState.consumeGas(this.gasCost());
33
+ const addressing = Addressing.fromWire(this.addressingMode);
34
+
35
+ context.machineState.consumeGas(
36
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
37
+ );
37
38
 
38
- const operands = [this.aOffset, this.bOffset];
39
- const addressing = Addressing.fromWire(this.indirect, operands.length);
39
+ const operands = [this.srcOffset, this.slotOffset];
40
40
  const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
41
+ // We read before tag checking since it's needed for gas cost calculation
42
+ const slot = memory.get(slotOffset).toFr();
43
+
44
+ context.machineState.consumeGas(
45
+ this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
46
+ );
47
+
41
48
  memory.checkTag(TypeTag.FIELD, slotOffset);
42
49
  memory.checkTag(TypeTag.FIELD, srcOffset);
43
50
 
44
- const slot = memory.get(slotOffset).toFr();
45
51
  const value = memory.get(srcOffset).toFr();
46
52
  await context.persistableState.writeStorage(context.environment.address, slot, value);
47
53
  }
48
54
  }
49
55
 
50
- export class SLoad extends BaseStorageInstruction {
56
+ export class SLoad extends Instruction {
51
57
  static readonly type: string = 'SLOAD';
52
58
  static readonly opcode = Opcode.SLOAD;
59
+ // Informs (de)serialization. See Instruction.deserialize.
60
+ public static readonly wireFormat: OperandType[] = [
61
+ OperandType.UINT8,
62
+ OperandType.UINT8,
63
+ OperandType.UINT16,
64
+ OperandType.UINT16,
65
+ OperandType.UINT16,
66
+ ];
53
67
 
54
- constructor(indirect: number, slotOffset: number, dstOffset: number) {
55
- super(indirect, slotOffset, dstOffset);
68
+ constructor(
69
+ private addressingMode: number,
70
+ private slotOffset: number,
71
+ private contractAddressOffset: number,
72
+ private dstOffset: number,
73
+ ) {
74
+ super();
56
75
  }
57
76
 
58
77
  public async execute(context: AvmContext): Promise<void> {
59
78
  const memory = context.machineState.memory;
60
- context.machineState.consumeGas(this.gasCost());
79
+ const addressing = Addressing.fromWire(this.addressingMode);
80
+
81
+ context.machineState.consumeGas(
82
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
83
+ );
61
84
 
62
- const operands = [this.aOffset, this.bOffset];
63
- const addressing = Addressing.fromWire(this.indirect, operands.length);
64
- const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
85
+ const operands = [this.slotOffset, this.contractAddressOffset, this.dstOffset];
86
+ const [slotOffset, contractAddressOffset, dstOffset] = addressing.resolve(operands, memory);
65
87
  memory.checkTag(TypeTag.FIELD, slotOffset);
88
+ memory.checkTag(TypeTag.FIELD, contractAddressOffset);
66
89
 
67
90
  const slot = memory.get(slotOffset).toFr();
68
- const value = await context.persistableState.readStorage(context.environment.address, slot);
91
+ const contractAddress = memory.get(contractAddressOffset).toAztecAddress();
92
+ const value = await context.persistableState.readStorage(contractAddress, slot);
69
93
  memory.set(dstOffset, new Field(value));
70
94
  }
71
95
  }
@@ -0,0 +1,58 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+
3
+ import type { AvmContext } from './avm_context.js';
4
+ import { type AvmExecutionError, AvmRevertReason } from './errors.js';
5
+
6
+ async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
7
+ // We drop the returnPc information.
8
+ const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
9
+
10
+ // If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
11
+ let nestedError = undefined;
12
+ const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
13
+ if (
14
+ context.machineState.collectedRevertInfo &&
15
+ revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
16
+ ) {
17
+ nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
18
+ message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
19
+ }
20
+
21
+ const { functionSelector, functionName } = await context.persistableState.getPublicFunctionSelectorAndName(
22
+ context.environment,
23
+ );
24
+
25
+ return new AvmRevertReason(
26
+ message,
27
+ /*failingFunction=*/ {
28
+ contractAddress: context.environment.address,
29
+ functionSelector,
30
+ functionName,
31
+ },
32
+ /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
33
+ /*options=*/ { cause: nestedError },
34
+ );
35
+ }
36
+
37
+ /**
38
+ * Create a "revert reason" error for an exceptional halt.
39
+ *
40
+ * @param haltingError - the lower-level error causing the exceptional halt
41
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
42
+ */
43
+ export async function revertReasonFromExceptionalHalt(
44
+ haltingError: AvmExecutionError,
45
+ context: AvmContext,
46
+ ): Promise<AvmRevertReason> {
47
+ return await createRevertReason(haltingError.message, [], context);
48
+ }
49
+
50
+ /**
51
+ * Create a "revert reason" error for an explicit revert (a root cause).
52
+ *
53
+ * @param revertData - output data of the explicit REVERT instruction
54
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
55
+ */
56
+ export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
57
+ return await createRevertReason('Assertion failed: ', revertData, context);
58
+ }
@@ -2,7 +2,10 @@
2
2
  * A Buffer-like class that automatically advances the position.
3
3
  */
4
4
  export class BufferCursor {
5
- constructor(private _buffer: Buffer, private _position: number = 0) {}
5
+ constructor(
6
+ private _buffer: Buffer,
7
+ private _position: number = 0,
8
+ ) {}
6
9
 
7
10
  public position(): number {
8
11
  return this._position;