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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +9 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +3 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +7 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +23 -35
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +6 -30
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +7 -57
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +5 -4
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -14
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +6 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts +2 -2
  94. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  95. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  97. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  98. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  99. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  100. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  101. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  102. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  103. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  104. package/dest/public/avm/opcodes/bitwise.js +19 -26
  105. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/comparators.js +3 -3
  107. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  108. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/contract.js +9 -10
  110. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/control_flow.js +10 -8
  112. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  113. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/conversion.js +267 -3
  115. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  116. package/dest/public/avm/opcodes/ec_add.js +6 -6
  117. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  118. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  119. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  120. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  121. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  122. package/dest/public/avm/opcodes/external_calls.js +39 -34
  123. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/hashing.js +6 -6
  125. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  126. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/instruction.js +23 -19
  128. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  129. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/memory.js +37 -33
  131. package/dest/public/avm/opcodes/misc.d.ts +2 -1
  132. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/misc.js +41 -16
  134. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  135. package/dest/public/avm/opcodes/storage.js +7 -5
  136. package/dest/public/avm/revert_reason.d.ts +18 -0
  137. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  138. package/dest/public/avm/revert_reason.js +38 -0
  139. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  140. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  142. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  143. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  144. package/dest/public/avm/serialization/instruction_serialization.d.ts +13 -4
  145. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  146. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  147. package/dest/public/avm/test_utils.d.ts +10 -13
  148. package/dest/public/avm/test_utils.d.ts.map +1 -1
  149. package/dest/public/avm/test_utils.js +16 -24
  150. package/dest/public/db_interfaces.d.ts +56 -0
  151. package/dest/public/db_interfaces.d.ts.map +1 -0
  152. package/dest/public/db_interfaces.js +3 -0
  153. package/dest/public/debug_fn_name.d.ts +5 -0
  154. package/dest/public/debug_fn_name.d.ts.map +1 -0
  155. package/dest/public/debug_fn_name.js +9 -0
  156. package/dest/public/executor_metrics.d.ts +10 -3
  157. package/dest/public/executor_metrics.d.ts.map +1 -1
  158. package/dest/public/executor_metrics.js +37 -6
  159. package/dest/public/executor_metrics_interface.d.ts +9 -0
  160. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  161. package/dest/public/executor_metrics_interface.js +1 -0
  162. package/dest/public/fixtures/amm_test.d.ts +10 -0
  163. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  164. package/dest/public/fixtures/amm_test.js +213 -0
  165. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  166. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  167. package/dest/public/fixtures/bulk_test.js +326 -0
  168. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  169. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  170. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  171. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  172. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  173. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  174. package/dest/public/fixtures/index.d.ts +7 -0
  175. package/dest/public/fixtures/index.d.ts.map +1 -1
  176. package/dest/public/fixtures/index.js +7 -0
  177. package/dest/public/fixtures/minimal_public_tx.d.ts +10 -0
  178. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  179. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  180. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -13
  181. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  182. package/dest/public/fixtures/public_tx_simulation_tester.js +96 -71
  183. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  184. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  185. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  186. package/dest/public/fixtures/token_test.d.ts +8 -0
  187. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  188. package/dest/public/fixtures/token_test.js +95 -0
  189. package/dest/public/fixtures/utils.d.ts +16 -3
  190. package/dest/public/fixtures/utils.d.ts.map +1 -1
  191. package/dest/public/fixtures/utils.js +100 -58
  192. package/dest/public/hinting_db_sources.d.ts +70 -0
  193. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  194. package/dest/public/hinting_db_sources.js +297 -0
  195. package/dest/public/index.d.ts +4 -8
  196. package/dest/public/index.d.ts.map +1 -1
  197. package/dest/public/index.js +4 -7
  198. package/dest/public/public_db_sources.d.ts +30 -39
  199. package/dest/public/public_db_sources.d.ts.map +1 -1
  200. package/dest/public/public_db_sources.js +151 -67
  201. package/dest/public/public_errors.d.ts +12 -0
  202. package/dest/public/public_errors.d.ts.map +1 -0
  203. package/dest/public/public_errors.js +13 -0
  204. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  205. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  206. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  207. package/dest/public/public_processor/public_processor.d.ts +25 -30
  208. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  209. package/dest/public/public_processor/public_processor.js +141 -96
  210. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  211. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  212. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  213. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +41 -0
  214. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  215. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +89 -0
  216. package/dest/public/public_tx_simulator/index.d.ts +4 -0
  217. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  218. package/dest/public/public_tx_simulator/index.js +2 -0
  219. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +24 -0
  220. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  221. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  222. package/dest/public/public_tx_simulator/public_tx_context.d.ts +19 -29
  223. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  224. package/dest/public/public_tx_simulator/public_tx_context.js +63 -91
  225. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +45 -47
  226. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  227. package/dest/public/public_tx_simulator/public_tx_simulator.js +209 -184
  228. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  229. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  230. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  231. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  232. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  233. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  234. package/dest/public/side_effect_errors.d.ts +41 -1
  235. package/dest/public/side_effect_errors.d.ts.map +1 -1
  236. package/dest/public/side_effect_errors.js +70 -1
  237. package/dest/public/side_effect_trace.d.ts +20 -65
  238. package/dest/public/side_effect_trace.d.ts.map +1 -1
  239. package/dest/public/side_effect_trace.js +71 -121
  240. package/dest/public/side_effect_trace_interface.d.ts +11 -22
  241. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  242. package/dest/public/state_manager/index.d.ts +2 -0
  243. package/dest/public/state_manager/index.d.ts.map +1 -0
  244. package/dest/public/state_manager/index.js +1 -0
  245. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -5
  246. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  247. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  248. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  249. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  250. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +42 -85
  251. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  252. package/dest/public/state_manager/state_manager.js +391 -0
  253. package/dest/public/test_executor_metrics.d.ts +54 -0
  254. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  255. package/dest/public/test_executor_metrics.js +306 -0
  256. package/dest/public/unique_class_ids.d.ts.map +1 -1
  257. package/dest/public/utils.d.ts +2 -4
  258. package/dest/public/utils.d.ts.map +1 -1
  259. package/dest/public/utils.js +4 -21
  260. package/dest/server.d.ts +6 -3
  261. package/dest/server.d.ts.map +1 -1
  262. package/dest/server.js +5 -2
  263. package/dest/testing.d.ts +2 -0
  264. package/dest/testing.d.ts.map +1 -0
  265. package/dest/testing.js +1 -0
  266. package/package.json +36 -31
  267. package/src/client.ts +5 -3
  268. package/src/common/errors.ts +79 -44
  269. package/src/common/index.ts +0 -1
  270. package/src/private/acvm/acvm.ts +17 -32
  271. package/src/private/acvm/acvm_types.ts +1 -1
  272. package/src/private/acvm/deserialize.ts +35 -29
  273. package/src/private/acvm/index.ts +0 -1
  274. package/src/private/acvm/serialize.ts +63 -0
  275. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +30 -15
  276. package/src/private/acvm_wasm.ts +72 -0
  277. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  278. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  279. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  280. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  281. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  282. package/src/private/circuit_simulator.ts +90 -0
  283. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  284. package/src/public/avm/avm_context.ts +4 -4
  285. package/src/public/avm/avm_contract_call_result.ts +17 -5
  286. package/src/public/avm/avm_execution_environment.ts +10 -1
  287. package/src/public/avm/avm_gas.ts +23 -35
  288. package/src/public/avm/avm_machine_state.ts +5 -0
  289. package/src/public/avm/avm_memory_types.ts +19 -6
  290. package/src/public/avm/avm_simulator.ts +44 -54
  291. package/src/public/avm/avm_simulator_interface.ts +8 -0
  292. package/src/public/avm/errors.ts +8 -77
  293. package/src/public/avm/fixtures/avm_simulation_tester.ts +23 -20
  294. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  295. package/src/public/avm/fixtures/initializers.ts +104 -0
  296. package/src/public/avm/fixtures/utils.ts +150 -0
  297. package/src/public/avm/index.ts +0 -2
  298. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  299. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  300. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  301. package/src/public/avm/opcodes/bitwise.ts +33 -29
  302. package/src/public/avm/opcodes/comparators.ts +6 -3
  303. package/src/public/avm/opcodes/contract.ts +10 -7
  304. package/src/public/avm/opcodes/control_flow.ts +19 -10
  305. package/src/public/avm/opcodes/conversion.ts +27 -3
  306. package/src/public/avm/opcodes/ec_add.ts +9 -6
  307. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  308. package/src/public/avm/opcodes/external_calls.ts +61 -29
  309. package/src/public/avm/opcodes/hashing.ts +28 -8
  310. package/src/public/avm/opcodes/instruction.ts +31 -21
  311. package/src/public/avm/opcodes/memory.ts +71 -32
  312. package/src/public/avm/opcodes/misc.ts +60 -18
  313. package/src/public/avm/opcodes/storage.ts +22 -6
  314. package/src/public/avm/revert_reason.ts +55 -0
  315. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  316. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  317. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  318. package/src/public/avm/test_utils.ts +24 -41
  319. package/src/public/db_interfaces.ts +61 -0
  320. package/src/{common → public}/debug_fn_name.ts +7 -7
  321. package/src/public/executor_metrics.ts +55 -6
  322. package/src/public/executor_metrics_interface.ts +14 -0
  323. package/src/public/fixtures/amm_test.ts +331 -0
  324. package/src/public/fixtures/bulk_test.ts +169 -0
  325. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  326. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  327. package/src/public/fixtures/index.ts +7 -0
  328. package/src/public/fixtures/minimal_public_tx.ts +36 -0
  329. package/src/public/fixtures/public_tx_simulation_tester.ts +158 -113
  330. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  331. package/src/public/fixtures/token_test.ts +140 -0
  332. package/src/public/fixtures/utils.ts +141 -68
  333. package/src/public/hinting_db_sources.ts +505 -0
  334. package/src/public/index.ts +9 -8
  335. package/src/public/public_db_sources.ts +196 -97
  336. package/src/public/public_errors.ts +14 -0
  337. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  338. package/src/public/public_processor/public_processor.ts +191 -153
  339. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  340. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +128 -0
  341. package/src/public/public_tx_simulator/index.ts +3 -0
  342. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +109 -0
  343. package/src/public/public_tx_simulator/public_tx_context.ts +160 -193
  344. package/src/public/public_tx_simulator/public_tx_simulator.ts +294 -220
  345. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +11 -0
  346. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  347. package/src/public/side_effect_errors.ts +91 -1
  348. package/src/public/side_effect_trace.ts +94 -320
  349. package/src/public/side_effect_trace_interface.ts +10 -58
  350. package/src/public/state_manager/index.ts +1 -0
  351. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  352. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  353. package/src/public/state_manager/state_manager.ts +560 -0
  354. package/src/public/test_executor_metrics.ts +395 -0
  355. package/src/public/utils.ts +5 -21
  356. package/src/server.ts +6 -3
  357. package/src/testing.ts +1 -0
  358. package/dest/common/db_interfaces.d.ts +0 -80
  359. package/dest/common/db_interfaces.d.ts.map +0 -1
  360. package/dest/common/db_interfaces.js +0 -1
  361. package/dest/common/debug_fn_name.d.ts +0 -5
  362. package/dest/common/debug_fn_name.d.ts.map +0 -1
  363. package/dest/common/debug_fn_name.js +0 -6
  364. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  365. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  366. package/dest/common/message_load_oracle_inputs.js +0 -15
  367. package/dest/private/acvm/oracle/index.d.ts +0 -14
  368. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  369. package/dest/private/acvm/oracle/index.js +0 -2
  370. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  371. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  372. package/dest/private/acvm/oracle/oracle.js +0 -263
  373. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  374. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  375. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  376. package/dest/private/execution_data_provider.d.ts +0 -261
  377. package/dest/private/execution_data_provider.d.ts.map +0 -1
  378. package/dest/private/execution_data_provider.js +0 -14
  379. package/dest/private/execution_note_cache.d.ts +0 -93
  380. package/dest/private/execution_note_cache.d.ts.map +0 -1
  381. package/dest/private/execution_note_cache.js +0 -180
  382. package/dest/private/hashed_values_cache.d.ts +0 -28
  383. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  384. package/dest/private/hashed_values_cache.js +0 -46
  385. package/dest/private/index.d.ts +0 -13
  386. package/dest/private/index.d.ts.map +0 -1
  387. package/dest/private/index.js +0 -12
  388. package/dest/private/pick_notes.d.ts +0 -85
  389. package/dest/private/pick_notes.d.ts.map +0 -1
  390. package/dest/private/pick_notes.js +0 -51
  391. package/dest/private/private_execution.d.ts +0 -25
  392. package/dest/private/private_execution.d.ts.map +0 -1
  393. package/dest/private/private_execution.js +0 -92
  394. package/dest/private/private_execution_oracle.d.ts +0 -215
  395. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  396. package/dest/private/private_execution_oracle.js +0 -382
  397. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  398. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  399. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  400. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  401. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  402. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  403. package/dest/private/providers/factory.d.ts +0 -12
  404. package/dest/private/providers/factory.d.ts.map +0 -1
  405. package/dest/private/providers/simulation_provider.d.ts +0 -19
  406. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  407. package/dest/private/providers/simulation_provider.js +0 -24
  408. package/dest/private/simulator.d.ts +0 -34
  409. package/dest/private/simulator.d.ts.map +0 -1
  410. package/dest/private/simulator.js +0 -76
  411. package/dest/private/unconstrained_execution.d.ts +0 -10
  412. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  413. package/dest/private/unconstrained_execution.js +0 -27
  414. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  415. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  416. package/dest/private/unconstrained_execution_oracle.js +0 -258
  417. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  418. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  419. package/dest/public/avm/bytecode_utils.js +0 -17
  420. package/dest/public/avm/fixtures/index.d.ts +0 -84
  421. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  422. package/dest/public/avm/fixtures/index.js +0 -175
  423. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  424. package/dest/public/avm/journal/index.d.ts +0 -2
  425. package/dest/public/avm/journal/index.d.ts.map +0 -1
  426. package/dest/public/avm/journal/index.js +0 -1
  427. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  428. package/dest/public/avm/journal/journal.js +0 -486
  429. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  430. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  431. package/dest/public/bytecode_errors.d.ts +0 -4
  432. package/dest/public/bytecode_errors.d.ts.map +0 -1
  433. package/dest/public/bytecode_errors.js +0 -6
  434. package/dest/public/execution.d.ts +0 -108
  435. package/dest/public/execution.d.ts.map +0 -1
  436. package/dest/public/execution.js +0 -9
  437. package/dest/test/utils.d.ts +0 -13
  438. package/dest/test/utils.d.ts.map +0 -1
  439. package/dest/test/utils.js +0 -22
  440. package/src/common/db_interfaces.ts +0 -94
  441. package/src/common/message_load_oracle_inputs.ts +0 -15
  442. package/src/private/acvm/oracle/index.ts +0 -16
  443. package/src/private/acvm/oracle/oracle.ts +0 -455
  444. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  445. package/src/private/execution_data_provider.ts +0 -323
  446. package/src/private/execution_note_cache.ts +0 -217
  447. package/src/private/hashed_values_cache.ts +0 -55
  448. package/src/private/index.ts +0 -16
  449. package/src/private/pick_notes.ts +0 -141
  450. package/src/private/private_execution.ts +0 -151
  451. package/src/private/private_execution_oracle.ts +0 -614
  452. package/src/private/providers/acvm_wasm.ts +0 -63
  453. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  454. package/src/private/providers/simulation_provider.ts +0 -45
  455. package/src/private/simulator.ts +0 -147
  456. package/src/private/unconstrained_execution.ts +0 -50
  457. package/src/private/unconstrained_execution_oracle.ts +0 -373
  458. package/src/public/avm/bytecode_utils.ts +0 -17
  459. package/src/public/avm/fixtures/index.ts +0 -296
  460. package/src/public/avm/journal/index.ts +0 -1
  461. package/src/public/avm/journal/journal.ts +0 -742
  462. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  463. package/src/public/bytecode_errors.ts +0 -6
  464. package/src/public/execution.ts +0 -140
  465. package/src/test/utils.ts +0 -36
  466. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -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
