@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.017a351

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 (533) hide show
  1. package/README.md +12 -4
  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 +67 -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 +29 -37
  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 +33 -43
  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 +64 -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/account_proof_fetcher.d.ts +2 -0
  84. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  85. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  86. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  87. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  88. package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
  89. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +9 -6
  90. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  91. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +53 -15
  92. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  93. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  94. package/dest/public/avm/fixtures/initializers.js +45 -0
  95. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  96. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  97. package/dest/public/avm/fixtures/utils.js +99 -0
  98. package/dest/public/avm/index.d.ts +1 -3
  99. package/dest/public/avm/index.d.ts.map +1 -1
  100. package/dest/public/avm/index.js +0 -2
  101. package/dest/public/avm/opcodes/accrued_substate.d.ts +18 -19
  102. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/accrued_substate.js +61 -59
  104. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  105. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  107. package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
  108. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  110. package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
  111. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/bitwise.js +22 -29
  113. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  114. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/comparators.js +3 -3
  116. package/dest/public/avm/opcodes/contract.d.ts +5 -5
  117. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/contract.js +16 -13
  119. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  120. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/control_flow.js +13 -11
  122. package/dest/public/avm/opcodes/conversion.d.ts +4 -3
  123. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/conversion.js +270 -6
  125. package/dest/public/avm/opcodes/ec_add.d.ts +3 -5
  126. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/ec_add.js +28 -33
  128. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  129. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/environment_getters.js +20 -22
  131. package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
  132. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/external_calls.js +52 -46
  134. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  135. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  136. package/dest/public/avm/opcodes/hashing.js +24 -19
  137. package/dest/public/avm/opcodes/index.d.ts +1 -1
  138. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  139. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  140. package/dest/public/avm/opcodes/instruction.js +23 -19
  141. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  142. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  143. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  144. package/dest/public/avm/opcodes/memory.d.ts +15 -15
  145. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  146. package/dest/public/avm/opcodes/memory.js +52 -48
  147. package/dest/public/avm/opcodes/misc.d.ts +4 -3
  148. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  149. package/dest/public/avm/opcodes/misc.js +42 -17
  150. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  151. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  152. package/dest/public/avm/opcodes/storage.js +39 -27
  153. package/dest/public/avm/revert_reason.d.ts +18 -0
  154. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  155. package/dest/public/avm/revert_reason.js +39 -0
  156. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  157. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  158. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  159. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  160. package/dest/public/avm/serialization/bytecode_serialization.js +81 -77
  161. package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
  162. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  163. package/dest/public/avm/serialization/instruction_serialization.js +71 -36
  164. package/dest/public/avm/test_utils.d.ts +12 -15
  165. package/dest/public/avm/test_utils.d.ts.map +1 -1
  166. package/dest/public/avm/test_utils.js +17 -25
  167. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  168. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  169. package/dest/public/contracts_db_checkpoint.js +30 -0
  170. package/dest/public/db_interfaces.d.ts +68 -0
  171. package/dest/public/db_interfaces.d.ts.map +1 -0
  172. package/dest/public/db_interfaces.js +3 -0
  173. package/dest/public/debug_fn_name.d.ts +18 -0
  174. package/dest/public/debug_fn_name.d.ts.map +1 -0
  175. package/dest/public/debug_fn_name.js +37 -0
  176. package/dest/public/executor_metrics.d.ts +12 -4
  177. package/dest/public/executor_metrics.d.ts.map +1 -1
  178. package/dest/public/executor_metrics.js +33 -23
  179. package/dest/public/executor_metrics_interface.d.ts +10 -0
  180. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  181. package/dest/public/executor_metrics_interface.js +1 -0
  182. package/dest/public/fixtures/amm_test.d.ts +10 -0
  183. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  184. package/dest/public/fixtures/amm_test.js +213 -0
  185. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  186. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  187. package/dest/public/fixtures/bulk_test.js +289 -0
  188. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  189. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  190. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  191. package/dest/public/fixtures/custom_bytecode_tests.d.ts +14 -0
  192. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  193. package/dest/public/fixtures/custom_bytecode_tests.js +234 -0
  194. package/dest/public/fixtures/index.d.ts +10 -1
  195. package/dest/public/fixtures/index.d.ts.map +1 -1
  196. package/dest/public/fixtures/index.js +9 -0
  197. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  198. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  199. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  200. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  201. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  202. package/dest/public/fixtures/opcode_spammer.js +1645 -0
  203. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +56 -15
  204. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  205. package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
  206. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  207. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  208. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  209. package/dest/public/fixtures/token_test.d.ts +12 -0
  210. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  211. package/dest/public/fixtures/token_test.js +96 -0
  212. package/dest/public/fixtures/utils.d.ts +18 -5
  213. package/dest/public/fixtures/utils.d.ts.map +1 -1
  214. package/dest/public/fixtures/utils.js +112 -70
  215. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  216. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  217. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  218. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  219. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  220. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  221. package/dest/public/hinting_db_sources.d.ts +81 -0
  222. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  223. package/dest/public/hinting_db_sources.js +359 -0
  224. package/dest/public/index.d.ts +6 -9
  225. package/dest/public/index.d.ts.map +1 -1
  226. package/dest/public/index.js +4 -7
  227. package/dest/public/public_db_sources.d.ts +58 -104
  228. package/dest/public/public_db_sources.d.ts.map +1 -1
  229. package/dest/public/public_db_sources.js +227 -194
  230. package/dest/public/public_errors.d.ts +12 -0
  231. package/dest/public/public_errors.d.ts.map +1 -0
  232. package/dest/public/public_errors.js +13 -0
  233. package/dest/public/public_processor/guarded_merkle_tree.d.ts +52 -0
  234. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  235. package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
  236. package/dest/public/public_processor/public_processor.d.ts +32 -39
  237. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  238. package/dest/public/public_processor/public_processor.js +642 -167
  239. package/dest/public/public_processor/public_processor_metrics.d.ts +7 -4
  240. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  241. package/dest/public/public_processor/public_processor_metrics.js +37 -46
  242. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
  243. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  244. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +99 -0
  245. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  246. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  247. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +126 -0
  248. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  249. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  250. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  251. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  252. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  253. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +167 -0
  254. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  255. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  256. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  257. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  258. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  259. package/dest/public/public_tx_simulator/factories.js +28 -0
  260. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  261. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  262. package/dest/public/public_tx_simulator/index.js +5 -0
  263. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  264. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  265. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  266. package/dest/public/public_tx_simulator/public_tx_context.d.ts +31 -33
  267. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  268. package/dest/public/public_tx_simulator/public_tx_context.js +83 -105
  269. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -58
  270. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  271. package/dest/public/public_tx_simulator/public_tx_simulator.js +225 -207
  272. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  273. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  274. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  275. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  276. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  277. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
  278. package/dest/public/side_effect_errors.d.ts +42 -2
  279. package/dest/public/side_effect_errors.d.ts.map +1 -1
  280. package/dest/public/side_effect_errors.js +70 -1
  281. package/dest/public/side_effect_trace.d.ts +24 -69
  282. package/dest/public/side_effect_trace.d.ts.map +1 -1
  283. package/dest/public/side_effect_trace.js +74 -124
  284. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  285. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  286. package/dest/public/state_manager/index.d.ts +2 -0
  287. package/dest/public/state_manager/index.d.ts.map +1 -0
  288. package/dest/public/state_manager/index.js +1 -0
  289. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  290. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  291. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  292. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  293. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  294. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  295. package/dest/public/state_manager/state_manager.d.ts +170 -0
  296. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  297. package/dest/public/state_manager/state_manager.js +402 -0
  298. package/dest/public/test_executor_metrics.d.ts +61 -0
  299. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  300. package/dest/public/test_executor_metrics.js +329 -0
  301. package/dest/public/unique_class_ids.d.ts +1 -1
  302. package/dest/public/unique_class_ids.d.ts.map +1 -1
  303. package/dest/public/utils.d.ts +3 -5
  304. package/dest/public/utils.d.ts.map +1 -1
  305. package/dest/public/utils.js +4 -21
  306. package/dest/server.d.ts +7 -4
  307. package/dest/server.d.ts.map +1 -1
  308. package/dest/server.js +5 -2
  309. package/dest/testing.d.ts +2 -0
  310. package/dest/testing.d.ts.map +1 -0
  311. package/dest/testing.js +1 -0
  312. package/package.json +39 -33
  313. package/src/client.ts +5 -3
  314. package/src/common/errors.ts +80 -45
  315. package/src/common/index.ts +0 -1
  316. package/src/private/acvm/acvm.ts +21 -35
  317. package/src/private/acvm/acvm_types.ts +1 -1
  318. package/src/private/acvm/deserialize.ts +36 -30
  319. package/src/private/acvm/index.ts +0 -1
  320. package/src/private/acvm/serialize.ts +64 -1
  321. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
  322. package/src/private/acvm_wasm.ts +79 -0
  323. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  324. package/src/private/circuit_recording/circuit_recorder.ts +263 -0
  325. package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
  326. package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
  327. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  328. package/src/private/circuit_simulator.ts +90 -0
  329. package/src/private/{providers/factory.ts → factory.ts} +13 -10
  330. package/src/public/avm/avm_context.ts +6 -6
  331. package/src/public/avm/avm_contract_call_result.ts +23 -9
  332. package/src/public/avm/avm_execution_environment.ts +17 -5
  333. package/src/public/avm/avm_gas.ts +27 -39
  334. package/src/public/avm/avm_machine_state.ts +12 -6
  335. package/src/public/avm/avm_memory_types.ts +24 -7
  336. package/src/public/avm/avm_simulator.ts +58 -63
  337. package/src/public/avm/avm_simulator_interface.ts +8 -0
  338. package/src/public/avm/calldata.ts +101 -0
  339. package/src/public/avm/errors.ts +20 -75
  340. package/src/public/avm/fixtures/account_proof.json +553 -0
  341. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  342. package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
  343. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +66 -13
  344. package/src/public/avm/fixtures/initializers.ts +103 -0
  345. package/src/public/avm/fixtures/utils.ts +154 -0
  346. package/src/public/avm/index.ts +0 -2
  347. package/src/public/avm/opcodes/accrued_substate.ts +84 -52
  348. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  349. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  350. package/src/public/avm/opcodes/bitwise.ts +33 -29
  351. package/src/public/avm/opcodes/comparators.ts +6 -3
  352. package/src/public/avm/opcodes/contract.ts +15 -11
  353. package/src/public/avm/opcodes/control_flow.ts +19 -10
  354. package/src/public/avm/opcodes/conversion.ts +29 -5
  355. package/src/public/avm/opcodes/ec_add.ts +30 -37
  356. package/src/public/avm/opcodes/environment_getters.ts +28 -23
  357. package/src/public/avm/opcodes/external_calls.ts +70 -36
  358. package/src/public/avm/opcodes/hashing.ts +39 -13
  359. package/src/public/avm/opcodes/instruction.ts +31 -21
  360. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  361. package/src/public/avm/opcodes/memory.ts +81 -42
  362. package/src/public/avm/opcodes/misc.ts +61 -19
  363. package/src/public/avm/opcodes/storage.ts +47 -23
  364. package/src/public/avm/revert_reason.ts +58 -0
  365. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  366. package/src/public/avm/serialization/bytecode_serialization.ts +90 -81
  367. package/src/public/avm/serialization/instruction_serialization.ts +76 -35
  368. package/src/public/avm/test_utils.ts +25 -42
  369. package/src/public/contracts_db_checkpoint.ts +41 -0
  370. package/src/public/db_interfaces.ts +76 -0
  371. package/src/public/debug_fn_name.ts +52 -0
  372. package/src/public/executor_metrics.ts +49 -23
  373. package/src/public/executor_metrics_interface.ts +15 -0
  374. package/src/public/fixtures/amm_test.ts +331 -0
  375. package/src/public/fixtures/bulk_test.ts +194 -0
  376. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  377. package/src/public/fixtures/custom_bytecode_tests.ts +366 -0
  378. package/src/public/fixtures/index.ts +13 -0
  379. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  380. package/src/public/fixtures/opcode_spammer.ts +1713 -0
  381. package/src/public/fixtures/public_tx_simulation_tester.ts +264 -114
  382. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  383. package/src/public/fixtures/token_test.ts +148 -0
  384. package/src/public/fixtures/utils.ts +156 -80
  385. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  386. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  387. package/src/public/hinting_db_sources.ts +614 -0
  388. package/src/public/index.ts +11 -8
  389. package/src/public/public_db_sources.ts +295 -258
  390. package/src/public/public_errors.ts +14 -0
  391. package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
  392. package/src/public/public_processor/public_processor.ts +354 -227
  393. package/src/public/public_processor/public_processor_metrics.ts +30 -46
  394. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
  395. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +201 -0
  396. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  397. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +232 -0
  398. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  399. package/src/public/public_tx_simulator/factories.ts +44 -0
  400. package/src/public/public_tx_simulator/index.ts +7 -0
  401. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  402. package/src/public/public_tx_simulator/public_tx_context.ts +187 -209
  403. package/src/public/public_tx_simulator/public_tx_simulator.ts +320 -263
  404. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  405. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  406. package/src/public/side_effect_errors.ts +91 -1
  407. package/src/public/side_effect_trace.ts +99 -322
  408. package/src/public/side_effect_trace_interface.ts +11 -59
  409. package/src/public/state_manager/index.ts +1 -0
  410. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  411. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  412. package/src/public/state_manager/state_manager.ts +569 -0
  413. package/src/public/test_executor_metrics.ts +421 -0
  414. package/src/public/utils.ts +5 -21
  415. package/src/server.ts +6 -3
  416. package/src/testing.ts +1 -0
  417. package/dest/common/db_interfaces.d.ts +0 -80
  418. package/dest/common/db_interfaces.d.ts.map +0 -1
  419. package/dest/common/db_interfaces.js +0 -1
  420. package/dest/common/debug_fn_name.d.ts +0 -5
  421. package/dest/common/debug_fn_name.d.ts.map +0 -1
  422. package/dest/common/debug_fn_name.js +0 -6
  423. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  424. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  425. package/dest/common/message_load_oracle_inputs.js +0 -15
  426. package/dest/private/acvm/oracle/index.d.ts +0 -14
  427. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  428. package/dest/private/acvm/oracle/index.js +0 -2
  429. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  430. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  431. package/dest/private/acvm/oracle/oracle.js +0 -263
  432. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  433. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  434. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  435. package/dest/private/execution_data_provider.d.ts +0 -261
  436. package/dest/private/execution_data_provider.d.ts.map +0 -1
  437. package/dest/private/execution_data_provider.js +0 -14
  438. package/dest/private/execution_note_cache.d.ts +0 -93
  439. package/dest/private/execution_note_cache.d.ts.map +0 -1
  440. package/dest/private/execution_note_cache.js +0 -180
  441. package/dest/private/hashed_values_cache.d.ts +0 -28
  442. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  443. package/dest/private/hashed_values_cache.js +0 -46
  444. package/dest/private/index.d.ts +0 -13
  445. package/dest/private/index.d.ts.map +0 -1
  446. package/dest/private/index.js +0 -12
  447. package/dest/private/pick_notes.d.ts +0 -85
  448. package/dest/private/pick_notes.d.ts.map +0 -1
  449. package/dest/private/pick_notes.js +0 -51
  450. package/dest/private/private_execution.d.ts +0 -25
  451. package/dest/private/private_execution.d.ts.map +0 -1
  452. package/dest/private/private_execution.js +0 -92
  453. package/dest/private/private_execution_oracle.d.ts +0 -215
  454. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  455. package/dest/private/private_execution_oracle.js +0 -382
  456. package/dest/private/providers/acvm_native.d.ts +0 -40
  457. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  458. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  459. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  460. package/dest/private/providers/acvm_wasm.js +0 -62
  461. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  462. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  463. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  464. package/dest/private/providers/factory.d.ts +0 -12
  465. package/dest/private/providers/factory.d.ts.map +0 -1
  466. package/dest/private/providers/simulation_provider.d.ts +0 -19
  467. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  468. package/dest/private/providers/simulation_provider.js +0 -24
  469. package/dest/private/simulator.d.ts +0 -34
  470. package/dest/private/simulator.d.ts.map +0 -1
  471. package/dest/private/simulator.js +0 -76
  472. package/dest/private/unconstrained_execution.d.ts +0 -10
  473. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  474. package/dest/private/unconstrained_execution.js +0 -27
  475. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  476. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  477. package/dest/private/unconstrained_execution_oracle.js +0 -258
  478. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  479. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  480. package/dest/public/avm/bytecode_utils.js +0 -17
  481. package/dest/public/avm/fixtures/index.d.ts +0 -84
  482. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  483. package/dest/public/avm/fixtures/index.js +0 -175
  484. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  485. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  486. package/dest/public/avm/journal/index.d.ts +0 -2
  487. package/dest/public/avm/journal/index.d.ts.map +0 -1
  488. package/dest/public/avm/journal/index.js +0 -1
  489. package/dest/public/avm/journal/journal.d.ts +0 -209
  490. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  491. package/dest/public/avm/journal/journal.js +0 -486
  492. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  493. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  494. package/dest/public/bytecode_errors.d.ts +0 -4
  495. package/dest/public/bytecode_errors.d.ts.map +0 -1
  496. package/dest/public/bytecode_errors.js +0 -6
  497. package/dest/public/execution.d.ts +0 -108
  498. package/dest/public/execution.d.ts.map +0 -1
  499. package/dest/public/execution.js +0 -9
  500. package/dest/public/tx_contract_cache.d.ts +0 -41
  501. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  502. package/dest/public/tx_contract_cache.js +0 -49
  503. package/dest/test/utils.d.ts +0 -13
  504. package/dest/test/utils.d.ts.map +0 -1
  505. package/dest/test/utils.js +0 -22
  506. package/src/common/db_interfaces.ts +0 -94
  507. package/src/common/debug_fn_name.ts +0 -18
  508. package/src/common/message_load_oracle_inputs.ts +0 -15
  509. package/src/private/acvm/oracle/index.ts +0 -16
  510. package/src/private/acvm/oracle/oracle.ts +0 -455
  511. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  512. package/src/private/execution_data_provider.ts +0 -323
  513. package/src/private/execution_note_cache.ts +0 -217
  514. package/src/private/hashed_values_cache.ts +0 -55
  515. package/src/private/index.ts +0 -16
  516. package/src/private/pick_notes.ts +0 -141
  517. package/src/private/private_execution.ts +0 -151
  518. package/src/private/private_execution_oracle.ts +0 -614
  519. package/src/private/providers/acvm_wasm.ts +0 -63
  520. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  521. package/src/private/providers/simulation_provider.ts +0 -45
  522. package/src/private/simulator.ts +0 -147
  523. package/src/private/unconstrained_execution.ts +0 -50
  524. package/src/private/unconstrained_execution_oracle.ts +0 -373
  525. package/src/public/avm/bytecode_utils.ts +0 -17
  526. package/src/public/avm/fixtures/index.ts +0 -296
  527. package/src/public/avm/journal/index.ts +0 -1
  528. package/src/public/avm/journal/journal.ts +0 -742
  529. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  530. package/src/public/bytecode_errors.ts +0 -6
  531. package/src/public/execution.ts +0 -140
  532. package/src/public/tx_contract_cache.ts +0 -69
  533. package/src/test/utils.ts +0 -36
