@aztec/simulator 0.0.1-commit.5daedc8 → 0.0.1-commit.6201a7b05

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 (332) hide show
  1. package/README.md +6 -4
  2. package/dest/common/errors.d.ts +8 -2
  3. package/dest/common/errors.d.ts.map +1 -1
  4. package/dest/private/acvm/acvm.d.ts +4 -2
  5. package/dest/private/acvm/acvm.d.ts.map +1 -1
  6. package/dest/private/acvm/acvm.js +4 -3
  7. package/dest/private/acvm/deserialize.d.ts +2 -2
  8. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  9. package/dest/private/acvm/deserialize.js +1 -1
  10. package/dest/private/acvm/serialize.d.ts +2 -2
  11. package/dest/private/acvm/serialize.d.ts.map +1 -1
  12. package/dest/private/acvm/serialize.js +1 -1
  13. package/dest/private/acvm_native.d.ts +5 -3
  14. package/dest/private/acvm_native.d.ts.map +1 -1
  15. package/dest/private/acvm_native.js +8 -6
  16. package/dest/private/acvm_wasm.d.ts +4 -3
  17. package/dest/private/acvm_wasm.d.ts.map +1 -1
  18. package/dest/private/acvm_wasm.js +4 -4
  19. package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
  20. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  21. package/dest/private/circuit_recording/circuit_recorder.js +23 -20
  22. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
  23. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  24. package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
  25. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  26. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  27. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  28. package/dest/private/factory.d.ts +3 -3
  29. package/dest/private/factory.d.ts.map +1 -1
  30. package/dest/private/factory.js +7 -4
  31. package/dest/public/avm/avm_context.d.ts +3 -3
  32. package/dest/public/avm/avm_context.d.ts.map +1 -1
  33. package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
  34. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  35. package/dest/public/avm/avm_contract_call_result.js +3 -3
  36. package/dest/public/avm/avm_execution_environment.d.ts +7 -6
  37. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  38. package/dest/public/avm/avm_execution_environment.js +1 -1
  39. package/dest/public/avm/avm_gas.d.ts +1 -1
  40. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  41. package/dest/public/avm/avm_gas.js +3 -3
  42. package/dest/public/avm/avm_machine_state.d.ts +7 -6
  43. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  44. package/dest/public/avm/avm_machine_state.js +3 -2
  45. package/dest/public/avm/avm_memory_types.d.ts +2 -2
  46. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  47. package/dest/public/avm/avm_memory_types.js +4 -1
  48. package/dest/public/avm/avm_simulator.d.ts +4 -3
  49. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  50. package/dest/public/avm/avm_simulator.js +12 -10
  51. package/dest/public/avm/calldata.d.ts +51 -0
  52. package/dest/public/avm/calldata.d.ts.map +1 -0
  53. package/dest/public/avm/calldata.js +64 -0
  54. package/dest/public/avm/errors.d.ts +8 -2
  55. package/dest/public/avm/errors.d.ts.map +1 -1
  56. package/dest/public/avm/errors.js +14 -2
  57. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  58. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  59. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  60. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
  61. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  62. package/dest/public/avm/fixtures/avm_simulation_tester.js +4 -3
  63. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -2
  64. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  65. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +1 -1
  66. package/dest/public/avm/fixtures/initializers.d.ts +2 -2
  67. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  68. package/dest/public/avm/fixtures/initializers.js +5 -4
  69. package/dest/public/avm/fixtures/utils.d.ts +4 -3
  70. package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
  71. package/dest/public/avm/fixtures/utils.js +3 -2
  72. package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
  73. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  74. package/dest/public/avm/opcodes/accrued_substate.js +42 -43
  75. package/dest/public/avm/opcodes/addressing_mode.js +2 -2
  76. package/dest/public/avm/opcodes/arithmetic.d.ts +10 -8
  77. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  78. package/dest/public/avm/opcodes/arithmetic.js +12 -2
  79. package/dest/public/avm/opcodes/bitwise.d.ts +7 -7
  80. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  81. package/dest/public/avm/opcodes/bitwise.js +5 -5
  82. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  83. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  84. package/dest/public/avm/opcodes/comparators.js +1 -1
  85. package/dest/public/avm/opcodes/contract.d.ts +3 -3
  86. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  87. package/dest/public/avm/opcodes/contract.js +8 -8
  88. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  89. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  90. package/dest/public/avm/opcodes/control_flow.js +4 -4
  91. package/dest/public/avm/opcodes/conversion.d.ts +3 -3
  92. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  93. package/dest/public/avm/opcodes/conversion.js +4 -4
  94. package/dest/public/avm/opcodes/ec_add.d.ts +4 -4
  95. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  96. package/dest/public/avm/opcodes/ec_add.js +17 -8
  97. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  98. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  99. package/dest/public/avm/opcodes/environment_getters.js +6 -6
  100. package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
  101. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  102. package/dest/public/avm/opcodes/external_calls.js +23 -22
  103. package/dest/public/avm/opcodes/hashing.d.ts +8 -8
  104. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/hashing.js +21 -16
  106. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  107. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  109. package/dest/public/avm/opcodes/memory.d.ts +14 -14
  110. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/memory.js +26 -26
  112. package/dest/public/avm/opcodes/misc.d.ts +3 -3
  113. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/misc.js +6 -6
  115. package/dest/public/avm/opcodes/storage.d.ts +16 -15
  116. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  117. package/dest/public/avm/opcodes/storage.js +34 -24
  118. package/dest/public/avm/revert_reason.d.ts +2 -2
  119. package/dest/public/avm/revert_reason.d.ts.map +1 -1
  120. package/dest/public/avm/revert_reason.js +3 -2
  121. package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
  122. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  123. package/dest/public/avm/serialization/bytecode_serialization.js +12 -9
  124. package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
  125. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  126. package/dest/public/avm/serialization/instruction_serialization.js +2 -2
  127. package/dest/public/avm/test_utils.d.ts +2 -2
  128. package/dest/public/avm/test_utils.d.ts.map +1 -1
  129. package/dest/public/avm/test_utils.js +1 -1
  130. package/dest/public/contracts_db_checkpoint.d.ts +3 -3
  131. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  132. package/dest/public/contracts_db_checkpoint.js +1 -1
  133. package/dest/public/db_interfaces.d.ts +2 -2
  134. package/dest/public/db_interfaces.d.ts.map +1 -1
  135. package/dest/public/debug_fn_name.d.ts +16 -3
  136. package/dest/public/debug_fn_name.d.ts.map +1 -1
  137. package/dest/public/debug_fn_name.js +31 -3
  138. package/dest/public/executor_metrics.d.ts +1 -1
  139. package/dest/public/executor_metrics.d.ts.map +1 -1
  140. package/dest/public/executor_metrics.js +12 -33
  141. package/dest/public/fixtures/amm_test.js +4 -4
  142. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  143. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  144. package/dest/public/fixtures/bulk_test.js +9 -73
  145. package/dest/public/fixtures/custom_bytecode_tester.d.ts +28 -6
  146. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  147. package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
  148. package/dest/public/fixtures/custom_bytecode_tests.d.ts +13 -8
  149. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
  150. package/dest/public/fixtures/custom_bytecode_tests.js +143 -18
  151. package/dest/public/fixtures/index.d.ts +4 -2
  152. package/dest/public/fixtures/index.d.ts.map +1 -1
  153. package/dest/public/fixtures/index.js +3 -1
  154. package/dest/public/fixtures/minimal_public_tx.d.ts +2 -7
  155. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
  156. package/dest/public/fixtures/minimal_public_tx.js +4 -14
  157. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  158. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  159. package/dest/public/fixtures/opcode_spammer.js +1653 -0
  160. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +27 -7
  161. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  162. package/dest/public/fixtures/public_tx_simulation_tester.js +87 -23
  163. package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
  164. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  165. package/dest/public/fixtures/simple_contract_data_source.js +4 -4
  166. package/dest/public/fixtures/token_test.d.ts +6 -2
  167. package/dest/public/fixtures/token_test.d.ts.map +1 -1
  168. package/dest/public/fixtures/token_test.js +13 -11
  169. package/dest/public/fixtures/utils.d.ts +3 -3
  170. package/dest/public/fixtures/utils.d.ts.map +1 -1
  171. package/dest/public/fixtures/utils.js +14 -13
  172. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  173. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  174. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  175. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  176. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  177. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  178. package/dest/public/hinting_db_sources.d.ts +8 -6
  179. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  180. package/dest/public/hinting_db_sources.js +13 -7
  181. package/dest/public/index.d.ts +2 -2
  182. package/dest/public/index.d.ts.map +1 -1
  183. package/dest/public/index.js +1 -1
  184. package/dest/public/public_db_sources.d.ts +7 -6
  185. package/dest/public/public_db_sources.d.ts.map +1 -1
  186. package/dest/public/public_db_sources.js +15 -15
  187. package/dest/public/public_processor/guarded_merkle_tree.d.ts +7 -5
  188. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  189. package/dest/public/public_processor/guarded_merkle_tree.js +9 -4
  190. package/dest/public/public_processor/public_processor.d.ts +11 -7
  191. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  192. package/dest/public/public_processor/public_processor.js +507 -88
  193. package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
  194. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  195. package/dest/public/public_processor/public_processor_metrics.js +36 -45
  196. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +3 -14
  197. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
  198. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +22 -56
  199. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +24 -37
  200. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
  201. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +65 -144
  202. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  203. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  204. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  205. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  206. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  207. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  208. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  209. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  210. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  211. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  212. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  213. package/dest/public/public_tx_simulator/factories.js +28 -0
  214. package/dest/public/public_tx_simulator/index.d.ts +4 -1
  215. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  216. package/dest/public/public_tx_simulator/index.js +3 -0
  217. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +3 -3
  218. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
  219. package/dest/public/public_tx_simulator/public_tx_context.d.ts +11 -6
  220. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  221. package/dest/public/public_tx_simulator/public_tx_context.js +17 -19
  222. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +13 -7
  223. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  224. package/dest/public/public_tx_simulator/public_tx_simulator.js +37 -21
  225. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +24 -1
  226. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
  227. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +2 -2
  228. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
  229. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
  230. package/dest/public/side_effect_trace.d.ts +6 -5
  231. package/dest/public/side_effect_trace.d.ts.map +1 -1
  232. package/dest/public/side_effect_trace.js +4 -4
  233. package/dest/public/side_effect_trace_interface.d.ts +2 -2
  234. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  235. package/dest/public/state_manager/nullifiers.d.ts +2 -2
  236. package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
  237. package/dest/public/state_manager/public_storage.d.ts +2 -2
  238. package/dest/public/state_manager/public_storage.d.ts.map +1 -1
  239. package/dest/public/state_manager/public_storage.js +1 -1
  240. package/dest/public/state_manager/state_manager.d.ts +16 -5
  241. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  242. package/dest/public/state_manager/state_manager.js +19 -9
  243. package/dest/public/test_executor_metrics.d.ts +8 -2
  244. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  245. package/dest/public/test_executor_metrics.js +24 -2
  246. package/package.json +19 -20
  247. package/src/common/errors.ts +1 -1
  248. package/src/private/acvm/acvm.ts +4 -3
  249. package/src/private/acvm/deserialize.ts +1 -1
  250. package/src/private/acvm/serialize.ts +1 -1
  251. package/src/private/acvm_native.ts +11 -5
  252. package/src/private/acvm_wasm.ts +7 -3
  253. package/src/private/circuit_recording/circuit_recorder.ts +24 -21
  254. package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
  255. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  256. package/src/private/factory.ts +7 -4
  257. package/src/public/avm/avm_context.ts +2 -2
  258. package/src/public/avm/avm_contract_call_result.ts +8 -6
  259. package/src/public/avm/avm_execution_environment.ts +10 -5
  260. package/src/public/avm/avm_gas.ts +5 -5
  261. package/src/public/avm/avm_machine_state.ts +7 -6
  262. package/src/public/avm/avm_memory_types.ts +5 -1
  263. package/src/public/avm/avm_simulator.ts +17 -11
  264. package/src/public/avm/calldata.ts +101 -0
  265. package/src/public/avm/errors.ts +17 -3
  266. package/src/public/avm/fixtures/account_proof.json +553 -0
  267. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  268. package/src/public/avm/fixtures/avm_simulation_tester.ts +9 -3
  269. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +1 -1
  270. package/src/public/avm/fixtures/initializers.ts +5 -4
  271. package/src/public/avm/fixtures/utils.ts +3 -2
  272. package/src/public/avm/opcodes/accrued_substate.ts +31 -34
  273. package/src/public/avm/opcodes/addressing_mode.ts +2 -2
  274. package/src/public/avm/opcodes/arithmetic.ts +14 -2
  275. package/src/public/avm/opcodes/bitwise.ts +3 -3
  276. package/src/public/avm/opcodes/comparators.ts +1 -1
  277. package/src/public/avm/opcodes/contract.ts +4 -7
  278. package/src/public/avm/opcodes/control_flow.ts +2 -2
  279. package/src/public/avm/opcodes/conversion.ts +3 -3
  280. package/src/public/avm/opcodes/ec_add.ts +15 -6
  281. package/src/public/avm/opcodes/environment_getters.ts +7 -7
  282. package/src/public/avm/opcodes/external_calls.ts +18 -16
  283. package/src/public/avm/opcodes/hashing.ts +16 -10
  284. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  285. package/src/public/avm/opcodes/memory.ts +20 -20
  286. package/src/public/avm/opcodes/misc.ts +4 -4
  287. package/src/public/avm/opcodes/storage.ts +30 -22
  288. package/src/public/avm/revert_reason.ts +6 -3
  289. package/src/public/avm/serialization/bytecode_serialization.ts +19 -8
  290. package/src/public/avm/serialization/instruction_serialization.ts +2 -2
  291. package/src/public/avm/test_utils.ts +1 -1
  292. package/src/public/contracts_db_checkpoint.ts +2 -2
  293. package/src/public/db_interfaces.ts +1 -1
  294. package/src/public/debug_fn_name.ts +39 -5
  295. package/src/public/executor_metrics.ts +9 -33
  296. package/src/public/fixtures/amm_test.ts +4 -4
  297. package/src/public/fixtures/bulk_test.ts +11 -13
  298. package/src/public/fixtures/custom_bytecode_tester.ts +53 -19
  299. package/src/public/fixtures/custom_bytecode_tests.ts +249 -18
  300. package/src/public/fixtures/index.ts +7 -1
  301. package/src/public/fixtures/minimal_public_tx.ts +6 -15
  302. package/src/public/fixtures/opcode_spammer.ts +1717 -0
  303. package/src/public/fixtures/public_tx_simulation_tester.ts +116 -19
  304. package/src/public/fixtures/simple_contract_data_source.ts +8 -9
  305. package/src/public/fixtures/token_test.ts +18 -9
  306. package/src/public/fixtures/utils.ts +19 -15
  307. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  308. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  309. package/src/public/hinting_db_sources.ts +16 -9
  310. package/src/public/index.ts +7 -1
  311. package/src/public/public_db_sources.ts +28 -20
  312. package/src/public/public_processor/guarded_merkle_tree.ts +11 -6
  313. package/src/public/public_processor/public_processor.ts +153 -91
  314. package/src/public/public_processor/public_processor_metrics.ts +28 -44
  315. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +27 -64
  316. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +82 -178
  317. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  318. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
  319. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  320. package/src/public/public_tx_simulator/factories.ts +44 -0
  321. package/src/public/public_tx_simulator/index.ts +3 -0
  322. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +1 -1
  323. package/src/public/public_tx_simulator/public_tx_context.ts +22 -17
  324. package/src/public/public_tx_simulator/public_tx_simulator.ts +56 -26
  325. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +23 -0
  326. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +1 -1
  327. package/src/public/side_effect_trace.ts +6 -3
  328. package/src/public/side_effect_trace_interface.ts +1 -1
  329. package/src/public/state_manager/nullifiers.ts +1 -1
  330. package/src/public/state_manager/public_storage.ts +1 -1
  331. package/src/public/state_manager/state_manager.ts +39 -23
  332. package/src/public/test_executor_metrics.ts +27 -3