@@ -23,6 +24,7 @@ export class DebugLog extends Instruction {
23
24
 
24
25
  constructor(
25
26
  private indirect: 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.indirect);
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 when doing client-initiated simulation.
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.clientInitiatedSimulation) {
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.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.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
  }
@@ -14,7 +14,11 @@ abstract class BaseStorageInstruction extends Instruction {
14
14
  OperandType.UINT16,
15
15
  ];
16
16
 
17
- constructor(protected indirect: number, protected aOffset: number, protected bOffset: number) {
17
+ constructor(
18
+ protected indirect: number,
19
+ protected aOffset: number,
20
+ protected bOffset: number,
21
+ ) {
18
22
  super();
19
23
  }
20
24
  }
@@ -33,15 +37,24 @@ export class SStore extends BaseStorageInstruction {
33
37
  }
34
38
 
35
39
  const memory = context.machineState.memory;
36
- context.machineState.consumeGas(this.gasCost());
40
+ const addressing = Addressing.fromWire(this.indirect);
41
+
42
+ context.machineState.consumeGas(
43
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
44
+ );
37
45
 
38
46
  const operands = [this.aOffset, this.bOffset];
39
- const addressing = Addressing.fromWire(this.indirect, operands.length);
40
47
  const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
48
+ // We read before tag checking since it's needed for gas cost calculation
49
+ const slot = memory.get(slotOffset).toFr();
50
+
51
+ context.machineState.consumeGas(
52
+ this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
53
+ );
54
+
41
55
  memory.checkTag(TypeTag.FIELD, slotOffset);