@@ -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;
@@ -1,4 +1,13 @@
1
- import { AvmExecutionError, AvmParsingError, InvalidOpcodeError, InvalidProgramCounterError } from '../errors.js';
1
+ import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
2
+
3
+ import {
4
+ AvmExecutionError,
5
+ AvmParsingError,
6
+ InvalidOpcodeError,
7
+ InvalidProgramCounterError,
8
+ InvalidTagValueError,
9
+ duringInstrFetch,
10
+ } from '../errors.js';
2
11
  import {
3
12
  Add,
4
13
  And,
@@ -10,7 +19,7 @@ import {
10
19
  EcAdd,
11
20
  EmitNoteHash,
12
21
  EmitNullifier,
13
- EmitUnencryptedLog,
22
+ EmitPublicLog,
14
23
  Eq,
15
24
  FieldDiv,
16
25
  GetContractInstance,
@@ -53,106 +62,102 @@ import { MAX_OPCODE_VALUE, Opcode } from './instruction_serialization.js';
53
62
 
54
63
  export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction;
55
64
 
56
- export interface Serializable {
57
- serialize(): Buffer;
58
- }
59
-
60
65
  export interface Deserializable {
61
66
  deserialize: InstructionDeserializer;
62
67
  }
63
68
 
64
69
  export type InstructionSet = Map<Opcode, InstructionDeserializer>;
65
70
  export const INSTRUCTION_SET = new Map<Opcode, InstructionDeserializer>([
66
- [Opcode.ADD_8, Add.as(Add.wireFormat8).deserialize],
67
- [Opcode.ADD_16, Add.as(Add.wireFormat16).deserialize],
68
- [Opcode.SUB_8, Sub.as(Sub.wireFormat8).deserialize],
69
- [Opcode.SUB_16, Sub.as(Sub.wireFormat16).deserialize],
70
- [Opcode.MUL_8, Mul.as(Mul.wireFormat8).deserialize],
71
- [Opcode.MUL_16, Mul.as(Mul.wireFormat16).deserialize],
72
- [Opcode.DIV_8, Div.as(Div.wireFormat8).deserialize],
73
- [Opcode.DIV_16, Div.as(Div.wireFormat16).deserialize],
74
- [Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).deserialize],
75
- [Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).deserialize],
76
- [Opcode.EQ_8, Eq.as(Eq.wireFormat8).deserialize],
77
- [Opcode.EQ_16, Eq.as(Eq.wireFormat16).deserialize],
78
- [Opcode.LT_8, Lt.as(Lt.wireFormat8).deserialize],
79
- [Opcode.LT_16, Lt.as(Lt.wireFormat16).deserialize],
80
- [Opcode.LTE_8, Lte.as(Lte.wireFormat8).deserialize],
81
- [Opcode.LTE_16, Lte.as(Lte.wireFormat16).deserialize],
82
- [Opcode.AND_8, And.as(And.wireFormat8).deserialize],
83
- [Opcode.AND_16, And.as(And.wireFormat16).deserialize],
84
- [Opcode.OR_8, Or.as(Or.wireFormat8).deserialize],
85
- [Opcode.OR_16, Or.as(Or.wireFormat16).deserialize],
86
- [Opcode.XOR_8, Xor.as(Xor.wireFormat8).deserialize],
87
- [Opcode.XOR_16, Xor.as(Xor.wireFormat16).deserialize],
88
- [Opcode.NOT_8, Not.as(Not.wireFormat8).deserialize],
89
- [Opcode.NOT_16, Not.as(Not.wireFormat16).deserialize],
90
- [Opcode.SHL_8, Shl.as(Shl.wireFormat8).deserialize],
91
- [Opcode.SHL_16, Shl.as(Shl.wireFormat16).deserialize],
92
- [Opcode.SHR_8, Shr.as(Shr.wireFormat8).deserialize],
93
- [Opcode.SHR_16, Shr.as(Shr.wireFormat16).deserialize],
94
- [Opcode.CAST_8, Cast.as(Cast.wireFormat8).deserialize],
95
- [Opcode.CAST_16, Cast.as(Cast.wireFormat16).deserialize],
71
+ [Opcode.ADD_8, Add.as(Add.wireFormat8).fromBuffer],
72
+ [Opcode.ADD_16, Add.as(Add.wireFormat16).fromBuffer],
73
+ [Opcode.SUB_8, Sub.as(Sub.wireFormat8).fromBuffer],
74
+ [Opcode.SUB_16, Sub.as(Sub.wireFormat16).fromBuffer],
75
+ [Opcode.MUL_8, Mul.as(Mul.wireFormat8).fromBuffer],
76
+ [Opcode.MUL_16, Mul.as(Mul.wireFormat16).fromBuffer],
77
+ [Opcode.DIV_8, Div.as(Div.wireFormat8).fromBuffer],
78
+ [Opcode.DIV_16, Div.as(Div.wireFormat16).fromBuffer],
79
+ [Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).fromBuffer],
80
+ [Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).fromBuffer],
81
+ [Opcode.EQ_8, Eq.as(Eq.wireFormat8).fromBuffer],
82
+ [Opcode.EQ_16, Eq.as(Eq.wireFormat16).fromBuffer],
83
+ [Opcode.LT_8, Lt.as(Lt.wireFormat8).fromBuffer],
84
+ [Opcode.LT_16, Lt.as(Lt.wireFormat16).fromBuffer],
85
+ [Opcode.LTE_8, Lte.as(Lte.wireFormat8).fromBuffer],
86
+ [Opcode.LTE_16, Lte.as(Lte.wireFormat16).fromBuffer],
87
+ [Opcode.AND_8, And.as(And.wireFormat8).fromBuffer],
88
+ [Opcode.AND_16, And.as(And.wireFormat16).fromBuffer],
89
+ [Opcode.OR_8, Or.as(Or.wireFormat8).fromBuffer],
90
+ [Opcode.OR_16, Or.as(Or.wireFormat16).fromBuffer],
91
+ [Opcode.XOR_8, Xor.as(Xor.wireFormat8).fromBuffer],
92
+ [Opcode.XOR_16, Xor.as(Xor.wireFormat16).fromBuffer],
93
+ [Opcode.NOT_8, Not.as(Not.wireFormat8).fromBuffer],
94
+ [Opcode.NOT_16, Not.as(Not.wireFormat16).fromBuffer],
95
+ [Opcode.SHL_8, Shl.as(Shl.wireFormat8).fromBuffer],
96
+ [Opcode.SHL_16, Shl.as(Shl.wireFormat16).fromBuffer],
97
+ [Opcode.SHR_8, Shr.as(Shr.wireFormat8).fromBuffer],
98
+ [Opcode.SHR_16, Shr.as(Shr.wireFormat16).fromBuffer],
99
+ [Opcode.CAST_8, Cast.as(Cast.wireFormat8).fromBuffer],
100
+ [Opcode.CAST_16, Cast.as(Cast.wireFormat16).fromBuffer],
96
101
  // Execution Environment
