@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.03f7ef2

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 (521) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +6 -15
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +12 -6
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +10 -16
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +19 -20
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +32 -24
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +21 -4
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +54 -1
  27. package/dest/private/acvm_native.d.ts +39 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  30. package/dest/private/acvm_wasm.d.ts +15 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +2 -2
  54. package/dest/public/avm/avm_context.d.ts +7 -7
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +6 -4
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +11 -7
  59. package/dest/public/avm/avm_execution_environment.d.ts +5 -3
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +5 -3
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +27 -35
  65. package/dest/public/avm/avm_machine_state.d.ts +4 -2
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +2 -0
  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 +18 -7
  71. package/dest/public/avm/avm_simulator.d.ts +7 -7
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +28 -39
  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/errors.d.ts +11 -29
  78. package/dest/public/avm/errors.d.ts.map +1 -1
  79. package/dest/public/avm/errors.js +19 -57
  80. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  81. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  82. package/dest/public/avm/fixtures/avm_simulation_tester.js +23 -16
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
  84. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
  86. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  87. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  88. package/dest/public/avm/fixtures/initializers.js +44 -0
  89. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  90. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/utils.js +96 -0
  92. package/dest/public/avm/index.d.ts +1 -3
  93. package/dest/public/avm/index.d.ts.map +1 -1
  94. package/dest/public/avm/index.js +0 -2
  95. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  96. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  98. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  99. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  101. package/dest/public/avm/opcodes/arithmetic.d.ts +19 -7
  102. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  104. package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
  105. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/bitwise.js +19 -26
  107. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  108. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/comparators.js +3 -3
  110. package/dest/public/avm/opcodes/contract.d.ts +2 -3
  111. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/contract.js +9 -10
  113. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  114. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/control_flow.js +10 -8
  116. package/dest/public/avm/opcodes/conversion.d.ts +2 -1
  117. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/conversion.js +267 -3
  119. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  120. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/ec_add.js +8 -8
  122. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  123. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  125. package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
  126. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/external_calls.js +39 -34
  128. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  129. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/hashing.js +15 -10
  131. package/dest/public/avm/opcodes/index.d.ts +1 -1
  132. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  133. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  134. package/dest/public/avm/opcodes/instruction.js +23 -19
  135. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  136. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/memory.d.ts +6 -6
  138. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  139. package/dest/public/avm/opcodes/memory.js +37 -33
  140. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  141. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  142. package/dest/public/avm/opcodes/misc.js +41 -16
  143. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  144. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  145. package/dest/public/avm/opcodes/storage.js +7 -5
  146. package/dest/public/avm/revert_reason.d.ts +18 -0
  147. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  148. package/dest/public/avm/revert_reason.js +39 -0
  149. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  150. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  151. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  152. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  153. package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
  154. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  155. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  156. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  157. package/dest/public/avm/test_utils.d.ts +12 -15
  158. package/dest/public/avm/test_utils.d.ts.map +1 -1
  159. package/dest/public/avm/test_utils.js +17 -25
  160. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  161. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  162. package/dest/public/contracts_db_checkpoint.js +30 -0
  163. package/dest/public/db_interfaces.d.ts +68 -0
  164. package/dest/public/db_interfaces.d.ts.map +1 -0
  165. package/dest/public/db_interfaces.js +3 -0
  166. package/dest/public/debug_fn_name.d.ts +18 -0
  167. package/dest/public/debug_fn_name.d.ts.map +1 -0
  168. package/dest/public/debug_fn_name.js +35 -0
  169. package/dest/public/executor_metrics.d.ts +12 -4
  170. package/dest/public/executor_metrics.d.ts.map +1 -1
  171. package/dest/public/executor_metrics.js +37 -6
  172. package/dest/public/executor_metrics_interface.d.ts +10 -0
  173. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  174. package/dest/public/executor_metrics_interface.js +1 -0
  175. package/dest/public/fixtures/amm_test.d.ts +10 -0
  176. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  177. package/dest/public/fixtures/amm_test.js +213 -0
  178. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  179. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/bulk_test.js +278 -0
  181. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  182. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  183. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  184. package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
  185. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  186. package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
  187. package/dest/public/fixtures/index.d.ts +10 -1
  188. package/dest/public/fixtures/index.d.ts.map +1 -1
  189. package/dest/public/fixtures/index.js +9 -0
  190. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  191. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  192. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  193. package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
  194. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  195. package/dest/public/fixtures/opcode_spammer.js +1681 -0
  196. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
  197. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  198. package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
  199. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  200. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  201. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  202. package/dest/public/fixtures/token_test.d.ts +12 -0
  203. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  204. package/dest/public/fixtures/token_test.js +96 -0
  205. package/dest/public/fixtures/utils.d.ts +18 -5
  206. package/dest/public/fixtures/utils.d.ts.map +1 -1
  207. package/dest/public/fixtures/utils.js +102 -59
  208. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
  209. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  210. package/dest/public/fuzzing/avm_fuzzer_simulator.js +139 -0
  211. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  212. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  213. package/dest/public/fuzzing/avm_simulator_bin.js +100 -0
  214. package/dest/public/hinting_db_sources.d.ts +80 -0
  215. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  216. package/dest/public/hinting_db_sources.js +353 -0
  217. package/dest/public/index.d.ts +6 -9
  218. package/dest/public/index.d.ts.map +1 -1
  219. package/dest/public/index.js +4 -7
  220. package/dest/public/public_db_sources.d.ts +52 -102
  221. package/dest/public/public_db_sources.d.ts.map +1 -1
  222. package/dest/public/public_db_sources.js +220 -193
  223. package/dest/public/public_errors.d.ts +12 -0
  224. package/dest/public/public_errors.d.ts.map +1 -0
  225. package/dest/public/public_errors.js +13 -0
  226. package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
  227. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  228. package/dest/public/public_processor/guarded_merkle_tree.js +111 -0
  229. package/dest/public/public_processor/public_processor.d.ts +26 -38
  230. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  231. package/dest/public/public_processor/public_processor.js +177 -121
  232. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  233. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  234. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  235. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
  236. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  237. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
  238. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  239. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  240. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
  241. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  242. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  243. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  244. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  245. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  246. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  247. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
  248. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  249. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  250. package/dest/public/public_tx_simulator/factories.d.ts +13 -0
  251. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  252. package/dest/public/public_tx_simulator/factories.js +28 -0
  253. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  254. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  255. package/dest/public/public_tx_simulator/index.js +5 -0
  256. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  257. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  258. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  259. package/dest/public/public_tx_simulator/public_tx_context.d.ts +24 -31
  260. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  261. package/dest/public/public_tx_simulator/public_tx_context.js +72 -92
  262. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
  263. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  264. package/dest/public/public_tx_simulator/public_tx_simulator.js +213 -205
  265. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  266. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  267. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  268. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  269. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  270. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  271. package/dest/public/side_effect_errors.d.ts +42 -2
  272. package/dest/public/side_effect_errors.d.ts.map +1 -1
  273. package/dest/public/side_effect_errors.js +70 -1
  274. package/dest/public/side_effect_trace.d.ts +22 -68
  275. package/dest/public/side_effect_trace.d.ts.map +1 -1
  276. package/dest/public/side_effect_trace.js +72 -122
  277. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  278. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  279. package/dest/public/state_manager/index.d.ts +2 -0
  280. package/dest/public/state_manager/index.d.ts.map +1 -0
  281. package/dest/public/state_manager/index.js +1 -0
  282. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  283. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  284. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  285. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  286. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  287. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  288. package/dest/public/state_manager/state_manager.d.ts +164 -0
  289. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  290. package/dest/public/state_manager/state_manager.js +395 -0
  291. package/dest/public/test_executor_metrics.d.ts +55 -0
  292. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  293. package/dest/public/test_executor_metrics.js +307 -0
  294. package/dest/public/unique_class_ids.d.ts +1 -1
  295. package/dest/public/unique_class_ids.d.ts.map +1 -1
  296. package/dest/public/utils.d.ts +3 -5
  297. package/dest/public/utils.d.ts.map +1 -1
  298. package/dest/public/utils.js +4 -21
  299. package/dest/server.d.ts +7 -4
  300. package/dest/server.d.ts.map +1 -1
  301. package/dest/server.js +5 -2
  302. package/dest/testing.d.ts +2 -0
  303. package/dest/testing.d.ts.map +1 -0
  304. package/dest/testing.js +1 -0
  305. package/package.json +39 -33
  306. package/src/client.ts +5 -3
  307. package/src/common/errors.ts +80 -45
  308. package/src/common/index.ts +0 -1
  309. package/src/private/acvm/acvm.ts +17 -32
  310. package/src/private/acvm/acvm_types.ts +1 -1
  311. package/src/private/acvm/deserialize.ts +36 -30
  312. package/src/private/acvm/index.ts +0 -1
  313. package/src/private/acvm/serialize.ts +64 -1
  314. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  315. package/src/private/acvm_wasm.ts +72 -0
  316. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  317. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  318. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  319. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  320. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  321. package/src/private/circuit_simulator.ts +90 -0
  322. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  323. package/src/public/avm/avm_context.ts +5 -5
  324. package/src/public/avm/avm_contract_call_result.ts +18 -6
  325. package/src/public/avm/avm_execution_environment.ts +9 -2
  326. package/src/public/avm/avm_gas.ts +26 -38
  327. package/src/public/avm/avm_machine_state.ts +6 -1
  328. package/src/public/avm/avm_memory_types.ts +20 -7
  329. package/src/public/avm/avm_simulator.ts +50 -58
  330. package/src/public/avm/avm_simulator_interface.ts +8 -0
  331. package/src/public/avm/errors.ts +20 -75
  332. package/src/public/avm/fixtures/avm_simulation_tester.ts +33 -22
  333. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
  334. package/src/public/avm/fixtures/initializers.ts +102 -0
  335. package/src/public/avm/fixtures/utils.ts +151 -0
  336. package/src/public/avm/index.ts +0 -2
  337. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  338. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  339. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  340. package/src/public/avm/opcodes/bitwise.ts +33 -29
  341. package/src/public/avm/opcodes/comparators.ts +6 -3
  342. package/src/public/avm/opcodes/contract.ts +10 -7
  343. package/src/public/avm/opcodes/control_flow.ts +19 -10
  344. package/src/public/avm/opcodes/conversion.ts +27 -3
  345. package/src/public/avm/opcodes/ec_add.ts +11 -8
  346. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  347. package/src/public/avm/opcodes/external_calls.ts +61 -29
  348. package/src/public/avm/opcodes/hashing.ts +38 -12
  349. package/src/public/avm/opcodes/instruction.ts +31 -21
  350. package/src/public/avm/opcodes/memory.ts +71 -32
  351. package/src/public/avm/opcodes/misc.ts +60 -18
  352. package/src/public/avm/opcodes/storage.ts +22 -6
  353. package/src/public/avm/revert_reason.ts +58 -0
  354. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  355. package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
  356. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  357. package/src/public/avm/test_utils.ts +25 -42
  358. package/src/public/contracts_db_checkpoint.ts +41 -0
  359. package/src/public/db_interfaces.ts +76 -0
  360. package/src/public/debug_fn_name.ts +50 -0
  361. package/src/public/executor_metrics.ts +56 -6
  362. package/src/public/executor_metrics_interface.ts +15 -0
  363. package/src/public/fixtures/amm_test.ts +331 -0
  364. package/src/public/fixtures/bulk_test.ts +169 -0
  365. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  366. package/src/public/fixtures/custom_bytecode_tests.ts +219 -0
  367. package/src/public/fixtures/index.ts +13 -0
  368. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  369. package/src/public/fixtures/opcode_spammer.ts +1638 -0
  370. package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
  371. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  372. package/src/public/fixtures/token_test.ts +148 -0
  373. package/src/public/fixtures/utils.ts +141 -69
  374. package/src/public/fuzzing/avm_fuzzer_simulator.ts +240 -0
  375. package/src/public/fuzzing/avm_simulator_bin.ts +140 -0
  376. package/src/public/hinting_db_sources.ts +607 -0
  377. package/src/public/index.ts +11 -8
  378. package/src/public/public_db_sources.ts +279 -259
  379. package/src/public/public_errors.ts +14 -0
  380. package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
  381. package/src/public/public_processor/public_processor.ts +242 -178
  382. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  383. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
  384. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +200 -0
  385. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
  386. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
  387. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
  388. package/src/public/public_tx_simulator/factories.ts +41 -0
  389. package/src/public/public_tx_simulator/index.ts +7 -0
  390. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  391. package/src/public/public_tx_simulator/public_tx_context.ts +168 -195
  392. package/src/public/public_tx_simulator/public_tx_simulator.ts +302 -260
  393. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  394. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  395. package/src/public/side_effect_errors.ts +91 -1
  396. package/src/public/side_effect_trace.ts +95 -321
  397. package/src/public/side_effect_trace_interface.ts +11 -59
  398. package/src/public/state_manager/index.ts +1 -0
  399. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  400. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  401. package/src/public/state_manager/state_manager.ts +560 -0
  402. package/src/public/test_executor_metrics.ts +397 -0
  403. package/src/public/utils.ts +5 -21
  404. package/src/server.ts +6 -3
  405. package/src/testing.ts +1 -0
  406. package/dest/common/db_interfaces.d.ts +0 -80
  407. package/dest/common/db_interfaces.d.ts.map +0 -1
  408. package/dest/common/db_interfaces.js +0 -1
  409. package/dest/common/debug_fn_name.d.ts +0 -5
  410. package/dest/common/debug_fn_name.d.ts.map +0 -1
  411. package/dest/common/debug_fn_name.js +0 -6
  412. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  413. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  414. package/dest/common/message_load_oracle_inputs.js +0 -15
  415. package/dest/private/acvm/oracle/index.d.ts +0 -14
  416. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  417. package/dest/private/acvm/oracle/index.js +0 -2
  418. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  419. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  420. package/dest/private/acvm/oracle/oracle.js +0 -263
  421. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  422. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  423. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  424. package/dest/private/execution_data_provider.d.ts +0 -261
  425. package/dest/private/execution_data_provider.d.ts.map +0 -1
  426. package/dest/private/execution_data_provider.js +0 -14
  427. package/dest/private/execution_note_cache.d.ts +0 -93
  428. package/dest/private/execution_note_cache.d.ts.map +0 -1
  429. package/dest/private/execution_note_cache.js +0 -180
  430. package/dest/private/hashed_values_cache.d.ts +0 -28
  431. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  432. package/dest/private/hashed_values_cache.js +0 -46
  433. package/dest/private/index.d.ts +0 -13
  434. package/dest/private/index.d.ts.map +0 -1
  435. package/dest/private/index.js +0 -12
  436. package/dest/private/pick_notes.d.ts +0 -85
  437. package/dest/private/pick_notes.d.ts.map +0 -1
  438. package/dest/private/pick_notes.js +0 -51
  439. package/dest/private/private_execution.d.ts +0 -25
  440. package/dest/private/private_execution.d.ts.map +0 -1
  441. package/dest/private/private_execution.js +0 -92
  442. package/dest/private/private_execution_oracle.d.ts +0 -215
  443. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  444. package/dest/private/private_execution_oracle.js +0 -382
  445. package/dest/private/providers/acvm_native.d.ts +0 -40
  446. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  447. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  448. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  449. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  450. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  451. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  452. package/dest/private/providers/factory.d.ts +0 -12
  453. package/dest/private/providers/factory.d.ts.map +0 -1
  454. package/dest/private/providers/simulation_provider.d.ts +0 -19
  455. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  456. package/dest/private/providers/simulation_provider.js +0 -24
  457. package/dest/private/simulator.d.ts +0 -34
  458. package/dest/private/simulator.d.ts.map +0 -1
  459. package/dest/private/simulator.js +0 -76
  460. package/dest/private/unconstrained_execution.d.ts +0 -10
  461. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  462. package/dest/private/unconstrained_execution.js +0 -27
  463. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  464. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  465. package/dest/private/unconstrained_execution_oracle.js +0 -258
  466. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  467. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  468. package/dest/public/avm/bytecode_utils.js +0 -17
  469. package/dest/public/avm/fixtures/index.d.ts +0 -84
  470. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  471. package/dest/public/avm/fixtures/index.js +0 -175
  472. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  473. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  474. package/dest/public/avm/journal/index.d.ts +0 -2
  475. package/dest/public/avm/journal/index.d.ts.map +0 -1
  476. package/dest/public/avm/journal/index.js +0 -1
  477. package/dest/public/avm/journal/journal.d.ts +0 -209
  478. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  479. package/dest/public/avm/journal/journal.js +0 -486
  480. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  481. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  482. package/dest/public/bytecode_errors.d.ts +0 -4
  483. package/dest/public/bytecode_errors.d.ts.map +0 -1
  484. package/dest/public/bytecode_errors.js +0 -6
  485. package/dest/public/execution.d.ts +0 -108
  486. package/dest/public/execution.d.ts.map +0 -1
  487. package/dest/public/execution.js +0 -9
  488. package/dest/public/tx_contract_cache.d.ts +0 -41
  489. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  490. package/dest/public/tx_contract_cache.js +0 -49
  491. package/dest/test/utils.d.ts +0 -13
  492. package/dest/test/utils.d.ts.map +0 -1
  493. package/dest/test/utils.js +0 -22
  494. package/src/common/db_interfaces.ts +0 -94
  495. package/src/common/debug_fn_name.ts +0 -18
  496. package/src/common/message_load_oracle_inputs.ts +0 -15
  497. package/src/private/acvm/oracle/index.ts +0 -16
  498. package/src/private/acvm/oracle/oracle.ts +0 -455
  499. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  500. package/src/private/execution_data_provider.ts +0 -323
  501. package/src/private/execution_note_cache.ts +0 -217
  502. package/src/private/hashed_values_cache.ts +0 -55
  503. package/src/private/index.ts +0 -16
  504. package/src/private/pick_notes.ts +0 -141
  505. package/src/private/private_execution.ts +0 -151
  506. package/src/private/private_execution_oracle.ts +0 -614
  507. package/src/private/providers/acvm_wasm.ts +0 -63
  508. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  509. package/src/private/providers/simulation_provider.ts +0 -45
  510. package/src/private/simulator.ts +0 -147
  511. package/src/private/unconstrained_execution.ts +0 -50
  512. package/src/private/unconstrained_execution_oracle.ts +0 -373
  513. package/src/public/avm/bytecode_utils.ts +0 -17
  514. package/src/public/avm/fixtures/index.ts +0 -296
  515. package/src/public/avm/journal/index.ts +0 -1
  516. package/src/public/avm/journal/journal.ts +0 -742
  517. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  518. package/src/public/bytecode_errors.ts +0 -6
  519. package/src/public/execution.ts +0 -140
  520. package/src/public/tx_contract_cache.ts +0 -69
  521. package/src/test/utils.ts +0 -36