42
56
  memory.checkTag(TypeTag.FIELD, srcOffset);
43
57
 
44
- const slot = memory.get(slotOffset).toFr();
45
58
  const value = memory.get(srcOffset).toFr();
46
59
  await context.persistableState.writeStorage(context.environment.address, slot, value);
47
60
  }
@@ -57,10 +70,13 @@ export class SLoad extends BaseStorageInstruction {
57
70
 
58
71
  public async execute(context: AvmContext): Promise<void> {
59
72
  const memory = context.machineState.memory;
60
- context.machineState.consumeGas(this.gasCost());
73
+ const addressing = Addressing.fromWire(this.indirect);
74
+
75
+ context.machineState.consumeGas(
76
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
77
+ );
61
78
 
62
79
  const operands = [this.aOffset, this.bOffset];
63
- const addressing = Addressing.fromWire(this.indirect, operands.length);
64
80
  const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
65
81
  memory.checkTag(TypeTag.FIELD, slotOffset);
66
82
 
@@ -0,0 +1,55 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
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 fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
22
+
23
+ return new AvmRevertReason(
24
+ message,
25
+ /*failingFunction=*/ {
26
+ contractAddress: context.environment.address,
27
+ functionName: fnName,
28
+ },
29
+ /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
30
+ /*options=*/ { cause: nestedError },
31
+ );
32
+ }
33
+
34
+ /**
35
+ * Create a "revert reason" error for an exceptional halt.
36
+ *
37
+ * @param haltingError - the lower-level error causing the exceptional halt
38
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
39
+ */
40
+ export async function revertReasonFromExceptionalHalt(
41
+ haltingError: AvmExecutionError,
42
+ context: AvmContext,
43
+ ): Promise<AvmRevertReason> {
44
+ return await createRevertReason(haltingError.message, [], context);
45
+ }
46
+
47
+ /**
48
+ * Create a "revert reason" error for an explicit revert (a root cause).
49
+ *
50
+ * @param revertData - output data of the explicit REVERT instruction
51
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
52
+ */
53
+ export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
54
+ return await createRevertReason('Assertion failed: ', revertData, context);
55
+ }
@@ -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,3 +1,5 @@
1
+ import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
2
+
1
3
  import { AvmExecutionError, AvmParsingError, InvalidOpcodeError, InvalidProgramCounterError } from '../errors.js';