97
- [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).deserialize],
98
- [CalldataCopy.opcode, Instruction.deserialize.bind(CalldataCopy)],
99
- [SuccessCopy.opcode, Instruction.deserialize.bind(SuccessCopy)],
100
- [Opcode.RETURNDATASIZE, Instruction.deserialize.bind(ReturndataSize)],
101
- [Opcode.RETURNDATACOPY, Instruction.deserialize.bind(ReturndataCopy)],
102
+ [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).fromBuffer],
103
+ [CalldataCopy.opcode, Instruction.fromBuffer.bind(CalldataCopy)],
104
+ [SuccessCopy.opcode, Instruction.fromBuffer.bind(SuccessCopy)],
105
+ [Opcode.RETURNDATASIZE, Instruction.fromBuffer.bind(ReturndataSize)],
106
+ [Opcode.RETURNDATACOPY, Instruction.fromBuffer.bind(ReturndataCopy)],
102
107
 
103
108
  // Machine State - Internal Control Flow
104
- [Jump.opcode, Instruction.deserialize.bind(Jump)],
105
- [JumpI.opcode, Instruction.deserialize.bind(JumpI)],
106
- [InternalCall.opcode, Instruction.deserialize.bind(InternalCall)],
107
- [InternalReturn.opcode, Instruction.deserialize.bind(InternalReturn)],
108
- [Opcode.SET_8, Set.as(Set.wireFormat8).deserialize],
109
- [Opcode.SET_16, Set.as(Set.wireFormat16).deserialize],
110
- [Opcode.SET_32, Set.as(Set.wireFormat32).deserialize],
111
- [Opcode.SET_64, Set.as(Set.wireFormat64).deserialize],
112
- [Opcode.SET_128, Set.as(Set.wireFormat128).deserialize],
113
- [Opcode.SET_FF, Set.as(Set.wireFormatFF).deserialize],
114
- [Opcode.MOV_8, Mov.as(Mov.wireFormat8).deserialize],
115
- [Opcode.MOV_16, Mov.as(Mov.wireFormat16).deserialize],
109
+ [Jump.opcode, Instruction.fromBuffer.bind(Jump)],
110
+ [JumpI.opcode, Instruction.fromBuffer.bind(JumpI)],
111
+ [InternalCall.opcode, Instruction.fromBuffer.bind(InternalCall)],
112
+ [InternalReturn.opcode, Instruction.fromBuffer.bind(InternalReturn)],
113
+ [Opcode.SET_8, Set.as(Set.wireFormat8).fromBuffer],
114
+ [Opcode.SET_16, Set.as(Set.wireFormat16).fromBuffer],
115
+ [Opcode.SET_32, Set.as(Set.wireFormat32).fromBuffer],
116
+ [Opcode.SET_64, Set.as(Set.wireFormat64).fromBuffer],
117
+ [Opcode.SET_128, Set.as(Set.wireFormat128).fromBuffer],
118
+ [Opcode.SET_FF, Set.as(Set.wireFormatFF).fromBuffer],
119
+ [Opcode.MOV_8, Mov.as(Mov.wireFormat8).fromBuffer],
120
+ [Opcode.MOV_16, Mov.as(Mov.wireFormat16).fromBuffer],
116
121
 