@@ -0,0 +1,288 @@
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
+ MAX_PROTOCOL_CONTRACTS,
8
+ } from '@aztec/constants';
9
+ import { padArrayEnd } from '@aztec/foundation/collection';
10
+ import { Fr } from '@aztec/foundation/curves/bn254';
11
+ import { AvmTxHint, type PublicTxResult } from '@aztec/stdlib/avm';
12
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
13
+ import { contractClassPublicFromPlainObject, contractInstanceWithAddressFromPlainObject } from '@aztec/stdlib/contract';
14
+ import {
15
+ PartialPrivateTailPublicInputsForPublic,
16
+ PrivateKernelTailCircuitPublicInputs,
17
+ PrivateToPublicAccumulatedData,
18
+ PublicCallRequest,
19
+ } from '@aztec/stdlib/kernel';
20
+ import { PrivateLog } from '@aztec/stdlib/logs';
21
+ import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
22
+ import { ChonkProof } from '@aztec/stdlib/proofs';
23
+ import { MerkleTreeId, type MerkleTreeWriteOperations, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
24
+ import {
25
+ BlockHeader,
26
+ GlobalVariables,
27
+ HashedValues,
28
+ ProtocolContracts,
29
+ Tx,
30
+ TxConstantData,
31
+ TxContext,
32
+ TxHash,
33
+ } from '@aztec/stdlib/tx';
34
+ import type { NativeWorldStateService } from '@aztec/world-state';
35
+
36
+ import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
37
+ import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
38
+ import { PublicContractsDB } from '../public_db_sources.js';
39
+ import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
40
+
41
+ /**
42
+ * Request structure for fuzzer simulation communication from C++.
43
+ * Matches the C++ FuzzerSimulationRequest struct
44
+ */
45
+ export class FuzzerSimulationRequest {
46
+ constructor(
47
+ public readonly wsDataDir: string,
48
+ public readonly wsMapSizeKb: number,
49
+ public readonly tx: AvmTxHint,
50
+ public readonly globals: GlobalVariables,
51
+ public readonly contractClasses: any[], // Raw, processed by addContractClassFromCpp
52
+ public readonly contractInstances: [any, any][], // Raw pairs [address, instance]
53
+ public readonly publicDataWrites: any[], // Raw public data tree writes to apply before simulation
54
+ public readonly noteHashes: any[], // Raw note hashes to apply before simulation
55
+ public readonly protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
56
+ ) {}
57
+
58
+ static fromPlainObject(obj: any): FuzzerSimulationRequest {
59
+ if (obj instanceof FuzzerSimulationRequest) {
60
+ return obj;
61
+ }
62
+ return new FuzzerSimulationRequest(
63
+ obj.wsDataDir,
64
+ obj.wsMapSizeKb,
65
+ AvmTxHint.fromPlainObject(obj.tx),
66
+ GlobalVariables.fromPlainObject(obj.globals),
67
+ obj.contractClasses,
68
+ obj.contractInstances,
69
+ obj.publicDataWrites ?? [],
70
+ obj.noteHashes ?? [],
71
+ ProtocolContracts.fromPlainObject(obj.protocolContracts),
72
+ );
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
78
+ * This allows using PublicTxSimulator.simulate() with fuzzer-generated transactions.
79
+ */
80
+ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
81
+ // Create TxHash from the C++ tx hash string
82
+ if (!cppTx.hash) {
83
+ throw new Error(`cppTx.hash is undefined. Keys: ${Object.keys(cppTx || {}).join(', ')}`);
84
+ }
85
+ const txHash = TxHash.fromString(cppTx.hash);
86
+
87
+ // Extract PublicCallRequest instances from enqueued calls
88
+ const setupCallRequests = cppTx.setupEnqueuedCalls.map(call => call.request);
89
+ const paddedSetupCalls = padArrayEnd(setupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
90
+
91
+ const appLogicCallRequests = cppTx.appLogicEnqueuedCalls.map(call => call.request);
92
+ const paddedAppLogicCalls = padArrayEnd(appLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX);
93
+
94
+ // Build non-revertible accumulated data from C++ tx
95
+ const emptyNonRevertible = PrivateToPublicAccumulatedData.empty();
96
+ const nonRevertibleAccumulatedData = new PrivateToPublicAccumulatedData(
97
+ padArrayEnd(cppTx.nonRevertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
98
+ padArrayEnd(cppTx.nonRevertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
99
+ padArrayEnd(
100
+ cppTx.nonRevertibleAccumulatedData.l2ToL1Messages,
101
+ ScopedL2ToL1Message.empty(),
102
+ MAX_L2_TO_L1_MSGS_PER_TX,
103
+ ),
104
+ padArrayEnd(cppTx.nonRevertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
105
+ emptyNonRevertible.contractClassLogsHashes,
106
+ paddedSetupCalls,
107
+ );
108
+
109
+ // Build revertible accumulated data from C++ tx
110
+ const emptyRevertible = PrivateToPublicAccumulatedData.empty();
111
+ const revertibleAccumulatedData = new PrivateToPublicAccumulatedData(
112
+ padArrayEnd(cppTx.revertibleAccumulatedData.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
113
+ padArrayEnd(cppTx.revertibleAccumulatedData.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
114
+ padArrayEnd(cppTx.revertibleAccumulatedData.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
115
+ padArrayEnd(cppTx.revertibleContractDeploymentData.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
116
+ emptyRevertible.contractClassLogsHashes,
117
+ paddedAppLogicCalls,
118
+ );
119
+
120
+ // Build teardown call request (if exists)
121
+ const teardownCallRequest = cppTx.teardownEnqueuedCall?.request ?? PublicCallRequest.empty();
122
+
123
+ // Create forPublic structure
124
+ const forPublic = new PartialPrivateTailPublicInputsForPublic(
125
+ nonRevertibleAccumulatedData,
126
+ revertibleAccumulatedData,
127
+ teardownCallRequest,
128
+ );
129
+
130
+ // Build TxContext - gasSettings is already a proper GasSettings after AvmTxHint.fromPlainObject
131
+ const txContext = new TxContext(
132
+ Fr.ZERO, // chainId - this is fine because simulation actually reads from globalVariables not here
133
+ Fr.ZERO, // version - this is fine because simulation actually reads from globalVariables not here
134
+ cppTx.gasSettings,
135
+ );
136
+
137
+ // Build TxConstantData
138
+ const constants = new TxConstantData(
139
+ BlockHeader.empty(), // anchorBlockHeader (unused in simulation)
140
+ txContext,
141
+ Fr.ZERO, // vkTreeRoot - not needed for public simulation
142
+ Fr.ZERO, // protocolContractsHash - not needed for public simulation
143
+ );
144
+
145
+ const data = new PrivateKernelTailCircuitPublicInputs(
146
+ constants,
147
+ cppTx.gasUsedByPrivate,
148
+ cppTx.feePayer,
149
+ 0n, // expirationTimestamp
150
+ forPublic,
151
+ undefined, // forRollup - not needed for public simulation
152
+ );
153
+
154
+ // Build publicFunctionCalldata from all enqueued calls
155
+ // Calldata is already Fr[] after AvmTxHint.fromPlainObject
156
+ const publicFunctionCalldata: HashedValues[] = [];
157
+
158
+ // Add setup calls
159
+ for (const call of cppTx.setupEnqueuedCalls || []) {
160
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
161
+ }
162
+
163
+ // Add app logic calls
164
+ for (const call of cppTx.appLogicEnqueuedCalls || []) {
165
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(call.calldata));
166
+ }
167
+
168
+ // Add teardown call if present
169
+ if (cppTx.teardownEnqueuedCall) {
170
+ publicFunctionCalldata.push(await HashedValues.fromCalldata(cppTx.teardownEnqueuedCall.calldata));
171
+ }
172
+
173
+ // Extract contract class log fields from ContractDeploymentData
174
+ const contractClassLogFields = [
175
+ ...cppTx.nonRevertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
176
+ ...cppTx.revertibleContractDeploymentData.contractClassLogs.map(log => log.fields),
177
+ ];
178
+
179
+ // Create the Tx
180
+ return new Tx(
181
+ txHash,
182
+ data,
183
+ ChonkProof.empty(), // No real proof needed for simulation
184
+ contractClassLogFields,
185
+ publicFunctionCalldata,
186
+ );
187
+ }
188
+
189
+ /**
190
+ * A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
191
+ * It provides methods for registering contracts from C++ msgpack data and simulating transactions.
192
+ */
193
+ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
194
+ private simulator: PublicTxSimulator;
195
+
196
+ constructor(
197
+ merkleTrees: MerkleTreeWriteOperations,
198
+ contractDataSource: SimpleContractDataSource,
199
+ globals: GlobalVariables,
200
+ protocolContracts: ProtocolContracts,
201
+ ) {
202
+ super(contractDataSource, merkleTrees);
203
+ const contractsDb = new PublicContractsDB(contractDataSource);
204
+ this.simulator = new PublicTxSimulator(
205
+ merkleTrees,
206
+ contractsDb,
207
+ globals,
208
+ {
209
+ skipFeeEnforcement: false,
210
+ collectDebugLogs: false,
211
+ collectHints: false,
212
+ collectStatistics: false,
213
+ collectCallMetadata: false,
214
+ },
215
+ protocolContracts,
216
+ );
217
+ }
218
+
219
+ /**
220
+ * Static factory method to create an AvmFuzzerSimulator.
221
+ */
222
+ public static async create(
223
+ worldStateService: NativeWorldStateService,
224
+ globals: GlobalVariables,
225
+ protocolContracts: ProtocolContracts,
226
+ ): Promise<AvmFuzzerSimulator> {
227
+ const contractDataSource = new SimpleContractDataSource();
228
+ const merkleTrees = await worldStateService.fork();
229
+ return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, protocolContracts);
230
+ }
231
+
232
+ /**
233
+ * Simulate a transaction from a C++ AvmTxHint.
234
+ */
235
+ public async simulate(txHint: AvmTxHint): Promise<PublicTxResult> {
236
+ // Compute fee from gas limits and max fees per gas (upper bound on fee)
237
+ const totalFee =
238
+ BigInt(txHint.gasSettings.gasLimits.daGas) * txHint.gasSettings.maxFeesPerGas.feePerDaGas +
239
+ BigInt(txHint.gasSettings.gasLimits.l2Gas) * txHint.gasSettings.maxFeesPerGas.feePerL2Gas;
240
+
241
+ await this.setFeePayerBalance(txHint.feePayer, new Fr(totalFee));
242
+
243
+ const tx = await createTxFromHint(txHint);
244
+ return await this.simulator.simulate(tx);
245
+ }
246
+
247
+ /**
248
+ * Add a contract class from C++ raw msgpack data.
249
+ */
250
+ public async addContractClassFromCpp(rawClass: any): Promise<void> {
251
+ const contractClass = contractClassPublicFromPlainObject(rawClass);
252
+ await this.contractDataSource.addContractClass(contractClass);
253
+ }
254
+
255
+ /**
256
+ * Add a contract instance from C++ raw msgpack data.
257
+ * This also inserts the contract address nullifier into the nullifier tree,
258
+ * unless the address is a protocol canonical address (1-11).
259
+ */
260
+ public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
261
+ const address = AztecAddress.fromPlainObject(rawAddress);
262
+ const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
263
+ // Protocol canonical addresses (1-11) should not have nullifiers inserted
264
+ const isProtocolCanonicalAddress = address.toBigInt() <= MAX_PROTOCOL_CONTRACTS && address.toBigInt() >= 1n;
265
+ await this.addContractInstance(instance, /* skipNullifierInsertion */ isProtocolCanonicalAddress);
266
+ }
267
+
268
+ /**
269
+ * Apply public data tree writes from C++ raw msgpack data.
270
+ * This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
271
+ */
272
+ public async applyPublicDataWrites(rawWrites: any[]): Promise<void> {
273
+ for (const rawWrite of rawWrites) {
274
+ const leaf = PublicDataTreeLeaf.fromPlainObject(rawWrite);
275
+ await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [leaf.toBuffer()]);
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Apply note hashes from C++ raw msgpack data.
281
+ * This is used to pre-populate the note hash tree before simulation.
282
+ */
283
+ public async applyNoteHashes(rawNoteHashes: any[]): Promise<void> {
284
+ const paddingLeaves = MAX_NOTE_HASHES_PER_TX - (rawNoteHashes.length % MAX_NOTE_HASHES_PER_TX);
285
+ const paddedNoteHashes = [...rawNoteHashes, ...Array(paddingLeaves).fill(Fr.ZERO)];
286
+ await this.merkleTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, paddedNoteHashes);
287
+ }
288
+ }
@@ -0,0 +1,175 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import {
4
+ AvmCircuitPublicInputs,
5
+ type AvmTxHint,
6
+ PublicTxEffect,
7
+ deserializeFromMessagePack,
8
+ serializeWithMessagePack,
9
+ } from '@aztec/stdlib/avm';
10
+ import { GlobalVariables, ProtocolContracts, TreeSnapshots } from '@aztec/stdlib/tx';
11
+ import { NativeWorldStateService } from '@aztec/world-state';
12
+
13
+ import { createInterface } from 'readline';
14
+
15
+ import { AvmFuzzerSimulator, FuzzerSimulationRequest } from './avm_fuzzer_simulator.js';
16
+
17
+ /** Write data to stdout, letting Node handle buffering. */
18
+ function writeOutput(data: string): Promise<void> {
19
+ return new Promise<void>((resolve, reject) => {
20
+ process.stdout.write(data, err => {
21
+ if (err) {
22
+ reject(err);
23
+ } else {
24
+ resolve();
25
+ }
26
+ });
27
+ });
28
+ }
29
+
30
+ // This cache holds opened world states to avoid reopening them for each invocation.
31
+ // It's a map so that in the future we could support multiple world states (if we had multiple fuzzers).
32
+ const worldStateCache = new Map<string, NativeWorldStateService>();
33
+
34
+ async function openExistingWorldState(dataDir: string, mapSizeKb: number): Promise<NativeWorldStateService> {
35
+ const cached = worldStateCache.get(dataDir);
36
+ if (cached) {
37
+ return cached;
38
+ }
39
+
40
+ const ws = await NativeWorldStateService.new(EthAddress.ZERO, dataDir, {
41
+ archiveTreeMapSizeKb: mapSizeKb,
42
+ nullifierTreeMapSizeKb: mapSizeKb,
43
+ noteHashTreeMapSizeKb: mapSizeKb,
44
+ messageTreeMapSizeKb: mapSizeKb,
45
+ publicDataTreeMapSizeKb: mapSizeKb,
46
+ });
47
+
48
+ worldStateCache.set(dataDir, ws);
49
+ return ws;
50
+ }
51
+
52
+ async function simulateWithFuzzer(
53
+ dataDir: string,
54
+ mapSizeKb: number,
55
+ txHint: AvmTxHint,
56
+ globals: GlobalVariables,
57
+ rawContractClasses: any[], // Replace these when we are moving contract classes to TS
58
+ rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
59
+ rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
60
+ rawNoteHashes: any[], // Note hashes to apply before simulation
61
+ protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
62
+ ): Promise<{
63
+ reverted: boolean;
64
+ output: Fr[];
65
+ revertReason?: string;
66
+ publicInputs: AvmCircuitPublicInputs;
67
+ publicTxEffect: PublicTxEffect;
68
+ }> {
69
+ const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
70
+
71
+ const simulator = await AvmFuzzerSimulator.create(worldStateService, globals, protocolContracts);
72
+
73
+ await simulator.applyNoteHashes(rawNoteHashes);
74
+
75
+ // Register contract classes from C++ (must happen before public data writes to match C++ order)
76
+ for (const rawClass of rawContractClasses) {
77
+ await simulator.addContractClassFromCpp(rawClass);
78
+ }
79
+
80
+ // Register contract instances from C++
81
+ for (const [rawAddress, rawInstance] of rawContractInstances) {
82
+ await simulator.addContractInstanceFromCpp(rawAddress, rawInstance);
83
+ }
84
+
85
+ // Apply public data writes after contract registration (e.g., for bytecode upgrades)
86
+ // This must happen last to match C++ setup_fuzzer_state ordering
87
+ await simulator.applyPublicDataWrites(rawPublicDataWrites);
88
+
89
+ const result = await simulator.simulate(txHint);
90
+
91
+ const output = result
92
+ .getAppLogicReturnValues()
93
+ .flatMap((rv: { values?: Fr[] } | undefined) => rv?.values?.filter((v: Fr | null | undefined) => v != null) ?? []);
94
+
95
+ return {
96
+ reverted: !result.revertCode.isOK(),
97
+ output,
98
+ revertReason: result.findRevertReason()?.message,
99
+ publicInputs: result.publicInputs!,
100
+ publicTxEffect: result.publicTxEffect,
101
+ };
102
+ }
103
+
104
+ async function execute(base64Line: string): Promise<void> {
105
+ try {
106
+ // Decode base64 and deserialize the entire request from msgpack
107
+ const buffer = Buffer.from(base64Line.trim(), 'base64');
108
+ const rawRequest = deserializeFromMessagePack(buffer);
109
+ const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
110
+
111
+ // Run the TS simulation
112
+ const result = await simulateWithFuzzer(
113
+ request.wsDataDir,
114
+ request.wsMapSizeKb,
115
+ request.tx,
116
+ request.globals,
117
+ request.contractClasses,
118
+ request.contractInstances,
119
+ request.publicDataWrites,
120
+ request.noteHashes,
121
+ request.protocolContracts,
122
+ );
123
+
124
+ // Serialize the result to msgpack and encode it in base64 for output
125
+ const resultBuffer = serializeWithMessagePack({
126
+ reverted: result.reverted,
127
+ output: result.output,
128
+ revertReason: result.revertReason ?? '',
129
+ endTreeSnapshots: result.publicInputs.endTreeSnapshots,
130
+ publicTxEffect: result.publicTxEffect,
131
+ });
132
+ const base64Response = resultBuffer.toString('base64') + '\n';
133
+ await writeOutput(base64Response);
134
+ } catch (error: any) {
135
+ // If we error, treat as reverted
136
+ const errorResult = serializeWithMessagePack({
137
+ reverted: true,
138
+ output: [] as Fr[],
139
+ revertReason: `Unexpected Error ${error.message}`,
140
+ endTreeSnapshots: TreeSnapshots.empty(),
141
+ publicTxEffect: PublicTxEffect.empty(),
142
+ });
143
+ await writeOutput(errorResult.toString('base64') + '\n');
144
+ }
145
+ }
146
+
147
+ function mainLoop() {
148
+ const rl = createInterface({ input: process.stdin, terminal: false });
149
+
150
+ // Process lines sequentially to avoid race conditions in responses
151
+ const lineQueue: string[] = [];
152
+ let processing = false;
153
+
154
+ async function processQueue() {
155
+ if (processing || lineQueue.length === 0) {
156
+ return;
157
+ }
158
+ processing = true;
159
+ while (lineQueue.length > 0) {
160
+ const line = lineQueue.shift()!;
161
+ await execute(line);
162
+ }
163
+ processing = false;
164
+ }
165
+
166
+ rl.on('line', (line: string) => {
167
+ if (line.trim()) {
168
+ lineQueue.push(line);
169
+ void processQueue();
170
+ }
171
+ });
172
+ rl.on('close', () => process.exit(0));
173
+ }
174
+
175
+ void 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';
@@ -409,12 +410,12 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
409
410
  }
410
411
  }
411
412
 
412
- public async createCheckpoint(): Promise<void> {
413
+ public async createCheckpoint(): Promise<number> {
413
414
  const actionCounter = this.checkpointActionCounter++;
414
415
  const oldCheckpointId = this.getCurrentCheckpointId();
415
416
  const treesStateHash = await this.getTreesStateHash();
416
417
 
417
- await this.db.createCheckpoint();
418
+ const depth = await this.db.createCheckpoint();
418
419
  this.checkpointStack.push(this.nextCheckpointId++);
419
420
  const newCheckpointId = this.getCurrentCheckpointId();
420
421
 
@@ -423,14 +424,16 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
423
424
  HintingMerkleWriteOperations.log.trace(
424
425
  `[createCheckpoint:${actionCounter}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId} at trees state ${treesStateHash}.`,
425
426
  );
427
+
428
+ return depth;
426
429
  }
427
430
 
428
- public commitAllCheckpoints(): Promise<void> {
429
- throw new Error('commitAllCheckpoints is not supported in HintingMerkleWriteOperations.');
431
+ public commitAllCheckpointsTo(_depth: number): Promise<void> {
432
+ throw new Error('commitAllCheckpointsTo is not supported in HintingMerkleWriteOperations.');
430
433
  }
431
434
 
432
- public revertAllCheckpoints(): Promise<void> {
433
- throw new Error('revertAllCheckpoints is not supported in HintingMerkleWriteOperations.');
435
+ public revertAllCheckpointsTo(_depth: number): Promise<void> {
436
+ throw new Error('revertAllCheckpointsTo is not supported in HintingMerkleWriteOperations.');
434
437
  }
435
438
 
436
439
  public async commitCheckpoint(): Promise<void> {
@@ -571,6 +574,10 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
571
574
  return await this.db.close();
572
575
  }
573
576
 
577
+ async [Symbol.asyncDispose](): Promise<void> {
578
+ await this.close();
579
+ }
580
+
574
581
  public async findLeafIndices<ID extends MerkleTreeId>(
575
582
  treeId: ID,
576
583
  values: MerkleTreeLeafType<ID>[],
@@ -596,7 +603,7 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
596
603
  public async getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(
597
604
  treeId: ID,
598
605
  leafIndices: bigint[],
599
- ): Promise<(bigint | undefined)[]> {
606
+ ): Promise<(BlockNumber | undefined)[]> {
600
607
  return await this.db.getBlockNumbersForLeafIndices(treeId, leafIndices);
601
608
  }
602
609
  }
@@ -1,6 +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 } 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';
5
11
  export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
6
12
  export { getCallRequestsWithCalldataByPhase } from './utils.js';
@@ -4,8 +4,8 @@ import {
4
4
  NULLIFIER_SUBTREE_HEIGHT,
5
5
  PUBLIC_DATA_SUBTREE_HEIGHT,
6
6
  } from '@aztec/constants';
7
- import { Fr } from '@aztec/foundation/fields';
8
- import { createLogger } from '@aztec/foundation/log';
7
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
9
9
  import { Timer } from '@aztec/foundation/timer';
10
10
  import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
11
11
  import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
@@ -46,14 +46,19 @@ import { L1ToL2MessageIndexOutOfRangeError, NoteHashIndexOutOfRangeError } from
46
46
  export class PublicContractsDB implements PublicContractsDBInterface {
47
47
  private contractStateStack: ContractsDbCheckpoint[] = [new ContractsDbCheckpoint()];
48
48
 
49
- private log = createLogger('simulator:contracts-data-source');
49
+ private log: Logger;
50
50
 
51
- constructor(private dataSource: ContractDataSource) {}
51
+ constructor(
52
+ private dataSource: ContractDataSource,
53
+ bindings?: LoggerBindings,
54
+ ) {
55
+ this.log = createLogger('simulator:contracts-data-source', bindings);
56
+ }
52
57
 
53
- public async addContracts(contractDeploymentData: ContractDeploymentData): Promise<void> {
58
+ public addContracts(contractDeploymentData: ContractDeploymentData): void {
54
59
  const currentState = this.getCurrentState();
55
60
 
56
- await this.addContractClassesFromEvents(
61
+ this.addContractClassesFromEvents(
57
62
  ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),
58
63
  currentState,
59
64
  );
@@ -64,10 +69,10 @@ export class PublicContractsDB implements PublicContractsDBInterface {
64
69
  );
65
70
  }
66
71
 
67
- public async addNewContracts(tx: Tx): Promise<void> {
72
+ public addNewContracts(tx: Tx): void {
68
73
  const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
69
- await this.addContracts(contractDeploymentData.getNonRevertibleContractDeploymentData());
70
- await this.addContracts(contractDeploymentData.getRevertibleContractDeploymentData());
74
+ this.addContracts(contractDeploymentData.getNonRevertibleContractDeploymentData());
75
+ this.addContracts(contractDeploymentData.getRevertibleContractDeploymentData());
71
76
  }
72
77
 
73
78
  /**
@@ -76,7 +81,7 @@ export class PublicContractsDB implements PublicContractsDBInterface {
76
81
  */
77
82
  public createCheckpoint(): void {
78
83
  const currentState = this.getCurrentState();
79
- const newState = currentState.deepCopy();
84
+ const newState = currentState.fork();
80
85
  this.contractStateStack.push(newState);
81
86
  }
82
87
 
@@ -169,17 +174,15 @@ export class PublicContractsDB implements PublicContractsDBInterface {
169
174
  return await this.dataSource.getDebugFunctionName(address, selector);
170
175
  }
171
176
 
172
- private async addContractClassesFromEvents(
177
+ private addContractClassesFromEvents(
173
178
  contractClassEvents: ContractClassPublishedEvent[],
174
179
  state: ContractsDbCheckpoint,
175
180
  ) {
176
- await Promise.all(
177
- contractClassEvents.map(async (event: ContractClassPublishedEvent) => {
178
- this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
179
- const contractClass = await event.toContractClassPublic();
180
- state.addClass(event.contractClassId, contractClass);
181
- }),
182
- );
181
+ for (const event of contractClassEvents) {
182
+ this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
183
+ const contractClass = event.toContractClassPublic();
184
+ state.addClass(event.contractClassId, contractClass);
185
+ }
183
186
  }
184
187
 
185
188
  private addContractInstancesFromEvents(
@@ -208,9 +211,14 @@ export class PublicContractsDB implements PublicContractsDBInterface {
208
211
  * to decide whether to use hints or not (same with tracing, etc).
209
212
  */
210
213
  export class PublicTreesDB implements PublicStateDBInterface {
211
- private logger = createLogger('simulator:public-trees-db');
214
+ private logger: Logger;
212
215
 
213
- constructor(private readonly db: MerkleTreeWriteOperations) {}
216
+ constructor(
217
+ private readonly db: MerkleTreeWriteOperations,
218
+ bindings?: LoggerBindings,
219
+ ) {
220
+ this.logger = createLogger('simulator:public-trees-db', bindings);
221
+ }
214
222
 
215
223
  public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
216
224
  const timer = new Timer();
@@ -1,3 +1,4 @@
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { SerialQueue } from '@aztec/foundation/queue';
2
3
  import type { IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
3
4
  import type {
@@ -80,6 +81,10 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
80
81
  close(): Promise<void> {
81
82
  return this.guardAndPush(() => this.target.close());
82
83
  }
84
+
85
+ async [Symbol.asyncDispose](): Promise<void> {
86
+ await this.close();
87
+ }
83
88
  getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo> {
84
89
  return this.guardAndPush(() => this.target.getTreeInfo(treeId));
85
90
  }
@@ -126,10 +131,10 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
126
131
  getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(
127
132
  treeId: ID,
128
133
  leafIndices: bigint[],
129
- ): Promise<(bigint | undefined)[]> {
134
+ ): Promise<(BlockNumber | undefined)[]> {
130
135
  return this.guardAndPush(() => this.target.getBlockNumbersForLeafIndices(treeId, leafIndices));
131
136
  }
132
- createCheckpoint(): Promise<void> {
137
+ createCheckpoint(): Promise<number> {
133
138
  return this.guardAndPush(() => this.target.createCheckpoint());
134
139
  }
135
140
  commitCheckpoint(): Promise<void> {
@@ -138,11 +143,11 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
138
143
  revertCheckpoint(): Promise<void> {
139
144
  return this.guardAndPush(() => this.target.revertCheckpoint());
140
145
  }
141
- commitAllCheckpoints(): Promise<void> {
142
- return this.guardAndPush(() => this.target.commitAllCheckpoints());
146
+ commitAllCheckpointsTo(depth: number): Promise<void> {
147
+ return this.guardAndPush(() => this.target.commitAllCheckpointsTo(depth));
143
148
  }
144
- revertAllCheckpoints(): Promise<void> {
145
- return this.guardAndPush(() => this.target.revertAllCheckpoints());
149
+ revertAllCheckpointsTo(depth: number): Promise<void> {
150
+ return this.guardAndPush(() => this.target.revertAllCheckpointsTo(depth));
146
151
  }
147
152
  findSiblingPaths<ID extends MerkleTreeId>(
148
153
  treeId: ID,