2
4
  import {
3
5
  Add,
@@ -53,106 +55,102 @@ import { MAX_OPCODE_VALUE, Opcode } from './instruction_serialization.js';
53
55
 
54
56
  export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction;
55
57
 
56
- export interface Serializable {
57
- serialize(): Buffer;
58
- }
59
-
60
58
  export interface Deserializable {
61
59
  deserialize: InstructionDeserializer;
62
60
  }
63
61
 
64
62
  export type InstructionSet = Map<Opcode, InstructionDeserializer>;
65
63
  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],
64
+ [Opcode.ADD_8, Add.as(Add.wireFormat8).fromBuffer],
65
+ [Opcode.ADD_16, Add.as(Add.wireFormat16).fromBuffer],
66
+ [Opcode.SUB_8, Sub.as(Sub.wireFormat8).fromBuffer],
67
+ [Opcode.SUB_16, Sub.as(Sub.wireFormat16).fromBuffer],
68
+ [Opcode.MUL_8, Mul.as(Mul.wireFormat8).fromBuffer],
69
+ [Opcode.MUL_16, Mul.as(Mul.wireFormat16).fromBuffer],
70
+ [Opcode.DIV_8, Div.as(Div.wireFormat8).fromBuffer],
71
+ [Opcode.DIV_16, Div.as(Div.wireFormat16).fromBuffer],
72
+ [Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).fromBuffer],
73
+ [Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).fromBuffer],
74
+ [Opcode.EQ_8, Eq.as(Eq.wireFormat8).fromBuffer],
75
+ [Opcode.EQ_16, Eq.as(Eq.wireFormat16).fromBuffer],
76
+ [Opcode.LT_8, Lt.as(Lt.wireFormat8).fromBuffer],
77
+ [Opcode.LT_16, Lt.as(Lt.wireFormat16).fromBuffer],
78
+ [Opcode.LTE_8, Lte.as(Lte.wireFormat8).fromBuffer],
79
+ [Opcode.LTE_16, Lte.as(Lte.wireFormat16).fromBuffer],
80
+ [Opcode.AND_8, And.as(And.wireFormat8).fromBuffer],
81
+ [Opcode.AND_16, And.as(And.wireFormat16).fromBuffer],
82
+ [Opcode.OR_8, Or.as(Or.wireFormat8).fromBuffer],
83
+ [Opcode.OR_16, Or.as(Or.wireFormat16).fromBuffer],
84
+ [Opcode.XOR_8, Xor.as(Xor.wireFormat8).fromBuffer],
85
+ [Opcode.XOR_16, Xor.as(Xor.wireFormat16).fromBuffer],
86
+ [Opcode.NOT_8, Not.as(Not.wireFormat8).fromBuffer],
87
+ [Opcode.NOT_16, Not.as(Not.wireFormat16).fromBuffer],
88
+ [Opcode.SHL_8, Shl.as(Shl.wireFormat8).fromBuffer],
89
+ [Opcode.SHL_16, Shl.as(Shl.wireFormat16).fromBuffer],
90
+ [Opcode.SHR_8, Shr.as(Shr.wireFormat8).fromBuffer],
91
+ [Opcode.SHR_16, Shr.as(Shr.wireFormat16).fromBuffer],
92
+ [Opcode.CAST_8, Cast.as(Cast.wireFormat8).fromBuffer],
93
+ [Opcode.CAST_16, Cast.as(Cast.wireFormat16).fromBuffer],
96
94
  // 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)],