117
122
  // World State
118
- [SLoad.opcode, Instruction.deserialize.bind(SLoad)], // Public Storage
119
- [SStore.opcode, Instruction.deserialize.bind(SStore)], // Public Storage
120
- [NoteHashExists.opcode, Instruction.deserialize.bind(NoteHashExists)], // Notes & Nullifiers
121
- [EmitNoteHash.opcode, Instruction.deserialize.bind(EmitNoteHash)], // Notes & Nullifiers
122
- [NullifierExists.opcode, Instruction.deserialize.bind(NullifierExists)], // Notes & Nullifiers
123
- [EmitNullifier.opcode, Instruction.deserialize.bind(EmitNullifier)], // Notes & Nullifiers
124
- [L1ToL2MessageExists.opcode, Instruction.deserialize.bind(L1ToL2MessageExists)], // Messages
123
+ [SLoad.opcode, Instruction.fromBuffer.bind(SLoad)], // Public Storage
124
+ [SStore.opcode, Instruction.fromBuffer.bind(SStore)], // Public Storage
125
+ [NoteHashExists.opcode, Instruction.fromBuffer.bind(NoteHashExists)], // Notes & Nullifiers
126
+ [EmitNoteHash.opcode, Instruction.fromBuffer.bind(EmitNoteHash)], // Notes & Nullifiers
127
+ [NullifierExists.opcode, Instruction.fromBuffer.bind(NullifierExists)], // Notes & Nullifiers
128
+ [EmitNullifier.opcode, Instruction.fromBuffer.bind(EmitNullifier)], // Notes & Nullifiers
129
+ [L1ToL2MessageExists.opcode, Instruction.fromBuffer.bind(L1ToL2MessageExists)], // Messages
125
130
 