@@ -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,
@@ -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
+ [EmitUnencryptedLog.opcode, Instruction.fromBuffer.bind(EmitUnencryptedLog)],
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
  /**
@@ -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
 
@@ -1,81 +1,64 @@
1
- import { Fr } from '@aztec/foundation/fields';
2
- import {
3
- type ContractClassPublic,
4
- type ContractInstanceWithAddress,
5
- computePublicBytecodeCommitment,
6
- } from '@aztec/stdlib/contract';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
7
3
 
8
4
  import type { jest } from '@jest/globals';
9
5
  import { mock } from 'jest-mock-extended';
10
6
 
11
- import type { WorldStateDB } from '../../public/public_db_sources.js';
7
+ import type { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
12
8
  import type { PublicSideEffectTraceInterface } from '../side_effect_trace_interface.js';
13
9
 
14
- export async function mockGetBytecode(worldStateDB: WorldStateDB, bytecode: Buffer) {
15
- const commitment = await computePublicBytecodeCommitment(bytecode);
16
- (worldStateDB as jest.Mocked<WorldStateDB>).getBytecodeCommitment.mockResolvedValue(commitment);
17
- }
18
-
19
10
  export function mockTraceFork(trace: PublicSideEffectTraceInterface, nestedTrace?: PublicSideEffectTraceInterface) {
20
11
  (trace as jest.Mocked<PublicSideEffectTraceInterface>).fork.mockReturnValue(
21
12
  nestedTrace ?? mock<PublicSideEffectTraceInterface>(),
22
13
  );
23
14
  }
24
15
 
25
- export function mockStorageRead(worldStateDB: WorldStateDB, value: Fr) {
26
- (worldStateDB as jest.Mocked<WorldStateDB>).storageRead.mockResolvedValue(value);
16
+ export function mockStorageRead(worldStateDB: PublicTreesDB, value: Fr) {
17
+ (worldStateDB as jest.Mocked<PublicTreesDB>).storageRead.mockResolvedValue(value);
27
18
  }
28
19
 
29
20
  export function mockNoteHashCount(mockedTrace: PublicSideEffectTraceInterface, count: number) {
30
21
  (mockedTrace as jest.Mocked<PublicSideEffectTraceInterface>).getNoteHashCount.mockReturnValue(count);
31
22
  }
32
23
 
33
- export function mockStorageReadWithMap(worldStateDB: WorldStateDB, mockedStorage: Map<bigint, Fr>) {
34
- (worldStateDB as jest.Mocked<WorldStateDB>).storageRead.mockImplementation((_address, slot) =>
24
+ export function mockStorageReadWithMap(worldStateDB: PublicTreesDB, mockedStorage: Map<bigint, Fr>) {
25
+ (worldStateDB as jest.Mocked<PublicTreesDB>).storageRead.mockImplementation((_address, slot) =>
35
26
  Promise.resolve(mockedStorage.get(slot.toBigInt()) ?? Fr.ZERO),
36
27
  );
37
28
  }
38
29
 
39
- export function mockGetBytecodeCommitment(worldStateDB: WorldStateDB, commitment: Fr) {
40
- (worldStateDB as jest.Mocked<WorldStateDB>).getBytecodeCommitment.mockResolvedValue(commitment);
41
- }
42
-
43
- export function mockNoteHashExists(worldStateDB: WorldStateDB, _leafIndex: Fr, value?: Fr) {
44
- (worldStateDB as jest.Mocked<WorldStateDB>).getCommitmentValue.mockImplementation((index: bigint) => {
45
- if (index == _leafIndex.toBigInt()) {
30
+ export function mockGetNoteHash(worldStateDB: PublicTreesDB, _leafIndex: bigint, value?: Fr) {
31
+ (worldStateDB as jest.Mocked<PublicTreesDB>).getNoteHash.mockImplementation((index: bigint) => {
32
+ if (index == _leafIndex && value) {
46
33
  return Promise.resolve(value);
47
34
  } else {
48
- // This is ok for now since the traceing functions handle it
49
- return Promise.resolve(undefined);
35
+ return Promise.resolve(Fr.ZERO);
50
36
  }
51
37
  });
52
38
  }
53
39
 
54
- export function mockGetNullifierIndex(worldStateDB: WorldStateDB, leafIndex: Fr, _ignoredValue?: Fr) {
55
- (worldStateDB as jest.Mocked<WorldStateDB>).getNullifierIndex.mockResolvedValue(leafIndex.toBigInt());
40
+ export function mockCheckNullifierExists(worldStateDB: PublicTreesDB, exists: boolean, _ignoredValue?: Fr) {
41
+ (worldStateDB as jest.Mocked<PublicTreesDB>).checkNullifierExists.mockResolvedValue(exists);
56
42
  }
57
43
 
58
- export function mockL1ToL2MessageExists(
59
- worldStateDB: WorldStateDB,
60
- leafIndex: Fr,
61
- value: Fr,
62
- valueAtOtherIndices?: Fr,
63
- ) {
64
- (worldStateDB as jest.Mocked<WorldStateDB>).getL1ToL2LeafValue.mockImplementation((index: bigint) => {
65
- if (index == leafIndex.toBigInt()) {
44
+ export function mockGetL1ToL2LeafValue(worldStateDB: PublicTreesDB, leafIndex: bigint, value?: Fr) {
45
+ (worldStateDB as jest.Mocked<PublicTreesDB>).getL1ToL2LeafValue.mockImplementation((index: bigint) => {
46
+ if (index == leafIndex && value) {
66
47
  return Promise.resolve(value);
67
48
  } else {
68
- // any indices other than mockAtLeafIndex will return a different value
69
- // (or undefined if no value is specified for other indices)
70
- return Promise.resolve(valueAtOtherIndices!);
49
+ return Promise.resolve(Fr.ZERO!);
71
50
  }
72
51
  });
73
52
  }
74
53
 
75
- export function mockGetContractInstance(worldStateDB: WorldStateDB, contractInstance: ContractInstanceWithAddress) {
76
- (worldStateDB as jest.Mocked<WorldStateDB>).getContractInstance.mockResolvedValue(contractInstance);
54
+ export function mockGetContractInstance(contractsDB: PublicContractsDB, contractInstance: ContractInstanceWithAddress) {
55
+ (contractsDB as jest.Mocked<PublicContractsDB>).getContractInstance.mockResolvedValue(contractInstance);
56
+ }
57
+
58
+ export function mockGetContractClass(contractsDB: PublicContractsDB, contractClass: ContractClassPublic) {
59
+ (contractsDB as jest.Mocked<PublicContractsDB>).getContractClass.mockResolvedValue(contractClass);
77
60
  }
78
61
 
79
- export function mockGetContractClass(worldStateDB: WorldStateDB, contractClass: ContractClassPublic) {
80
- (worldStateDB as jest.Mocked<WorldStateDB>).getContractClass.mockResolvedValue(contractClass);
62
+ export function mockGetBytecodeCommitment(contractsDB: PublicContractsDB, commitment: Fr) {
63
+ (contractsDB as jest.Mocked<PublicContractsDB>).getBytecodeCommitment.mockResolvedValue(commitment);
81
64
  }
@@ -0,0 +1,41 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
4
+
5
+ export class ContractsDbCheckpoint {
6
+ private instances: Map<string, ContractInstanceWithAddress> = new Map();
7
+ private classes: Map<string, ContractClassPublic> = new Map();
8
+ private bytecodeCommitments: Map<string, Fr> = new Map();
9
+
10
+ public addInstance(address: AztecAddress, instance: ContractInstanceWithAddress): void {
11
+ this.instances.set(address.toString(), instance);
12
+ }
13
+
14
+ public addClass(classId: Fr, contractClass: ContractClassPublic): void {
15
+ this.classes.set(classId.toString(), contractClass);
16
+ }
17
+
18
+ public addBytecodeCommitment(classId: Fr, commitment: Fr): void {
19
+ this.bytecodeCommitments.set(classId.toString(), commitment);
20
+ }
21
+
22
+ public getInstance(address: AztecAddress): ContractInstanceWithAddress | undefined {
23
+ return this.instances.get(address.toString());
24
+ }
25
+
26
+ public getClass(classId: Fr): ContractClassPublic | undefined {
27
+ return this.classes.get(classId.toString());
28
+ }
29
+
30
+ public getBytecodeCommitment(classId: Fr): Fr | undefined {
31
+ return this.bytecodeCommitments.get(classId.toString());
32
+ }
33
+
34
+ public deepCopy(): ContractsDbCheckpoint {
35
+ const copy = new ContractsDbCheckpoint();
36
+ this.instances.forEach((value, key) => copy.instances.set(key, value));
37
+ this.classes.forEach((value, key) => copy.classes.set(key, value));
38
+ this.bytecodeCommitments.forEach((value, key) => copy.bytecodeCommitments.set(key, value));
39
+ return copy;
40
+ }
41
+ }
@@ -0,0 +1,76 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
5
+ import type { UInt64 } from '@aztec/stdlib/types';
6
+
7
+ /**
8
+ * Database interface for providing access to public state.
9
+ */
10
+ export interface PublicStateDBInterface {
11
+ /**
12
+ * Reads a value from public storage, returning zero if none.
13
+ * @param contract - Owner of the storage.
14
+ * @param slot - Slot to read in the contract storage.
15
+ * @returns The current value in the storage slot.
16
+ */
17
+ storageRead(contract: AztecAddress, slot: Fr): Promise<Fr>;
18
+
19
+ /**
20
+ * Records a write to public storage.
21
+ * @param contract - Owner of the storage.
22
+ * @param slot - Slot to read in the contract storage.
23
+ * @param newValue - The new value to store.
24
+ */
25
+ storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void>;
26
+ }
27
+
28
+ /**
29
+ * Database interface for providing access to public contract data.
30
+ */
31
+ export interface PublicContractsDBInterface {
32
+ /**
33
+ * Returns a contract instance given its address and the given timestamp, or undefined if not exists.
34
+ * @param address - Address of the contract.
35
+ * @param timestamp - Timestamp to get the contract instance at. Contract updates might change the instance.
36
+ * @returns The contract instance or undefined if not found.
37
+ */
38
+ getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
39
+
40
+ /**
41
+ * Returns a publicly deployed contract class.
42
+ * @param contractClassId - ID of the contract class.
43
+ * @returns The contract class or undefined if not found
44
+ */
45
+ getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
46
+
47
+ /**
48
+ * Returns the commitment to the bytecode of a contract class.
49
+ * @param contractClassId - ID of the contract class.
50
+ * @returns The commitment to the bytecode or undefined if not found.
51
+ */
52
+ getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
53
+
54
+ /**
55
+ * Returns the function name of a contract's function given its selector.
56
+ * @param contractAddress - Address of the contract.
57
+ * @param selector - Selector of the function.
58
+ * @returns The name of the function or undefined if not found.
59
+ */
60
+ getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
61
+
62
+ /**
63
+ * Creates a checkpoint of the current contract state.
64
+ */
65
+ createCheckpoint(): void;
66
+
67
+ /**
68
+ * Commits the current checkpoint, merging its state with the parent.
69
+ */
70
+ commitCheckpoint(): void;
71
+
72
+ /**
73
+ * Reverts the current checkpoint, discarding its state.
74
+ */
75
+ revertCheckpoint(): void;
76
+ }