95
+ [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).fromBuffer],
96
+ [CalldataCopy.opcode, Instruction.fromBuffer.bind(CalldataCopy)],
97
+ [SuccessCopy.opcode, Instruction.fromBuffer.bind(SuccessCopy)],
98
+ [Opcode.RETURNDATASIZE, Instruction.fromBuffer.bind(ReturndataSize)],
99
+ [Opcode.RETURNDATACOPY, Instruction.fromBuffer.bind(ReturndataCopy)],
102
100
 
103
101
  // 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],
102
+ [Jump.opcode, Instruction.fromBuffer.bind(Jump)],
103
+ [JumpI.opcode, Instruction.fromBuffer.bind(JumpI)],
104
+ [InternalCall.opcode, Instruction.fromBuffer.bind(InternalCall)],
105
+ [InternalReturn.opcode, Instruction.fromBuffer.bind(InternalReturn)],
106
+ [Opcode.SET_8, Set.as(Set.wireFormat8).fromBuffer],
107
+ [Opcode.SET_16, Set.as(Set.wireFormat16).fromBuffer],
108
+ [Opcode.SET_32, Set.as(Set.wireFormat32).fromBuffer],
109
+ [Opcode.SET_64, Set.as(Set.wireFormat64).fromBuffer],
110
+ [Opcode.SET_128, Set.as(Set.wireFormat128).fromBuffer],
111
+ [Opcode.SET_FF, Set.as(Set.wireFormatFF).fromBuffer],
112
+ [Opcode.MOV_8, Mov.as(Mov.wireFormat8).fromBuffer],
113
+ [Opcode.MOV_16, Mov.as(Mov.wireFormat16).fromBuffer],
116
114
 