126
131
  // Accrued Substate
127
- [EmitUnencryptedLog.opcode, Instruction.deserialize.bind(EmitUnencryptedLog)],
128
- [SendL2ToL1Message.opcode, Instruction.deserialize.bind(SendL2ToL1Message)],
129
- [GetContractInstance.opcode, Instruction.deserialize.bind(GetContractInstance)],
132
+ [EmitPublicLog.opcode, Instruction.fromBuffer.bind(EmitPublicLog)],
133
+ [SendL2ToL1Message.opcode, Instruction.fromBuffer.bind(SendL2ToL1Message)],
134
+ [GetContractInstance.opcode, Instruction.fromBuffer.bind(GetContractInstance)],
130
135
 
131
136
  // Control Flow - Contract Calls
132
- [Call.opcode, Instruction.deserialize.bind(Call)],
133
- [StaticCall.opcode, Instruction.deserialize.bind(StaticCall)],
134
- [Return.opcode, Instruction.deserialize.bind(Return)],
135
- [Opcode.REVERT_8, Revert.as(Revert.wireFormat8).deserialize],
136
- [Opcode.REVERT_16, Revert.as(Revert.wireFormat16).deserialize],
137
+ [Call.opcode, Instruction.fromBuffer.bind(Call)],
138
+ [StaticCall.opcode, Instruction.fromBuffer.bind(StaticCall)],
139
+ [Return.opcode, Instruction.fromBuffer.bind(Return)],
140
+ [Opcode.REVERT_8, Revert.as(Revert.wireFormat8).fromBuffer],
141
+ [Opcode.REVERT_16, Revert.as(Revert.wireFormat16).fromBuffer],
137
142
 
