@aztec/simulator 3.0.0-canary.a9708bd → 3.0.0-devnet.20251212

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 (342) hide show
  1. package/dest/client.d.ts +1 -1
  2. package/dest/common/errors.d.ts +2 -8
  3. package/dest/common/errors.d.ts.map +1 -1
  4. package/dest/common/index.d.ts +1 -1
  5. package/dest/common/stats/index.d.ts +1 -1
  6. package/dest/common/stats/stats.d.ts +1 -1
  7. package/dest/private/acvm/acvm.d.ts +1 -1
  8. package/dest/private/acvm/acvm_types.d.ts +1 -1
  9. package/dest/private/acvm/deserialize.d.ts +2 -2
  10. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  11. package/dest/private/acvm/deserialize.js +1 -1
  12. package/dest/private/acvm/index.d.ts +1 -1
  13. package/dest/private/acvm/serialize.d.ts +2 -2
  14. package/dest/private/acvm/serialize.d.ts.map +1 -1
  15. package/dest/private/acvm/serialize.js +1 -1
  16. package/dest/private/acvm_native.d.ts +2 -3
  17. package/dest/private/acvm_native.d.ts.map +1 -1
  18. package/dest/private/acvm_native.js +15 -13
  19. package/dest/private/acvm_wasm.d.ts +1 -1
  20. package/dest/private/acvm_wasm.d.ts.map +1 -1
  21. package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
  22. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
  23. package/dest/private/circuit_recording/circuit_recorder.d.ts +1 -1
  24. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  25. package/dest/private/circuit_recording/circuit_recorder.js +1 -1
  26. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +1 -1
  27. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  28. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +1 -1
  29. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  30. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +2 -2
  31. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  32. package/dest/private/circuit_simulator.d.ts +1 -1
  33. package/dest/private/factory.d.ts +1 -1
  34. package/dest/public/avm/avm_context.d.ts +2 -2
  35. package/dest/public/avm/avm_context.d.ts.map +1 -1
  36. package/dest/public/avm/avm_contract_call_result.d.ts +2 -2
  37. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  38. package/dest/public/avm/avm_execution_environment.d.ts +5 -4
  39. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  40. package/dest/public/avm/avm_execution_environment.js +5 -5
  41. package/dest/public/avm/avm_gas.d.ts +2 -2
  42. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  43. package/dest/public/avm/avm_gas.js +2 -2
  44. package/dest/public/avm/avm_machine_state.d.ts +2 -2
  45. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  46. package/dest/public/avm/avm_memory_types.d.ts +20 -14
  47. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  48. package/dest/public/avm/avm_memory_types.js +10 -3
  49. package/dest/public/avm/avm_simulator.d.ts +4 -3
  50. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  51. package/dest/public/avm/avm_simulator.js +19 -25
  52. package/dest/public/avm/avm_simulator_interface.d.ts +1 -1
  53. package/dest/public/avm/errors.d.ts +13 -16
  54. package/dest/public/avm/errors.d.ts.map +1 -1
  55. package/dest/public/avm/errors.js +21 -22
  56. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -2
  57. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  58. package/dest/public/avm/fixtures/avm_simulation_tester.js +14 -6
  59. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -2
  60. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  61. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +23 -1
  62. package/dest/public/avm/fixtures/initializers.d.ts +2 -3
  63. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  64. package/dest/public/avm/fixtures/initializers.js +6 -4
  65. package/dest/public/avm/fixtures/utils.d.ts +4 -3
  66. package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
  67. package/dest/public/avm/fixtures/utils.js +3 -2
  68. package/dest/public/avm/index.d.ts +1 -1
  69. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  70. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  71. package/dest/public/avm/opcodes/accrued_substate.js +7 -7
  72. package/dest/public/avm/opcodes/addressing_mode.d.ts +1 -1
  73. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  74. package/dest/public/avm/opcodes/addressing_mode.js +4 -5
  75. package/dest/public/avm/opcodes/arithmetic.d.ts +10 -8
  76. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  77. package/dest/public/avm/opcodes/arithmetic.js +11 -1
  78. package/dest/public/avm/opcodes/bitwise.d.ts +5 -5
  79. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  80. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  81. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  82. package/dest/public/avm/opcodes/contract.d.ts +1 -1
  83. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  84. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  85. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  86. package/dest/public/avm/opcodes/conversion.d.ts +1 -1
  87. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  88. package/dest/public/avm/opcodes/conversion.js +3 -0
  89. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  90. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  91. package/dest/public/avm/opcodes/ec_add.js +6 -6
  92. package/dest/public/avm/opcodes/environment_getters.d.ts +1 -1
  93. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  94. package/dest/public/avm/opcodes/environment_getters.js +5 -7
  95. package/dest/public/avm/opcodes/external_calls.d.ts +1 -1
  96. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/external_calls.js +0 -1
  98. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  99. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/hashing.js +3 -1
  101. package/dest/public/avm/opcodes/index.d.ts +1 -1
  102. package/dest/public/avm/opcodes/instruction.d.ts +2 -2
  103. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  104. package/dest/public/avm/opcodes/instruction.js +5 -6
  105. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  106. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  107. package/dest/public/avm/opcodes/memory.d.ts +2 -2
  108. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/memory.js +1 -1
  110. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  111. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/misc.js +28 -8
  113. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  114. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  115. package/dest/public/avm/revert_reason.d.ts +2 -2
  116. package/dest/public/avm/revert_reason.d.ts.map +1 -1
  117. package/dest/public/avm/revert_reason.js +3 -2
  118. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -1
  119. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  120. package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
  121. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  122. package/dest/public/avm/serialization/bytecode_serialization.js +9 -6
  123. package/dest/public/avm/serialization/instruction_serialization.d.ts +9 -1
  124. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  125. package/dest/public/avm/serialization/instruction_serialization.js +11 -1
  126. package/dest/public/avm/test_utils.d.ts +4 -4
  127. package/dest/public/avm/test_utils.d.ts.map +1 -1
  128. package/dest/public/avm/test_utils.js +7 -10
  129. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  130. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  131. package/dest/public/contracts_db_checkpoint.js +30 -0
  132. package/dest/public/db_interfaces.d.ts +14 -2
  133. package/dest/public/db_interfaces.d.ts.map +1 -1
  134. package/dest/public/debug_fn_name.d.ts +15 -2
  135. package/dest/public/debug_fn_name.d.ts.map +1 -1
  136. package/dest/public/debug_fn_name.js +19 -0
  137. package/dest/public/executor_metrics.d.ts +3 -2
  138. package/dest/public/executor_metrics.d.ts.map +1 -1
  139. package/dest/public/executor_metrics.js +1 -1
  140. package/dest/public/executor_metrics_interface.d.ts +3 -2
  141. package/dest/public/executor_metrics_interface.d.ts.map +1 -1
  142. package/dest/public/fixtures/amm_test.d.ts +1 -1
  143. package/dest/public/fixtures/amm_test.js +2 -2
  144. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  145. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  146. package/dest/public/fixtures/bulk_test.js +64 -131
  147. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  148. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  149. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  150. package/dest/public/fixtures/custom_bytecode_tests.d.ts +10 -0
  151. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  152. package/dest/public/fixtures/custom_bytecode_tests.js +130 -0
  153. package/dest/public/fixtures/index.d.ts +3 -2
  154. package/dest/public/fixtures/index.d.ts.map +1 -1
  155. package/dest/public/fixtures/index.js +2 -1
  156. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -4
  157. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
  158. package/dest/public/fixtures/minimal_public_tx.js +8 -22
  159. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -4
  160. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  161. package/dest/public/fixtures/public_tx_simulation_tester.js +29 -10
  162. package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
  163. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  164. package/dest/public/fixtures/simple_contract_data_source.js +4 -4
  165. package/dest/public/fixtures/token_test.d.ts +6 -2
  166. package/dest/public/fixtures/token_test.d.ts.map +1 -1
  167. package/dest/public/fixtures/token_test.js +13 -12
  168. package/dest/public/fixtures/utils.d.ts +2 -2
  169. package/dest/public/fixtures/utils.d.ts.map +1 -1
  170. package/dest/public/fixtures/utils.js +4 -4
  171. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
  172. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  173. package/dest/public/fuzzing/avm_fuzzer_simulator.js +136 -0
  174. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  175. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  176. package/dest/public/fuzzing/avm_simulator_bin.js +84 -0
  177. package/dest/public/hinting_db_sources.d.ts +15 -4
  178. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  179. package/dest/public/hinting_db_sources.js +69 -13
  180. package/dest/public/index.d.ts +3 -2
  181. package/dest/public/index.d.ts.map +1 -1
  182. package/dest/public/index.js +1 -1
  183. package/dest/public/public_db_sources.d.ts +24 -65
  184. package/dest/public/public_db_sources.d.ts.map +1 -1
  185. package/dest/public/public_db_sources.js +85 -132
  186. package/dest/public/public_errors.d.ts +12 -0
  187. package/dest/public/public_errors.d.ts.map +1 -0
  188. package/dest/public/public_errors.js +13 -0
  189. package/dest/public/public_processor/guarded_merkle_tree.d.ts +5 -2
  190. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  191. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  192. package/dest/public/public_processor/public_processor.d.ts +11 -13
  193. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  194. package/dest/public/public_processor/public_processor.js +61 -43
  195. package/dest/public/public_processor/public_processor_metrics.d.ts +1 -1
  196. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  197. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
  198. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  199. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +94 -0
  200. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +38 -0
  201. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  202. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +93 -0
  203. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  204. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  205. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  206. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  207. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  208. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +170 -0
  209. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
  210. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  211. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  212. package/dest/public/public_tx_simulator/factories.d.ts +13 -0
  213. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  214. package/dest/public/public_tx_simulator/factories.js +28 -0
  215. package/dest/public/public_tx_simulator/index.d.ts +6 -1
  216. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  217. package/dest/public/public_tx_simulator/index.js +3 -0
  218. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +16 -8
  219. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
  220. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +7 -8
  221. package/dest/public/public_tx_simulator/public_tx_context.d.ts +9 -4
  222. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  223. package/dest/public/public_tx_simulator/public_tx_context.js +22 -10
  224. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +22 -29
  225. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  226. package/dest/public/public_tx_simulator/public_tx_simulator.js +178 -127
  227. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  228. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  229. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  230. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +4 -3
  231. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
  232. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +2 -2
  233. package/dest/public/side_effect_errors.d.ts +42 -2
  234. package/dest/public/side_effect_errors.d.ts.map +1 -1
  235. package/dest/public/side_effect_errors.js +70 -1
  236. package/dest/public/side_effect_trace.d.ts +13 -7
  237. package/dest/public/side_effect_trace.d.ts.map +1 -1
  238. package/dest/public/side_effect_trace.js +36 -21
  239. package/dest/public/side_effect_trace_interface.d.ts +9 -4
  240. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  241. package/dest/public/state_manager/index.d.ts +1 -1
  242. package/dest/public/state_manager/nullifiers.d.ts +2 -5
  243. package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
  244. package/dest/public/state_manager/nullifiers.js +1 -6
  245. package/dest/public/state_manager/public_storage.d.ts +2 -2
  246. package/dest/public/state_manager/public_storage.d.ts.map +1 -1
  247. package/dest/public/state_manager/public_storage.js +1 -1
  248. package/dest/public/state_manager/state_manager.d.ts +16 -13
  249. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  250. package/dest/public/state_manager/state_manager.js +64 -21
  251. package/dest/public/test_executor_metrics.d.ts +4 -3
  252. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  253. package/dest/public/test_executor_metrics.js +5 -4
  254. package/dest/public/unique_class_ids.d.ts +1 -1
  255. package/dest/public/unique_class_ids.d.ts.map +1 -1
  256. package/dest/public/utils.d.ts +1 -1
  257. package/dest/server.d.ts +1 -1
  258. package/dest/testing.d.ts +1 -1
  259. package/package.json +24 -19
  260. package/src/common/errors.ts +1 -1
  261. package/src/private/acvm/deserialize.ts +1 -1
  262. package/src/private/acvm/serialize.ts +1 -1
  263. package/src/private/acvm_native.ts +18 -11
  264. package/src/private/circuit_recording/circuit_recorder.ts +1 -1
  265. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +1 -1
  266. package/src/public/avm/avm_context.ts +1 -1
  267. package/src/public/avm/avm_contract_call_result.ts +1 -1
  268. package/src/public/avm/avm_execution_environment.ts +4 -3
  269. package/src/public/avm/avm_gas.ts +5 -5
  270. package/src/public/avm/avm_machine_state.ts +1 -1
  271. package/src/public/avm/avm_memory_types.ts +12 -3
  272. package/src/public/avm/avm_simulator.ts +24 -33
  273. package/src/public/avm/errors.ts +24 -27
  274. package/src/public/avm/fixtures/avm_simulation_tester.ts +14 -4
  275. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +33 -1
  276. package/src/public/avm/fixtures/initializers.ts +7 -8
  277. package/src/public/avm/fixtures/utils.ts +3 -2
  278. package/src/public/avm/opcodes/accrued_substate.ts +4 -4
  279. package/src/public/avm/opcodes/addressing_mode.ts +5 -5
  280. package/src/public/avm/opcodes/arithmetic.ts +13 -1
  281. package/src/public/avm/opcodes/conversion.ts +4 -0
  282. package/src/public/avm/opcodes/ec_add.ts +6 -6
  283. package/src/public/avm/opcodes/environment_getters.ts +6 -8
  284. package/src/public/avm/opcodes/external_calls.ts +0 -1
  285. package/src/public/avm/opcodes/hashing.ts +3 -1
  286. package/src/public/avm/opcodes/instruction.ts +8 -6
  287. package/src/public/avm/opcodes/memory.ts +1 -1
  288. package/src/public/avm/opcodes/misc.ts +41 -7
  289. package/src/public/avm/revert_reason.ts +6 -3
  290. package/src/public/avm/serialization/bytecode_serialization.ts +17 -6
  291. package/src/public/avm/serialization/instruction_serialization.ts +13 -1
  292. package/src/public/avm/test_utils.ts +7 -15
  293. package/src/public/contracts_db_checkpoint.ts +41 -0
  294. package/src/public/db_interfaces.ts +16 -1
  295. package/src/public/debug_fn_name.ts +26 -1
  296. package/src/public/executor_metrics.ts +2 -1
  297. package/src/public/executor_metrics_interface.ts +2 -1
  298. package/src/public/fixtures/amm_test.ts +2 -2
  299. package/src/public/fixtures/bulk_test.ts +42 -24
  300. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  301. package/src/public/fixtures/custom_bytecode_tests.ts +159 -0
  302. package/src/public/fixtures/index.ts +2 -1
  303. package/src/public/fixtures/minimal_public_tx.ts +9 -33
  304. package/src/public/fixtures/public_tx_simulation_tester.ts +52 -17
  305. package/src/public/fixtures/simple_contract_data_source.ts +8 -9
  306. package/src/public/fixtures/token_test.ts +18 -10
  307. package/src/public/fixtures/utils.ts +4 -4
  308. package/src/public/fuzzing/avm_fuzzer_simulator.ts +233 -0
  309. package/src/public/fuzzing/avm_simulator_bin.ts +121 -0
  310. package/src/public/hinting_db_sources.ts +113 -10
  311. package/src/public/index.ts +8 -1
  312. package/src/public/public_db_sources.ts +112 -175
  313. package/src/public/public_errors.ts +14 -0
  314. package/src/public/public_processor/guarded_merkle_tree.ts +6 -1
  315. package/src/public/public_processor/public_processor.ts +92 -70
  316. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +116 -0
  317. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +155 -0
  318. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
  319. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +236 -0
  320. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
  321. package/src/public/public_tx_simulator/factories.ts +41 -0
  322. package/src/public/public_tx_simulator/index.ts +5 -0
  323. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +13 -14
  324. package/src/public/public_tx_simulator/public_tx_context.ts +20 -7
  325. package/src/public/public_tx_simulator/public_tx_simulator.ts +265 -179
  326. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -0
  327. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +4 -13
  328. package/src/public/side_effect_errors.ts +91 -1
  329. package/src/public/side_effect_trace.ts +49 -24
  330. package/src/public/side_effect_trace_interface.ts +7 -1
  331. package/src/public/state_manager/nullifiers.ts +2 -8
  332. package/src/public/state_manager/public_storage.ts +1 -1
  333. package/src/public/state_manager/state_manager.ts +87 -39
  334. package/src/public/test_executor_metrics.ts +7 -5
  335. package/dest/public/bytecode_errors.d.ts +0 -4
  336. package/dest/public/bytecode_errors.d.ts.map +0 -1
  337. package/dest/public/bytecode_errors.js +0 -6
  338. package/dest/public/tx_contract_cache.d.ts +0 -41
  339. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  340. package/dest/public/tx_contract_cache.js +0 -49
  341. package/src/public/bytecode_errors.ts +0 -6
  342. package/src/public/tx_contract_cache.ts +0 -69