117
115
  // 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
116
+ [SLoad.opcode, Instruction.fromBuffer.bind(SLoad)], // Public Storage
117
+ [SStore.opcode, Instruction.fromBuffer.bind(SStore)], // Public Storage
118
+ [NoteHashExists.opcode, Instruction.fromBuffer.bind(NoteHashExists)], // Notes & Nullifiers
119
+ [EmitNoteHash.opcode, Instruction.fromBuffer.bind(EmitNoteHash)], // Notes & Nullifiers
120
+ [NullifierExists.opcode, Instruction.fromBuffer.bind(NullifierExists)], // Notes & Nullifiers
121
+ [EmitNullifier.opcode, Instruction.fromBuffer.bind(EmitNullifier)], // Notes & Nullifiers
122
+ [L1ToL2MessageExists.opcode, Instruction.fromBuffer.bind(L1ToL2MessageExists)], // Messages
125
123
 
126
124
  // Accrued Substate
127
- [EmitUnencryptedLog.opcode, Instruction.deserialize.bind(EmitUnencryptedLog)],
128
- [SendL2ToL1Message.opcode, Instruction.deserialize.bind(SendL2ToL1Message)],
129
- [GetContractInstance.opcode, Instruction.deserialize.bind(GetContractInstance)],
125
+ [EmitUnencryptedLog.opcode, Instruction.fromBuffer.bind(EmitUnencryptedLog)],
126
+ [SendL2ToL1Message.opcode, Instruction.fromBuffer.bind(SendL2ToL1Message)],
127
+ [GetContractInstance.opcode, Instruction.fromBuffer.bind(GetContractInstance)],
130
128
 