138
143
  // Misc
139
- [DebugLog.opcode, Instruction.deserialize.bind(DebugLog)],
144
+ [DebugLog.opcode, Instruction.fromBuffer.bind(DebugLog)],
140
145
 
141
146
  // Gadgets
142
- [EcAdd.opcode, Instruction.deserialize.bind(EcAdd)],
143
- [Poseidon2.opcode, Instruction.deserialize.bind(Poseidon2)],
144
- [Sha256Compression.opcode, Instruction.deserialize.bind(Sha256Compression)],
145
- [KeccakF1600.opcode, Instruction.deserialize.bind(KeccakF1600)],
147
+ [EcAdd.opcode, Instruction.fromBuffer.bind(EcAdd)],
148
+ [Poseidon2.opcode, Instruction.fromBuffer.bind(Poseidon2)],
149
+ [Sha256Compression.opcode, Instruction.fromBuffer.bind(Sha256Compression)],
150
+ [KeccakF1600.opcode, Instruction.fromBuffer.bind(KeccakF1600)],
146
151
 
147
152
  // Conversions
148
- [ToRadixBE.opcode, Instruction.deserialize.bind(ToRadixBE)],
153
+ [ToRadixBE.opcode, Instruction.fromBuffer.bind(ToRadixBE)],
149
154
  ]);