@@ -0,0 +1,233 @@
1
+ import {
2
+ MAX_ENQUEUED_CALLS_PER_TX,
3
+ MAX_L2_TO_L1_MSGS_PER_TX,
4
+ MAX_NOTE_HASHES_PER_TX,
5
+ MAX_NULLIFIERS_PER_TX,
6
+ MAX_PRIVATE_LOGS_PER_TX,
7
+ } from '@aztec/constants';
8
+ import { padArrayEnd } from '@aztec/foundation/collection';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
10
+ import { AvmTxHint, type PublicTxResult } from '@aztec/stdlib/avm';
11
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
+ import { contractClassPublicFromPlainObject, contractInstanceWithAddressFromPlainObject } from '@aztec/stdlib/contract';
13
+ import {
14
+ PartialPrivateTailPublicInputsForPublic,
15
+ PrivateKernelTailCircuitPublicInputs,
16
+ PrivateToPublicAccumulatedData,
17
+ PublicCallRequest,
18
+ } from '@aztec/stdlib/kernel';
19
+ import { PrivateLog } from '@aztec/stdlib/logs';
20
+ import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
21
+ import { ChonkProof } from '@aztec/stdlib/proofs';
22
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
23
+ import { BlockHeader, GlobalVariables, HashedValues, Tx, TxConstantData, TxContext, TxHash } from '@aztec/stdlib/tx';
24
+ import type { NativeWorldStateService } from '@aztec/world-state';
25
+
26
+ import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
27
+ import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
28
+ import { PublicContractsDB } from '../public_db_sources.js';
29
+ import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
30
+
31
+ /**
32
+ * Request structure for fuzzer simulation communication from C++.
33
+ * Matches the C++ FuzzerSimulationRequest struct
34
+ */
35
+ export class FuzzerSimulationRequest {
36
+ constructor(
37
+ public readonly wsDataDir: string,
38
+ public readonly wsMapSizeKb: number,
39
+ public readonly tx: AvmTxHint,
40
+ public readonly globals: GlobalVariables,
41
+ public readonly contractClasses: any[], // Raw, processed by addContractClassFromCpp
42
+ public readonly contractInstances: [any, any][], // Raw pairs [address, instance]
43
+ ) {}
44
+
45
+ static fromPlainObject(obj: any): FuzzerSimulationRequest {
46
+ if (obj instanceof FuzzerSimulationRequest) {
47
+ return obj;
48
+ }
49
+ return new FuzzerSimulationRequest(
50
+ obj.wsDataDir,
51
+ obj.wsMapSizeKb,
52
+ AvmTxHint.fromPlainObject(obj.tx),
53
+ GlobalVariables.fromPlainObject(obj.globals),
54
+ obj.contractClasses,
55
+ obj.contractInstances,
56
+ );
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
62
+ * This allows using PublicTxSimulator.simulate() with fuzzer-generated transactions.
63
+ */
64
+ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
65
+ // Create TxHash from the C++ tx hash string
66
+ if (!cppTx.hash) {
67
+ throw new Error(`cppTx.hash is undefined. Keys: ${Object.keys(cppTx || {}).join(', ')}`);
68
+ }
69
+ const txHash = TxHash.fromString(cppTx.hash);
70
+
71
+ // Extract PublicCallRequest instances from enqueued calls
72
+ const setupCallRequests = cppTx.setupEnqueuedCalls.map(call => call.request);
73
+ const paddedSetupCalls = padArrayEnd(setupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
74
+
75
+ const appLogicCallRequests = cppTx.appLogicEnqueuedCalls.map(call => call.request);
76
+ const paddedAppLogicCalls = padArrayEnd(appLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
77
+
78
+ // Build non-revertible accumulated data from C++ tx
79
+ const emptyNonRevertible = PrivateToPublicAccumulatedData.empty();
80
+ const nonRevertibleAccumulatedData = new PrivateToPublicAccumulatedData(
81
+ padArrayEnd(cppTx.nonRevertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
82
+ padArrayEnd(cppTx.nonRevertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
83
+ padArrayEnd(
84
+ cppTx.nonRevertibleAccumulatedData.l2ToL1Messages,
85
+ ScopedL2ToL1Message.empty(),
86
+ MAX_L2_TO_L1_MSGS_PER_TX,
87
+ ),
88
+ padArrayEnd(cppTx.nonRevertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
89
+ emptyNonRevertible.contractClassLogsHashes,
90
+ paddedSetupCalls,
91
+ );
92
+
93
+ // Build revertible accumulated data from C++ tx
94
+ const emptyRevertible = PrivateToPublicAccumulatedData.empty();
95
+ const revertibleAccumulatedData = new PrivateToPublicAccumulatedData(
96
+ padArrayEnd(cppTx.revertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
97
+ padArrayEnd(cppTx.revertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
98
+ padArrayEnd(cppTx.revertibleAccumulatedData.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
99
+ padArrayEnd(cppTx.revertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
100
+ emptyRevertible.contractClassLogsHashes,
101
+ paddedAppLogicCalls,
102
+ );
103
+
104
+ // Build teardown call request (if exists)
105
+ const teardownCallRequest = cppTx.teardownEnqueuedCall?.request ?? PublicCallRequest.empty();
106
+
107
+ // Create forPublic structure
108
+ const forPublic = new PartialPrivateTailPublicInputsForPublic(
109
+ nonRevertibleAccumulatedData,
110
+ revertibleAccumulatedData,
111
+ teardownCallRequest,
112
+ );
113
+
114
+ // Build TxContext - gasSettings is already a proper GasSettings after AvmTxHint.fromPlainObject
115
+ const txContext = new TxContext(
116
+ Fr.ZERO, // chainId - this is fine because simulation actually reads from globalVariables not here
117
+ Fr.ZERO, // version - this is fine because simulation actually reads from globalVariables not here
118
+ cppTx.gasSettings,
119
+ );
120
+
121
+ // Build TxConstantData
122
+ const constants = new TxConstantData(
123
+ BlockHeader.empty(), // anchorBlockHeader (unused in simulation)
124
+ txContext,
125
+ Fr.ZERO, // vkTreeRoot - not needed for public simulation
126
+ Fr.ZERO, // protocolContractsHash - not needed for public simulation
127
+ );
128
+
129
+ const data = new PrivateKernelTailCircuitPublicInputs(
130
+ constants,
131
+ cppTx.gasUsedByPrivate,
132
+ cppTx.feePayer,
133
+ 0n, // includeByTimestamp
134
+ forPublic,
135
+ undefined, // forRollup - not needed for public simulation
136
+ );
137
+
138
+ // Build publicFunctionCalldata from all enqueued calls
139
+ // Calldata is already Fr[] after AvmTxHint.fromPlainObject
140
+ const publicFunctionCalldata: HashedValues[] = [];
141
+
142
+ // Add setup calls
143
+ for (const call of cppTx.setupEnqueuedCalls || []) {
144
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
145
+ }
146
+
147
+ // Add app logic calls
148
+ for (const call of cppTx.appLogicEnqueuedCalls || []) {
149
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
150
+ }
151
+
152
+ // Add teardown call if present
153
+ if (cppTx.teardownEnqueuedCall) {
154
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(cppTx.teardownEnqueuedCall.calldata));
155
+ }
156
+
157
+ // Extract contract class log fields from ContractDeploymentData
158
+ const contractClassLogFields = [
159
+ ...cppTx.nonRevertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
160
+ ...cppTx.revertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
161
+ ];
162
+
163
+ // Create the Tx
164
+ return new Tx(
165
+ txHash,
166
+ data,
167
+ ChonkProof.empty(), // No real proof needed for simulation
168
+ contractClassLogFields,
169
+ publicFunctionCalldata,
170
+ );
171
+ }
172
+
173
+ /**
174
+ * A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
175
+ * It provides methods for registering contracts from C++ msgpack data and simulating transactions.
176
+ */
177
+ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
178
+ private simulator: PublicTxSimulator;
179
+
180
+ constructor(
181
+ merkleTrees: MerkleTreeWriteOperations,
182
+ contractDataSource: SimpleContractDataSource,
183
+ globals: GlobalVariables,
184
+ ) {
185
+ super(contractDataSource, merkleTrees);
186
+ const contractsDb = new PublicContractsDB(contractDataSource);
187
+ this.simulator = new PublicTxSimulator(merkleTrees, contractsDb, globals, {
188
+ skipFeeEnforcement: true,
189
+ collectDebugLogs: false,
190
+ collectHints: false,
191
+ collectStatistics: false,
192
+ collectCallMetadata: false,
193
+ });
194
+ }
195
+
196
+ /**
197
+ * Static factory method to create an AvmFuzzerSimulator.
198
+ */
199
+ public static async create(
200
+ worldStateService: NativeWorldStateService,
201
+ globals: GlobalVariables,
202
+ ): Promise<AvmFuzzerSimulator> {
203
+ const contractDataSource = new SimpleContractDataSource();
204
+ const merkleTrees = await worldStateService.fork();
205
+ return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals);
206
+ }
207
+
208
+ /**
209
+ * Simulate a transaction from a C++ AvmTxHint.
210
+ */
211
+ public async simulate(txHint: AvmTxHint): Promise<PublicTxResult> {
212
+ const tx = await createTxFromHint(txHint);
213
+ return await this.simulator.simulate(tx);
214
+ }
215
+
216
+ /**
217
+ * Add a contract class from C++ raw msgpack data.
218
+ */
219
+ public async addContractClassFromCpp(rawClass: any): Promise<void> {
220
+ const contractClass = contractClassPublicFromPlainObject(rawClass);
221
+ await this.contractDataSource.addContractClass(contractClass);
222
+ }
223
+
224
+ /**
225
+ * Add a contract instance from C++ raw msgpack data.
226
+ * This also inserts the contract address nullifier into the nullifier tree.
227
+ */
228
+ public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
229
+ const address = AztecAddress.fromPlainObject(rawAddress);
230
+ const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
231
+ await this.addContractInstance(instance);
232
+ }
233
+ }
@@ -0,0 +1,121 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import {
4
+ AvmCircuitPublicInputs,
5
+ type AvmTxHint,
6
+ deserializeFromMessagePack,
7
+ serializeWithMessagePack,
8
+ } from '@aztec/stdlib/avm';
9
+ import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
10
+ import { NativeWorldStateService } from '@aztec/world-state';
11
+
12
+ import { writeSync } from 'fs';
13
+ import { createInterface } from 'readline';
14
+
15
+ import { AvmFuzzerSimulator, FuzzerSimulationRequest } from './avm_fuzzer_simulator.js';
16
+
17
+ // This cache holds opened world states to avoid reopening them for each invocation.
18
+ // It's a map so that in the future we could support multiple world states (if we had multiple fuzzers).
19
+ const worldStateCache = new Map<string, NativeWorldStateService>();
20
+
21
+ async function openExistingWorldState(dataDir: string, mapSizeKb: number): Promise<NativeWorldStateService> {
22
+ const cached = worldStateCache.get(dataDir);
23
+ if (cached) {
24
+ return cached;
25
+ }
26
+
27
+ const ws = await NativeWorldStateService.new(EthAddress.ZERO, dataDir, {
28
+ archiveTreeMapSizeKb: mapSizeKb,
29
+ nullifierTreeMapSizeKb: mapSizeKb,
30
+ noteHashTreeMapSizeKb: mapSizeKb,
31
+ messageTreeMapSizeKb: mapSizeKb,
32
+ publicDataTreeMapSizeKb: mapSizeKb,
33
+ });
34
+
35
+ worldStateCache.set(dataDir, ws);
36
+ return ws;
37
+ }
38
+
39
+ async function simulateWithFuzzer(
40
+ dataDir: string,
41
+ mapSizeKb: number,
42
+ txHint: AvmTxHint,
43
+ globals: GlobalVariables,
44
+ rawContractClasses: any[], // Replace these when we are moving contract classes to TS
45
+ rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
46
+ ): Promise<{ reverted: boolean; output: Fr[]; revertReason?: string; publicInputs: AvmCircuitPublicInputs }> {
47
+ const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
48
+
49
+ const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
50
+
51
+ // Register contract classes from C++
52
+ for (const rawClass of rawContractClasses) {
53
+ await simulator.addContractClassFromCpp(rawClass);
54
+ }
55
+
56
+ // Register contract instances from C++
57
+ for (const [rawAddress, rawInstance] of rawContractInstances) {
58
+ await simulator.addContractInstanceFromCpp(rawAddress, rawInstance);
59
+ }
60
+
61
+ const result = await simulator.simulate(txHint);
62
+
63
+ const output = result
64
+ .getAppLogicReturnValues()
65
+ .flatMap((rv: { values?: Fr[] } | undefined) => rv?.values?.filter((v: Fr | null | undefined) => v != null) ?? []);
66
+
67
+ return {
68
+ reverted: !result.revertCode.isOK(),
69
+ output,
70
+ revertReason: result.findRevertReason()?.message,
71
+ publicInputs: result.publicInputs!,
72
+ };
73
+ }
74
+
75
+ async function execute(base64Line: string): Promise<void> {
76
+ try {
77
+ // Decode base64 and deserialize the entire request from msgpack
78
+ const buffer = Buffer.from(base64Line.trim(), 'base64');
79
+ const rawRequest = deserializeFromMessagePack(buffer);
80
+ const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
81
+
82
+ // Run the TS simulation
83
+ const result = await simulateWithFuzzer(
84
+ request.wsDataDir,
85
+ request.wsMapSizeKb,
86
+ request.tx,
87
+ request.globals,
88
+ request.contractClasses,
89
+ request.contractInstances,
90
+ );
91
+
92
+ // Serialize the result to msgpack and encode it in base64 for output
93
+ const resultBuffer = serializeWithMessagePack({
94
+ reverted: result.reverted,
95
+ output: result.output,
96
+ revertReason: result.revertReason ?? '',
97
+ endTreeSnapshots: result.publicInputs.endTreeSnapshots,
98
+ });
99
+ writeSync(process.stdout.fd, resultBuffer.toString('base64') + '\n');
100
+ } catch (error: any) {
101
+ const errorResult = serializeWithMessagePack({
102
+ reverted: true,
103
+ output: [] as string[],
104
+ revertReason: `Unexpected Error ${error.message}`,
105
+ endTreeSnapshots: TreeSnapshots.empty(),
106
+ });
107
+ writeSync(process.stdout.fd, errorResult.toString('base64') + '\n');
108
+ }
109
+ }
110
+
111
+ function mainLoop() {
112
+ const rl = createInterface({ input: process.stdin, terminal: false });
113
+ rl.on('line', (line: string) => {
114
+ if (line.trim()) {
115
+ void execute(line);
116
+ }
117
+ });
118
+ rl.on('close', () => process.exit(0));
119
+ }
120
+
121
+ mainLoop();
@@ -1,5 +1,6 @@
1
- import { sha256Trunc } from '@aztec/foundation/crypto';
2
- import { Fr } from '@aztec/foundation/fields';
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { sha256Trunc } from '@aztec/foundation/crypto/sha256';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
5
  import type { IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
5
6
  import type { FunctionSelector } from '@aztec/stdlib/abi';
@@ -8,8 +9,12 @@ import {
8
9
  AvmBytecodeCommitmentHint,
9
10
  AvmCommitCheckpointHint,
10
11
  AvmContractClassHint,
12
+ AvmContractDbCommitCheckpointHint,
13
+ AvmContractDbCreateCheckpointHint,
14
+ AvmContractDbRevertCheckpointHint,
11
15
  AvmContractInstanceHint,
12
16
  AvmCreateCheckpointHint,
17
+ AvmDebugFunctionNameHint,
13
18
  type AvmExecutionHints,
14
19
  AvmGetLeafPreimageHintNullifierTree,
15
20
  AvmGetLeafPreimageHintPublicDataTree,
@@ -40,6 +45,7 @@ import {
40
45
  } from '@aztec/stdlib/trees';
41
46
  import { TreeSnapshots } from '@aztec/stdlib/tx';
42
47
  import type { UInt64 } from '@aztec/stdlib/types';
48
+ import type { WorldStateRevision } from '@aztec/stdlib/world-state';
43
49
 
44
50
  import { strict as assert } from 'assert';
45
51
 
@@ -49,8 +55,11 @@ import type { PublicContractsDBInterface } from './db_interfaces.js';
49
55
  * A public contracts database that forwards requests and collects AVM hints.
50
56
  */
51
57
  export class HintingPublicContractsDB implements PublicContractsDBInterface {
52
- // We deduplicate contract classes because they include the whole bytecode.
53
- private contractClassIds: Set<bigint> = new Set();
58
+ private static readonly log: Logger = createLogger('simulator:hinting-public-contracts-db');
59
+
60
+ private checkpointActionCounter: number = 0;
61
+ private nextCheckpointId: number = 1;
62
+ private checkpointStack: number[] = [0];
54
63
 
55
64
  constructor(
56
65
  private readonly db: PublicContractsDBInterface,
@@ -63,9 +72,11 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
63
72
  ): Promise<ContractInstanceWithAddress | undefined> {
64
73
  const instance = await this.db.getContractInstance(address, timestamp);
65
74
  if (instance) {
66
- // We don't need to hint the block number because it doesn't change.
75
+ const hintKey = this.getHintKey();
76
+
67
77
  this.hints.contractInstances.push(
68
78
  new AvmContractInstanceHint(
79
+ hintKey,
69
80
  instance.address,
70
81
  instance.salt,
71
82
  instance.deployer,
@@ -75,22 +86,31 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
75
86
  instance.publicKeys,
76
87
  ),
77
88
  );
89
+
90
+ HintingPublicContractsDB.log.trace(
91
+ `[getContractInstance:${hintKey}] Added contract instance ${instance.address.toString()} to hints.`,
92
+ );
78
93
  }
79
94
  return instance;
80
95
  }
81
96
 
82
97
  public async getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined> {
83
98
  const contractClass = await this.db.getContractClass(contractClassId);
84
- if (contractClass && !this.contractClassIds.has(contractClassId.toBigInt())) {
85
- this.contractClassIds.add(contractClassId.toBigInt());
99
+ if (contractClass) {
100
+ const hintKey = this.getHintKey();
86
101
  this.hints.contractClasses.push(
87
102
  new AvmContractClassHint(
103
+ hintKey,
88
104
  contractClass.id,
89
105
  contractClass.artifactHash,
90
106
  contractClass.privateFunctionsRoot,
91
107
  contractClass.packedBytecode,
92
108
  ),
93
109
  );
110
+
111
+ HintingPublicContractsDB.log.trace(
112
+ `[getContractClass:${hintKey}] Added contract class ${contractClassId.toString()} to hints.`,
113
+ );
94
114
  }
95
115
  return contractClass;
96
116
  }
@@ -98,7 +118,12 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
98
118
  public async getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined> {
99
119
  const commitment = await this.db.getBytecodeCommitment(contractClassId);
100
120
  if (commitment) {
101
- this.hints.bytecodeCommitments.push(new AvmBytecodeCommitmentHint(contractClassId, commitment));
121
+ const hintKey = this.getHintKey();
122
+ this.hints.bytecodeCommitments.push(new AvmBytecodeCommitmentHint(hintKey, contractClassId, commitment));
123
+
124
+ HintingPublicContractsDB.log.trace(
125
+ `[getBytecodeCommitment:${hintKey}] Added bytecode commitment ${commitment.toString()} to hints for contract class ${contractClassId.toString()}.`,
126
+ );
102
127
  }
103
128
  return commitment;
104
129
  }
@@ -107,7 +132,81 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
107
132
  contractAddress: AztecAddress,
108
133
  selector: FunctionSelector,
109
134
  ): Promise<string | undefined> {
110
- return await this.db.getDebugFunctionName(contractAddress, selector);
135
+ const name = await this.db.getDebugFunctionName(contractAddress, selector);
136
+ if (name) {
137
+ HintingPublicContractsDB.log.debug(
138
+ `[getDebugFunctionName] Adding debug function name ${name} to hints for contract ${contractAddress.toString()} and selector ${selector.toString()}.`,
139
+ );
140
+ // We hint selector as a field to make things way simpler in C++.
141
+ this.hints.debugFunctionNames.push(new AvmDebugFunctionNameHint(contractAddress, selector.toField(), name));
142
+ }
143
+ return name;
144
+ }
145
+
146
+ public createCheckpoint(): void {
147
+ const hintKey = this.getHintKey();
148
+ this.checkpointActionCounter++;
149
+ const oldCheckpointId = this.getCurrentCheckpointId();
150
+
151
+ this.db.createCheckpoint();
152
+
153
+ const newCheckpointId = this.nextCheckpointId++;
154
+ this.checkpointStack.push(newCheckpointId);
155
+
156
+ this.hints.contractDbCreateCheckpointHints.push(
157
+ new AvmContractDbCreateCheckpointHint(hintKey, oldCheckpointId, newCheckpointId),
158
+ );
159
+
160
+ HintingPublicContractsDB.log.trace(
161
+ `[createCheckpoint:${hintKey}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId}.`,
162
+ );
163
+ }
164
+
165
+ public commitCheckpoint(): void {
166
+ const hintKey = this.getHintKey();
167
+ this.checkpointActionCounter++;
168
+ const oldCheckpointId = this.getCurrentCheckpointId();
169
+
170
+ this.db.commitCheckpoint();
171
+
172
+ this.checkpointStack.pop();
173
+ const newCheckpointId = this.getCurrentCheckpointId();
174
+
175
+ this.hints.contractDbCommitCheckpointHints.push(
176
+ new AvmContractDbCommitCheckpointHint(hintKey, oldCheckpointId, newCheckpointId),
177
+ );
178
+
179
+ HintingPublicContractsDB.log.trace(
180
+ `[commitCheckpoint:${hintKey}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId}.`,
181
+ );
182
+ }
183
+
184
+ public revertCheckpoint(): void {
185
+ const hintKey = this.getHintKey();
186
+ this.checkpointActionCounter++;
187
+ const oldCheckpointId = this.getCurrentCheckpointId();
188
+
189
+ this.db.revertCheckpoint();
190
+
191
+ this.checkpointStack.pop();
192
+ const newCheckpointId = this.getCurrentCheckpointId();
193
+
194
+ this.hints.contractDbRevertCheckpointHints.push(
195
+ new AvmContractDbRevertCheckpointHint(hintKey, oldCheckpointId, newCheckpointId),
196
+ );
197
+
198
+ HintingPublicContractsDB.log.trace(
199
+ `[revertCheckpoint:${hintKey}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId}.`,
200
+ );
201
+ }
202
+
203
+ // Private methods.
204
+ private getHintKey(): number {
205
+ return this.checkpointActionCounter;
206
+ }
207
+
208
+ private getCurrentCheckpointId(): number {
209
+ return this.checkpointStack[this.checkpointStack.length - 1];
111
210
  }
112
211
  }
113
212
 
@@ -449,6 +548,10 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
449
548
  return this.db.getInitialHeader();
450
549
  }
451
550
 
551
+ public getRevision(): WorldStateRevision {
552
+ return this.db.getRevision();
553
+ }
554
+
452
555
  public async updateArchive(header: any): Promise<void> {
453
556
  return await this.db.updateArchive(header);
454
557
  }
@@ -494,7 +597,7 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
494
597
  public async getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(
495
598
  treeId: ID,
496
599
  leafIndices: bigint[],
497
- ): Promise<(bigint | undefined)[]> {
600
+ ): Promise<(BlockNumber | undefined)[]> {
498
601
  return await this.db.getBlockNumbersForLeafIndices(treeId, leafIndices);
499
602
  }
500
603
  }
@@ -1,5 +1,12 @@
1
1
  export { PublicContractsDB } from './public_db_sources.js';
2
2
  export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
3
3
  export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
4
- export { PublicTxSimulator, TelemetryPublicTxSimulator, type PublicTxResult } from './public_tx_simulator/index.js';
4
+ export {
5
+ CppPublicTxSimulator,
6
+ createPublicTxSimulatorForBlockBuilding,
7
+ DumpingCppPublicTxSimulator,
8
+ type PublicTxSimulatorInterface,
9
+ TelemetryCppPublicTxSimulator,
10
+ } from './public_tx_simulator/index.js';
11
+ export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
5
12
  export { getCallRequestsWithCalldataByPhase } from './utils.js';