131
129
  // 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],
130
+ [Call.opcode, Instruction.fromBuffer.bind(Call)],
131
+ [StaticCall.opcode, Instruction.fromBuffer.bind(StaticCall)],
132
+ [Return.opcode, Instruction.fromBuffer.bind(Return)],
133
+ [Opcode.REVERT_8, Revert.as(Revert.wireFormat8).fromBuffer],
134
+ [Opcode.REVERT_16, Revert.as(Revert.wireFormat16).fromBuffer],
137
135
 
138
136
  // Misc
139
- [DebugLog.opcode, Instruction.deserialize.bind(DebugLog)],
137
+ [DebugLog.opcode, Instruction.fromBuffer.bind(DebugLog)],
140
138
 
141
139
  // 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)],
140
+ [EcAdd.opcode, Instruction.fromBuffer.bind(EcAdd)],
141
+ [Poseidon2.opcode, Instruction.fromBuffer.bind(Poseidon2)],
142
+ [Sha256Compression.opcode, Instruction.fromBuffer.bind(Sha256Compression)],
143
+ [KeccakF1600.opcode, Instruction.fromBuffer.bind(KeccakF1600)],
146
144
 
147
145
  // Conversions
148
- [ToRadixBE.opcode, Instruction.deserialize.bind(ToRadixBE)],
146
+ [ToRadixBE.opcode, Instruction.fromBuffer.bind(ToRadixBE)],
149
147
  ]);
150
148
 
151
149
  /**
152
150
  * Serializes an array of instructions to bytecode.
153
151
  */
154
- export function encodeToBytecode(instructions: Serializable[]): Buffer {
155
- return Buffer.concat(instructions.map(i => i.serialize()));
152
+ export function encodeToBytecode(instructions: Bufferable[]): Buffer {
153
+ return serializeToBuffer(instructions);
156
154
  }
157
155
 
158
156
  // For testing only
@@ -1,5 +1,8 @@
1
+ import { Fr } from '@aztec/foundation/fields';
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
  /**
@@ -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