150
155
 
151
156
  /**
152
157
  * Serializes an array of instructions to bytecode.
153
158
  */
154
- export function encodeToBytecode(instructions: Serializable[]): Buffer {
155
- return Buffer.concat(instructions.map(i => i.serialize()));
159
+ export function encodeToBytecode(instructions: Bufferable[]): Buffer {
160
+ return serializeToBuffer(instructions);
156
161
  }
157
162
 
158
163
  // For testing only
@@ -174,7 +179,7 @@ export function decodeInstructionFromBytecode(
174
179
  instructionSet: InstructionSet = INSTRUCTION_SET,
175
180
  ): [Instruction, number] {
176
181
  if (pc >= bytecode.length) {
177
- throw new InvalidProgramCounterError(pc, bytecode.length);
182
+ throw new InvalidProgramCounterError(pc, bytecode.length - 1);
178
183
  }
179
184
 
180
185
  try {
@@ -184,7 +189,7 @@ export function decodeInstructionFromBytecode(
184
189
 
185
190
  if (opcode > MAX_OPCODE_VALUE) {
186
191
  throw new InvalidOpcodeError(
187
- `Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes.`,
192
+ `Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes (at PC ${pc}).`,
188
193
  );
189
194
  }
190
195
 
@@ -194,13 +199,17 @@ export function decodeInstructionFromBytecode(
194
199
  }
195
200
 
196
201
  const instructionDeserializer: InstructionDeserializer = instructionDeserializerOrUndef;
202
+
197
203
  const instruction = instructionDeserializer(cursor);
198
204
  return [instruction, cursor.position() - startingPosition];
199
205
  } catch (error) {
200
- if (error instanceof InvalidOpcodeError || error instanceof AvmExecutionError) {
201
- throw error;
206
+ if (error instanceof InvalidTagValueError || error instanceof InvalidOpcodeError) {
207
+ throw duringInstrFetch(error, pc);
208
+ } else if (error instanceof AvmExecutionError) {
209
+ throw new AvmParsingError(`Instruction parsing error at pc ${pc}: ${error.message}`);
202
210
  } else {
203
- throw new AvmParsingError(`${error}`);
211
+ const msg = error instanceof Error ? `: ${error.message}` : '';
212
+ throw new AvmParsingError(`Instruction fetching error at pc ${pc}${msg}`);
204
213
  }
205
214
  }
206
215
  }
@@ -1,5 +1,8 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+
1
3
  import { strict as assert } from 'assert';
2
4
 
5
+ import { TaggedMemory } from '../avm_memory_types.js';
3
6
  import { BufferCursor } from './buffer_cursor.js';
4
7
 
5
8
  /**
@@ -67,7 +70,7 @@ export enum Opcode {
67
70
  EMITNULLIFIER,
68
71
  L1TOL2MSGEXISTS,
69
72
  GETCONTRACTINSTANCE,
70
- EMITUNENCRYPTEDLOG,
73
+ EMITPUBLICLOG,
71
74
  SENDL2TOL1MSG,
72
75
  // External calls
73
76
  CALL,
@@ -92,10 +95,8 @@ export const MAX_OPCODE_VALUE = Math.max(
92
95
  .filter(k => !isNaN(k)),
93
96
  );
94
97
 
95
- // Possible types for an instruction's operand in its wire format. (Keep in sync with CPP code.
96
- // See vm/avm_trace/deserialization.cpp)
97
- // Note that cpp code introduced an additional enum value TAG to express the instruction tag. In TS,
98
- // this one is parsed as UINT8.
98
+ // Possible types for an instruction's operand in its wire format.
99
+ // The counterpart cpp file is: vm2/simulation/lib/serialization.hpp.
99
100
  export enum OperandType {
100
101
  UINT8,
101
102
  UINT16,
@@ -103,8 +104,12 @@ export enum OperandType {
103
104
  UINT64,
104
105
  UINT128,
105
106
  FF,
107
+ TAG,
106
108
  }
107
109
 
110
+ // Define a type that represents the possible types of the deserialized values.
111
+ type DeserializedValue = number | bigint;
112
+
108
113
  type OperandNativeType = number | bigint;
109
114
  type OperandWriter = (value: any) => void;
110
115
 
@@ -113,45 +118,70 @@ const OPERAND_SPEC = new Map<OperandType, [number, (offset: number) => OperandNa
113
118
  [OperandType.UINT8, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]],
114
119
  [OperandType.UINT16, [2, Buffer.prototype.readUint16BE, Buffer.prototype.writeUint16BE]],
115
120
  [OperandType.UINT32, [4, Buffer.prototype.readUint32BE, Buffer.prototype.writeUint32BE]],
116
- [OperandType.UINT64, [8, Buffer.prototype.readBigInt64BE, Buffer.prototype.writeBigInt64BE]],
117
- [OperandType.UINT128, [16, readBigInt128BE, writeBigInt128BE]],
118
- [OperandType.FF, [32, readBigInt254BE, writeBigInt254BE]],
121
+ [OperandType.UINT64, [8, readUint64BE, writeUint64BE]],
122
+ [OperandType.UINT128, [16, readUint128BE, writeUint128BE]],
123
+ [OperandType.FF, [32, readUint254BE, writeUint254BE]],
124
+ [OperandType.TAG, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]],
119
125
  ]);
120
126
 
121
- function readBigInt254BE(this: Buffer, offset: number): bigint {
122
- const totalBytes = 32;
123
- let ret: bigint = 0n;
127
+ /**
128
+ * Returns the size of an operand in bytes.
129
+ * Should not be called with unknown operand types.
130
+ * @param operandType
131
+ * @returns number size in bytes
132
+ * @throws AssertionError if the operand type is unknown
133
+ */
134
+ export function getOperandSize(operandType: OperandType): number {
135
+ assert(OPERAND_SPEC.has(operandType), `Unknown operand type: ${operandType}`);
136
+ return OPERAND_SPEC.get(operandType)![0];
137
+ }
138
+
139
+ function readUintBE(buf: Buffer, offset: number, totalBytes: number): bigint {
140
+ let value: bigint = 0n;
124
141
  for (let i = 0; i < totalBytes; ++i) {
125
- ret <<= 8n;
126
- ret |= BigInt(this.readUint8(i + offset));
142
+ value <<= 8n;
143
+ value |= BigInt(buf.readUint8(i + offset));
127
144
  }
128
- return ret;
145
+ return value;
129
146
  }
130
147
 
131
- function writeBigInt254BE(this: Buffer, value: bigint): void {
132
- const totalBytes = 32;
148
+ function writeUintBE(buf: Buffer, value: bigint, totalBytes: number): void {
133
149
  for (let offset = totalBytes - 1; offset >= 0; --offset) {
134
- this.writeUint8(Number(value & 0xffn), offset);
150
+ buf.writeUint8(Number(value & 0xffn), offset);
135
151
  value >>= 8n;
136
152
  }
137
153
  }
138
154
 
139
- function readBigInt128BE(this: Buffer, offset: number): bigint {
140
- const totalBytes = 16;
141
- let ret: bigint = 0n;
142
- for (let i = 0; i < totalBytes; ++i) {
143
- ret <<= 8n;
144
- ret |= BigInt(this.readUint8(i + offset));
145
- }
146
- return ret;
155
+ function readUint64BE(this: Buffer, offset: number): bigint {
156
+ return readUintBE(this, offset, 8);
147
157
  }
148
158
 
149
- function writeBigInt128BE(this: Buffer, value: bigint): void {
150
- const totalBytes = 16;
151
- for (let offset = totalBytes - 1; offset >= 0; --offset) {
152
- this.writeUint8(Number(value & 0xffn), offset);
153
- value >>= 8n;
159
+ function writeUint64BE(this: Buffer, value: bigint): void {
160
+ writeUintBE(this, value, 8);
161
+ }
162
+
163
+ function readUint254BE(this: Buffer, offset: number): bigint {
164
+ let value = readUintBE(this, offset, 32);
165
+
166
+ // In circuit, we only support values up to Fr.MODULUS and any deserialized value
167
+ // would naturally undergo a modulus reduction.
168
+ if (value >= Fr.MODULUS) {
169
+ value = value % Fr.MODULUS;
154
170
  }
171
+
172
+ return value;
173
+ }
174
+
175
+ function writeUint254BE(this: Buffer, value: bigint): void {
176
+ writeUintBE(this, value, 32);
177
+ }
178
+
179
+ function readUint128BE(this: Buffer, offset: number): bigint {
180
+ return readUintBE(this, offset, 16);
181
+ }
182
+
183
+ function writeUint128BE(this: Buffer, value: bigint): void {
184
+ writeUintBE(this, value, 16);
155
185
  }
156
186
 
157
187
  /**
@@ -160,19 +190,30 @@ function writeBigInt128BE(this: Buffer, value: bigint): void {
160
190
  * @param operands Specification of the operand types.
161
191
  * @returns An array as big as {@code operands}, with the converted TS values.
162
192
  */
163
- export function deserialize(cursor: BufferCursor | Buffer, operands: OperandType[]): (number | bigint)[] {
164
- const argValues = [];
193
+ export function deserialize(cursor: BufferCursor | Buffer, operands: OperandType[]): DeserializedValue[] {
194
+ const argValues: DeserializedValue[] = [];
165
195
  if (Buffer.isBuffer(cursor)) {
166
196
  cursor = new BufferCursor(cursor);
167
197
  }
168
198
 
169
- for (const op of operands) {
170
- const opType = op;
199
+ for (const opType of operands) {
171
200
  const [sizeBytes, reader, _writer] = OPERAND_SPEC.get(opType)!;
172
- argValues.push(reader.call(cursor.buffer(), cursor.position()));
201
+ const value = reader.call(cursor.buffer(), cursor.position());
202
+ argValues.push(value);
173
203
  cursor.advance(sizeBytes);
174
204
  }
175
205
 
206
+ // We first want to detect other parsing errors (e.g., instruction size
207
+ // is longer than remaining bytes) first and therefore tag validation is done after completion
208
+ // of parsing above. Order of errors need to match with circuit.
209
+ for (let i = 0; i < operands.length; i++) {
210
+ if (operands[i] === OperandType.TAG) {
211
+ // We parsed a single byte (readUInt8()) and therefore value is of number type (not bigint)
212
+ // We need to cast to number because checkIsValidTag expects a number.
213
+ TaggedMemory.checkIsValidTag(Number(argValues[i] ?? 0));
214
+ }
215
+ }
216
+
176
217
  return argValues;
177
218
  }
178
219