@aztec/simulator 0.0.1-commit.24de95ac → 0.0.1-commit.27d773e65

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 (371) hide show
  1. package/README.md +6 -4
  2. package/dest/client.d.ts +1 -1
  3. package/dest/common/errors.d.ts +2 -2
  4. package/dest/common/errors.d.ts.map +1 -1
  5. package/dest/common/index.d.ts +1 -1
  6. package/dest/common/stats/index.d.ts +1 -1
  7. package/dest/common/stats/stats.d.ts +1 -1
  8. package/dest/private/acvm/acvm.d.ts +4 -2
  9. package/dest/private/acvm/acvm.d.ts.map +1 -1
  10. package/dest/private/acvm/acvm.js +4 -3
  11. package/dest/private/acvm/acvm_types.d.ts +1 -1
  12. package/dest/private/acvm/deserialize.d.ts +2 -2
  13. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  14. package/dest/private/acvm/deserialize.js +1 -1
  15. package/dest/private/acvm/index.d.ts +1 -1
  16. package/dest/private/acvm/serialize.d.ts +2 -2
  17. package/dest/private/acvm/serialize.d.ts.map +1 -1
  18. package/dest/private/acvm/serialize.js +1 -1
  19. package/dest/private/acvm_native.d.ts +5 -3
  20. package/dest/private/acvm_native.d.ts.map +1 -1
  21. package/dest/private/acvm_native.js +8 -6
  22. package/dest/private/acvm_wasm.d.ts +4 -3
  23. package/dest/private/acvm_wasm.d.ts.map +1 -1
  24. package/dest/private/acvm_wasm.js +4 -4
  25. package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
  26. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
  27. package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
  28. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  29. package/dest/private/circuit_recording/circuit_recorder.js +21 -18
  30. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
  31. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  32. package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
  33. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  34. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  35. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  36. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  37. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  38. package/dest/private/circuit_simulator.d.ts +1 -1
  39. package/dest/private/factory.d.ts +3 -3
  40. package/dest/private/factory.d.ts.map +1 -1
  41. package/dest/private/factory.js +7 -4
  42. package/dest/public/avm/avm_context.d.ts +3 -3
  43. package/dest/public/avm/avm_context.d.ts.map +1 -1
  44. package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
  45. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  46. package/dest/public/avm/avm_contract_call_result.js +3 -3
  47. package/dest/public/avm/avm_execution_environment.d.ts +9 -8
  48. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  49. package/dest/public/avm/avm_execution_environment.js +5 -8
  50. package/dest/public/avm/avm_gas.d.ts +2 -2
  51. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  52. package/dest/public/avm/avm_gas.js +3 -3
  53. package/dest/public/avm/avm_machine_state.d.ts +7 -6
  54. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  55. package/dest/public/avm/avm_machine_state.js +3 -2
  56. package/dest/public/avm/avm_memory_types.d.ts +14 -14
  57. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  58. package/dest/public/avm/avm_memory_types.js +4 -1
  59. package/dest/public/avm/avm_simulator.d.ts +5 -3
  60. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  61. package/dest/public/avm/avm_simulator.js +13 -11
  62. package/dest/public/avm/avm_simulator_interface.d.ts +1 -1
  63. package/dest/public/avm/calldata.d.ts +51 -0
  64. package/dest/public/avm/calldata.d.ts.map +1 -0
  65. package/dest/public/avm/calldata.js +63 -0
  66. package/dest/public/avm/errors.d.ts +8 -2
  67. package/dest/public/avm/errors.d.ts.map +1 -1
  68. package/dest/public/avm/errors.js +14 -2
  69. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  70. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  71. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  72. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
  73. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  74. package/dest/public/avm/fixtures/avm_simulation_tester.js +15 -5
  75. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -2
  76. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  77. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +1 -1
  78. package/dest/public/avm/fixtures/initializers.d.ts +2 -3
  79. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/initializers.js +8 -5
  81. package/dest/public/avm/fixtures/utils.d.ts +4 -3
  82. package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/utils.js +3 -2
  84. package/dest/public/avm/index.d.ts +1 -1
  85. package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
  86. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  87. package/dest/public/avm/opcodes/accrued_substate.js +42 -43
  88. package/dest/public/avm/opcodes/addressing_mode.d.ts +1 -1
  89. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  90. package/dest/public/avm/opcodes/addressing_mode.js +2 -2
  91. package/dest/public/avm/opcodes/arithmetic.d.ts +3 -1
  92. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  93. package/dest/public/avm/opcodes/arithmetic.js +12 -2
  94. package/dest/public/avm/opcodes/bitwise.d.ts +3 -3
  95. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  96. package/dest/public/avm/opcodes/bitwise.js +5 -5
  97. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  98. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  99. package/dest/public/avm/opcodes/comparators.js +1 -1
  100. package/dest/public/avm/opcodes/contract.d.ts +3 -3
  101. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  102. package/dest/public/avm/opcodes/contract.js +8 -8
  103. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  104. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/control_flow.js +4 -4
  106. package/dest/public/avm/opcodes/conversion.d.ts +3 -3
  107. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/conversion.js +4 -4
  109. package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
  110. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/ec_add.js +17 -8
  112. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  113. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/environment_getters.js +6 -6
  115. package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
  116. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  117. package/dest/public/avm/opcodes/external_calls.js +23 -22
  118. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  119. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  120. package/dest/public/avm/opcodes/hashing.js +21 -16
  121. package/dest/public/avm/opcodes/index.d.ts +1 -1
  122. package/dest/public/avm/opcodes/instruction.d.ts +2 -2
  123. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  125. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  126. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  127. package/dest/public/avm/opcodes/memory.d.ts +13 -13
  128. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  129. package/dest/public/avm/opcodes/memory.js +26 -26
  130. package/dest/public/avm/opcodes/misc.d.ts +3 -3
  131. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  132. package/dest/public/avm/opcodes/misc.js +8 -8
  133. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  134. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  135. package/dest/public/avm/opcodes/storage.js +34 -24
  136. package/dest/public/avm/revert_reason.d.ts +2 -2
  137. package/dest/public/avm/revert_reason.d.ts.map +1 -1
  138. package/dest/public/avm/revert_reason.js +3 -2
  139. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -1
  140. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
  142. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  143. package/dest/public/avm/serialization/bytecode_serialization.js +12 -9
  144. package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
  145. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  146. package/dest/public/avm/serialization/instruction_serialization.js +2 -2
  147. package/dest/public/avm/test_utils.d.ts +2 -2
  148. package/dest/public/avm/test_utils.d.ts.map +1 -1
  149. package/dest/public/avm/test_utils.js +1 -1
  150. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  151. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  152. package/dest/public/contracts_db_checkpoint.js +30 -0
  153. package/dest/public/db_interfaces.d.ts +14 -2
  154. package/dest/public/db_interfaces.d.ts.map +1 -1
  155. package/dest/public/debug_fn_name.d.ts +16 -3
  156. package/dest/public/debug_fn_name.d.ts.map +1 -1
  157. package/dest/public/debug_fn_name.js +31 -3
  158. package/dest/public/executor_metrics.d.ts +3 -2
  159. package/dest/public/executor_metrics.d.ts.map +1 -1
  160. package/dest/public/executor_metrics.js +13 -34
  161. package/dest/public/executor_metrics_interface.d.ts +3 -2
  162. package/dest/public/executor_metrics_interface.d.ts.map +1 -1
  163. package/dest/public/fixtures/amm_test.d.ts +1 -1
  164. package/dest/public/fixtures/amm_test.js +4 -4
  165. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  166. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  167. package/dest/public/fixtures/bulk_test.js +5 -69
  168. package/dest/public/fixtures/custom_bytecode_tester.d.ts +29 -7
  169. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  170. package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
  171. package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -8
  172. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
  173. package/dest/public/fixtures/custom_bytecode_tests.js +83 -18
  174. package/dest/public/fixtures/index.d.ts +4 -2
  175. package/dest/public/fixtures/index.d.ts.map +1 -1
  176. package/dest/public/fixtures/index.js +3 -1
  177. package/dest/public/fixtures/minimal_public_tx.d.ts +2 -8
  178. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
  179. package/dest/public/fixtures/minimal_public_tx.js +6 -16
  180. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  181. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  182. package/dest/public/fixtures/opcode_spammer.js +1653 -0
  183. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +24 -6
  184. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  185. package/dest/public/fixtures/public_tx_simulation_tester.js +89 -21
  186. package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
  187. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  188. package/dest/public/fixtures/simple_contract_data_source.js +4 -4
  189. package/dest/public/fixtures/token_test.d.ts +6 -2
  190. package/dest/public/fixtures/token_test.d.ts.map +1 -1
  191. package/dest/public/fixtures/token_test.js +13 -12
  192. package/dest/public/fixtures/utils.d.ts +2 -2
  193. package/dest/public/fixtures/utils.d.ts.map +1 -1
  194. package/dest/public/fixtures/utils.js +8 -7
  195. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  196. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  197. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  198. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  199. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  200. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  201. package/dest/public/hinting_db_sources.d.ts +14 -4
  202. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  203. package/dest/public/hinting_db_sources.js +71 -13
  204. package/dest/public/index.d.ts +3 -2
  205. package/dest/public/index.d.ts.map +1 -1
  206. package/dest/public/index.js +1 -1
  207. package/dest/public/public_db_sources.d.ts +25 -65
  208. package/dest/public/public_db_sources.d.ts.map +1 -1
  209. package/dest/public/public_db_sources.js +78 -135
  210. package/dest/public/public_errors.d.ts +1 -1
  211. package/dest/public/public_errors.d.ts.map +1 -1
  212. package/dest/public/public_processor/guarded_merkle_tree.d.ts +6 -4
  213. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  214. package/dest/public/public_processor/guarded_merkle_tree.js +5 -0
  215. package/dest/public/public_processor/public_processor.d.ts +17 -20
  216. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  217. package/dest/public/public_processor/public_processor.js +477 -72
  218. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  219. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  220. package/dest/public/public_processor/public_processor_metrics.js +28 -45
  221. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
  222. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  223. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
  224. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +35 -23
  225. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
  226. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +95 -53
  227. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  228. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  229. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  230. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  231. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  232. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  233. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  234. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  235. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  236. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  237. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  238. package/dest/public/public_tx_simulator/factories.js +28 -0
  239. package/dest/public/public_tx_simulator/index.d.ts +5 -1
  240. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  241. package/dest/public/public_tx_simulator/index.js +3 -0
  242. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +14 -7
  243. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
  244. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +5 -5
  245. package/dest/public/public_tx_simulator/public_tx_context.d.ts +8 -4
  246. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  247. package/dest/public/public_tx_simulator/public_tx_context.js +17 -9
  248. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +15 -33
  249. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  250. package/dest/public/public_tx_simulator/public_tx_simulator.js +118 -130
  251. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +25 -2
  252. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
  253. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +4 -4
  254. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
  255. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
  256. package/dest/public/side_effect_errors.d.ts +1 -1
  257. package/dest/public/side_effect_errors.d.ts.map +1 -1
  258. package/dest/public/side_effect_trace.d.ts +5 -5
  259. package/dest/public/side_effect_trace.d.ts.map +1 -1
  260. package/dest/public/side_effect_trace.js +4 -4
  261. package/dest/public/side_effect_trace_interface.d.ts +3 -4
  262. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  263. package/dest/public/state_manager/index.d.ts +1 -1
  264. package/dest/public/state_manager/nullifiers.d.ts +2 -2
  265. package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
  266. package/dest/public/state_manager/public_storage.d.ts +2 -2
  267. package/dest/public/state_manager/public_storage.d.ts.map +1 -1
  268. package/dest/public/state_manager/public_storage.js +1 -1
  269. package/dest/public/state_manager/state_manager.d.ts +16 -12
  270. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  271. package/dest/public/state_manager/state_manager.js +21 -10
  272. package/dest/public/test_executor_metrics.d.ts +11 -4
  273. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  274. package/dest/public/test_executor_metrics.js +29 -6
  275. package/dest/public/unique_class_ids.d.ts +1 -1
  276. package/dest/public/unique_class_ids.d.ts.map +1 -1
  277. package/dest/public/utils.d.ts +1 -1
  278. package/dest/server.d.ts +1 -1
  279. package/dest/testing.d.ts +1 -1
  280. package/package.json +21 -20
  281. package/src/common/errors.ts +1 -1
  282. package/src/private/acvm/acvm.ts +4 -3
  283. package/src/private/acvm/deserialize.ts +1 -1
  284. package/src/private/acvm/serialize.ts +1 -1
  285. package/src/private/acvm_native.ts +11 -5
  286. package/src/private/acvm_wasm.ts +7 -3
  287. package/src/private/circuit_recording/circuit_recorder.ts +22 -19
  288. package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
  289. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  290. package/src/private/factory.ts +7 -4
  291. package/src/public/avm/avm_context.ts +2 -2
  292. package/src/public/avm/avm_contract_call_result.ts +8 -6
  293. package/src/public/avm/avm_execution_environment.ts +13 -10
  294. package/src/public/avm/avm_gas.ts +5 -5
  295. package/src/public/avm/avm_machine_state.ts +7 -6
  296. package/src/public/avm/avm_memory_types.ts +5 -1
  297. package/src/public/avm/avm_simulator.ts +19 -14
  298. package/src/public/avm/calldata.ts +100 -0
  299. package/src/public/avm/errors.ts +17 -3
  300. package/src/public/avm/fixtures/account_proof.json +553 -0
  301. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  302. package/src/public/avm/fixtures/avm_simulation_tester.ts +18 -4
  303. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +1 -1
  304. package/src/public/avm/fixtures/initializers.ts +10 -11
  305. package/src/public/avm/fixtures/utils.ts +3 -2
  306. package/src/public/avm/opcodes/accrued_substate.ts +31 -34
  307. package/src/public/avm/opcodes/addressing_mode.ts +2 -2
  308. package/src/public/avm/opcodes/arithmetic.ts +14 -2
  309. package/src/public/avm/opcodes/bitwise.ts +3 -3
  310. package/src/public/avm/opcodes/comparators.ts +1 -1
  311. package/src/public/avm/opcodes/contract.ts +4 -7
  312. package/src/public/avm/opcodes/control_flow.ts +2 -2
  313. package/src/public/avm/opcodes/conversion.ts +3 -3
  314. package/src/public/avm/opcodes/ec_add.ts +15 -6
  315. package/src/public/avm/opcodes/environment_getters.ts +7 -7
  316. package/src/public/avm/opcodes/external_calls.ts +17 -15
  317. package/src/public/avm/opcodes/hashing.ts +16 -10
  318. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  319. package/src/public/avm/opcodes/memory.ts +20 -20
  320. package/src/public/avm/opcodes/misc.ts +6 -6
  321. package/src/public/avm/opcodes/storage.ts +30 -22
  322. package/src/public/avm/revert_reason.ts +6 -3
  323. package/src/public/avm/serialization/bytecode_serialization.ts +19 -8
  324. package/src/public/avm/serialization/instruction_serialization.ts +2 -2
  325. package/src/public/avm/test_utils.ts +1 -1
  326. package/src/public/contracts_db_checkpoint.ts +41 -0
  327. package/src/public/db_interfaces.ts +16 -1
  328. package/src/public/debug_fn_name.ts +39 -5
  329. package/src/public/executor_metrics.ts +11 -34
  330. package/src/public/executor_metrics_interface.ts +2 -1
  331. package/src/public/fixtures/amm_test.ts +4 -4
  332. package/src/public/fixtures/bulk_test.ts +9 -9
  333. package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
  334. package/src/public/fixtures/custom_bytecode_tests.ts +111 -18
  335. package/src/public/fixtures/index.ts +7 -1
  336. package/src/public/fixtures/minimal_public_tx.ts +7 -17
  337. package/src/public/fixtures/opcode_spammer.ts +1717 -0
  338. package/src/public/fixtures/public_tx_simulation_tester.ts +116 -21
  339. package/src/public/fixtures/simple_contract_data_source.ts +8 -9
  340. package/src/public/fixtures/token_test.ts +18 -10
  341. package/src/public/fixtures/utils.ts +6 -7
  342. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  343. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  344. package/src/public/hinting_db_sources.ts +112 -10
  345. package/src/public/index.ts +6 -4
  346. package/src/public/public_db_sources.ts +107 -176
  347. package/src/public/public_processor/guarded_merkle_tree.ts +8 -3
  348. package/src/public/public_processor/public_processor.ts +124 -75
  349. package/src/public/public_processor/public_processor_metrics.ts +16 -44
  350. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
  351. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +141 -59
  352. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  353. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
  354. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  355. package/src/public/public_tx_simulator/factories.ts +44 -0
  356. package/src/public/public_tx_simulator/index.ts +4 -0
  357. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +10 -14
  358. package/src/public/public_tx_simulator/public_tx_context.ts +22 -9
  359. package/src/public/public_tx_simulator/public_tx_simulator.ts +177 -198
  360. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
  361. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +3 -3
  362. package/src/public/side_effect_trace.ts +6 -3
  363. package/src/public/side_effect_trace_interface.ts +1 -1
  364. package/src/public/state_manager/nullifiers.ts +1 -1
  365. package/src/public/state_manager/public_storage.ts +1 -1
  366. package/src/public/state_manager/state_manager.ts +35 -26
  367. package/src/public/test_executor_metrics.ts +34 -8
  368. package/dest/public/tx_contract_cache.d.ts +0 -41
  369. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  370. package/dest/public/tx_contract_cache.js +0 -49
  371. package/src/public/tx_contract_cache.ts +0 -69
@@ -1,24 +1,16 @@
1
- import { AVM_MAX_PROCESSABLE_L2_GAS, DEFAULT_MAX_DEBUG_LOG_MEMORY_READS } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/fields';
3
- import { type Logger, createLogger } from '@aztec/foundation/log';
1
+ import { MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
4
4
  import { ProtocolContractAddress, ProtocolContractsList } from '@aztec/protocol-contracts';
5
5
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
6
- import {
7
- AvmCircuitInputs,
8
- AvmCircuitPublicInputs,
9
- AvmExecutionHints,
10
- type AvmProvingRequest,
11
- AvmTxHint,
12
- type RevertCode,
13
- } from '@aztec/stdlib/avm';
6
+ import { AvmExecutionHints, AvmTxHint, PublicSimulatorConfig, PublicTxEffect, PublicTxResult } from '@aztec/stdlib/avm';
14
7
  import { SimulationError } from '@aztec/stdlib/errors';
15
- import type { Gas, GasUsed } from '@aztec/stdlib/gas';
16
- import type { DebugLog } from '@aztec/stdlib/logs';
17
- import { ProvingRequestType } from '@aztec/stdlib/proofs';
8
+ import { Gas } from '@aztec/stdlib/gas';
18
9
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
19
10
  import {
20
11
  type GlobalVariables,
21
12
  NestedProcessReturnValues,
13
+ ProtocolContracts,
22
14
  PublicCallRequestWithCalldata,
23
15
  Tx,
24
16
  TxExecutionPhase,
@@ -27,6 +19,7 @@ import {
27
19
  import { strict as assert } from 'assert';
28
20
 
29
21
  import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
22
+ import { CallDataArray } from '../avm/calldata.js';
30
23
  import { AvmSimulator } from '../avm/index.js';
31
24
  import { getPublicFunctionDebugName } from '../debug_fn_name.js';
32
25
  import { HintingMerkleWriteOperations, HintingPublicContractsDB } from '../hinting_db_sources.js';
@@ -41,33 +34,6 @@ import type { PublicPersistableStateManager } from '../state_manager/state_manag
41
34
  import { PublicTxContext } from './public_tx_context.js';
42
35
  import type { PublicTxSimulatorInterface } from './public_tx_simulator_interface.js';
43
36
 
44
- export type ProcessedPhase = {
45
- phase: TxExecutionPhase;
46
- durationMs?: number;
47
- returnValues: NestedProcessReturnValues[];
48
- reverted: boolean;
49
- revertReason?: SimulationError;
50
- };
51
-
52
- export type PublicTxResult = {
53
- avmProvingRequest: AvmProvingRequest;
54
- /** Gas used during the execution of this tx */
55
- gasUsed: GasUsed;
56
- revertCode: RevertCode;
57
- /** Revert reason, if any */
58
- revertReason?: SimulationError;
59
- processedPhases: ProcessedPhase[];
60
- logs: DebugLog[];
61
- };
62
-
63
- export type PublicTxSimulatorConfig = {
64
- proverId: Fr;
65
- doMerkleOperations: boolean;
66
- skipFeeEnforcement: boolean;
67
- clientInitiatedSimulation: boolean;
68
- maxDebugLogMemoryReads: number;
69
- };
70
-
71
37
  // The errors below are only thrown here in the public tx simulator,
72
38
  // and only during revertible phases (revertible insertions, app logic and teardown).
73
39
  // These are strictly "checked" errors (not exported and never propagated).
@@ -103,24 +69,31 @@ class TxSimTeardownRevert extends Error {
103
69
  }
104
70
  }
105
71
 
72
+ /** Only used internally. */
73
+ type ProcessedPhase = {
74
+ phase: TxExecutionPhase;
75
+ durationMs?: number;
76
+ returnValues: NestedProcessReturnValues[];
77
+ reverted: boolean;
78
+ revertReason?: SimulationError;
79
+ };
80
+
106
81
  export class PublicTxSimulator implements PublicTxSimulatorInterface {
107
82
  protected log: Logger;
108
- private config: PublicTxSimulatorConfig;
83
+ protected readonly config: PublicSimulatorConfig;
84
+ protected readonly bindings?: LoggerBindings;
109
85
 
110
86
  constructor(
111
87
  protected merkleTree: MerkleTreeWriteOperations,
112
88
  protected contractsDB: PublicContractsDB,
113
89
  protected globalVariables: GlobalVariables,
114
- config?: Partial<PublicTxSimulatorConfig>,
90
+ config?: Partial<PublicSimulatorConfig>,
91
+ protected protocolContracts: ProtocolContracts = ProtocolContractsList,
92
+ bindings?: LoggerBindings,
115
93
  ) {
116
- this.config = {
117
- proverId: config?.proverId ?? Fr.ZERO,
118
- doMerkleOperations: config?.doMerkleOperations ?? false,
119
- skipFeeEnforcement: config?.skipFeeEnforcement ?? false,
120
- clientInitiatedSimulation: config?.clientInitiatedSimulation ?? false,
121
- maxDebugLogMemoryReads: config?.maxDebugLogMemoryReads ?? DEFAULT_MAX_DEBUG_LOG_MEMORY_READS,
122
- };
123
- this.log = createLogger(`simulator:public_tx_simulator`);
94
+ this.config = PublicSimulatorConfig.from(config ?? {});
95
+ this.bindings = bindings;
96
+ this.log = createLogger(`simulator:public_tx_simulator`, bindings);
124
97
  }
125
98
 
126
99
  /**
@@ -129,136 +102,144 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
129
102
  * @returns The result of the transaction's public execution.
130
103
  */
131
104
  public async simulate(tx: Tx): Promise<PublicTxResult> {
132
- try {
133
- const txHash = this.computeTxHash(tx);
134
- this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
135
-
136
- // Create hinting DBs.
137
- const hints = new AvmExecutionHints(
138
- this.globalVariables,
139
- AvmTxHint.fromTx(tx, this.globalVariables.gasFees),
140
- ProtocolContractsList, // imported from file
141
- );
142
- const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
143
- const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
144
- const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
145
-
146
- const context = await PublicTxContext.create(
147
- hintingTreesDB,
148
- hintingContractsDB,
149
- tx,
150
- this.globalVariables,
151
- ProtocolContractsList, // imported from file
152
- this.config.doMerkleOperations,
153
- this.config.proverId,
154
- );
105
+ const txHash = this.computeTxHash(tx);
106
+ this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
155
107
 
156
- // This will throw if there is a nullifier collision.
108
+ // Create hinting DBs.
109
+ const hints = new AvmExecutionHints(
110
+ this.globalVariables,
111
+ AvmTxHint.fromTx(tx, this.globalVariables.gasFees),
112
+ this.protocolContracts,
113
+ );
114
+ const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
115
+ const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
116
+ const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
117
+
118
+ const context = await PublicTxContext.create(
119
+ hintingTreesDB,
120
+ hintingContractsDB,
121
+ tx,
122
+ this.globalVariables,
123
+ this.protocolContracts,
124
+ this.config.proverId,
125
+ this.bindings,
126
+ );
127
+
128
+ // This will throw if there is a nullifier collision.
129
+ // In that case the transaction will be thrown out.
130
+ await this.insertNonRevertiblesFromPrivate(context);
131
+
132
+ const processedPhases: ProcessedPhase[] = [];
133
+ if (context.hasPhase(TxExecutionPhase.SETUP)) {
134
+ // This will throw if the setup phase reverts.
157
135
  // In that case the transaction will be thrown out.
158
- await this.insertNonRevertiblesFromPrivate(context, tx);
159
-
160
- const processedPhases: ProcessedPhase[] = [];
161
- if (context.hasPhase(TxExecutionPhase.SETUP)) {
162
- // This will throw if the setup phase reverts.
163
- // In that case the transaction will be thrown out.
164
- const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
165
- if (setupResult.reverted) {
166
- throw new Error(
167
- `Setup phase reverted! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
168
- );
169
- }
170
- processedPhases.push(setupResult);
136
+ const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
137
+ if (setupResult.reverted) {
138
+ throw new Error(
139
+ `[SETUP] UNRECOVERABLE ERROR! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
140
+ );
171
141
  }
142
+ processedPhases.push(setupResult);
143
+ }
172
144
 
173
- // The checkpoint we should go back to if anything from now on reverts.
174
- await context.state.fork();
175
-
176
- try {
177
- // This will throw if there is a nullifier collision or other insertion error (limit reached).
178
- await this.insertRevertiblesFromPrivate(context, tx);
145
+ // The checkpoint we should go back to if anything from now on reverts.
146
+ await context.state.fork();
147
+ hintingContractsDB.createCheckpoint();
179
148
 
180
- // Only proceed with app logic if there was no revert during revertible insertion.
181
- if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
182
- const appLogicResult = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
183
- processedPhases.push(appLogicResult);
184
- if (appLogicResult.reverted) {
185
- throw new TxSimAppLogicRevert();
186
- }
187
- }
188
- } catch (e: any) {
189
- if (e instanceof TxSimRevertibleInsertionsRevert || e instanceof TxSimAppLogicRevert) {
190
- // We revert to the post-setup state.
191
- await context.state.discardForkedState();
192
- // But we also create a new fork so that the teardown phase can transparently
193
- // commit or rollback at the end of teardown.
194
- await context.state.fork();
195
- } else {
196
- // Unchecked/unknown error - re-throw as-is
197
- throw e;
149
+ try {
150
+ // This will throw if there is a nullifier collision or other insertion error (limit reached).
151
+ await this.insertRevertiblesFromPrivate(context);
152
+
153
+ // Only proceed with app logic if there was no revert during revertible insertion.
154
+ if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
155
+ const appLogicResult = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
156
+ processedPhases.push(appLogicResult);
157
+ if (appLogicResult.reverted) {
158
+ throw new TxSimAppLogicRevert();
198
159
  }
199
160
  }
161
+ } catch (e: any) {
162
+ if (e instanceof TxSimRevertibleInsertionsRevert || e instanceof TxSimAppLogicRevert) {
163
+ // We revert to the post-setup state.
164
+ await context.state.discardForkedState();
165
+ hintingContractsDB.revertCheckpoint();
166
+ // But we also create a new fork so that the teardown phase can transparently
167
+ // commit or rollback at the end of teardown.
168
+ await context.state.fork();
169
+ hintingContractsDB.createCheckpoint();
170
+ } else {
171
+ // Unchecked/unknown error - re-throw as-is
172
+ throw e;
173
+ }
174
+ }
200
175
 
201
- try {
202
- if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
203
- const teardownResult = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
204
- processedPhases.push(teardownResult);
205
- if (teardownResult.reverted) {
206
- throw new TxSimTeardownRevert();
207
- }
208
- }
209
- // We commit the forked state and we are done.
210
- await context.state.mergeForkedState();
211
- } catch (e: any) {
212
- if (e instanceof TxSimTeardownRevert) {
213
- // We revert to the post-setup state and we are done.
214
- await context.state.discardForkedState();
215
- } else {
216
- // Unchecked/unknown error - re-throw as-is
217
- throw e;
176
+ try {
177
+ if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
178
+ const teardownResult = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
179
+ processedPhases.push(teardownResult);
180
+ if (teardownResult.reverted) {
181
+ throw new TxSimTeardownRevert();
218
182
  }
219
183
  }
184
+ // We commit the forked state and we are done.
185
+ await context.state.mergeForkedState();
186
+ hintingContractsDB.commitCheckpoint();
187
+ } catch (e: any) {
188
+ if (e instanceof TxSimTeardownRevert) {
189
+ // We revert to the post-setup state and we are done.
190
+ await context.state.discardForkedState();
191
+ hintingContractsDB.revertCheckpoint();
192
+ } else {
193
+ // Unchecked/unknown error - re-throw as-is
194
+ throw e;
195
+ }
196
+ }
220
197
 
221
- context.halt();
198
+ context.halt();
222
199
 
223
- // Such transactions should be filtered by GasTxValidator.
224
- assert(
225
- context.getActualGasUsed().l2Gas <= AVM_MAX_PROCESSABLE_L2_GAS,
226
- `Transaction consumes ${context.getActualGasUsed().l2Gas} L2 gas, which exceeds the AVM maximum processable gas of ${AVM_MAX_PROCESSABLE_L2_GAS}`,
227
- );
228
- await this.payFee(context);
229
-
230
- const publicInputs = await context.generateAvmCircuitPublicInputs();
231
- const avmProvingRequest = PublicTxSimulator.generateProvingRequest(publicInputs, hints);
232
-
233
- const revertCode = context.getFinalRevertCode();
234
-
235
- // Commit contracts from this TX to the block-level cache and clear tx cache
236
- // If the tx reverted, only commit non-revertible contracts
237
- // NOTE: You can't create contracts in public, so this is only relevant for private-created contracts
238
- // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
239
- // However things should work as they are now because the hinted db would still pick up the new contracts.
240
- this.contractsDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
241
-
242
- return {
243
- avmProvingRequest,
244
- gasUsed: {
245
- totalGas: context.getActualGasUsed(),
246
- teardownGas: context.teardownGasUsed,
247
- publicGas: context.getActualPublicGasUsed(),
248
- billedGas: context.getTotalGasUsed(),
249
- },
250
- revertCode,
251
- revertReason: context.revertReason,
252
- processedPhases: processedPhases,
253
- logs: context.state.getActiveStateManager().getLogs(),
254
- };
255
- } finally {
256
- // Make sure there are no new contracts in the tx-level cache.
257
- // They should either be committed to block-level cache or cleared.
258
- // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
259
- // However things should work as they are now because the hinted db would still pick up the new contracts.
260
- this.contractsDB.clearContractsForTx();
200
+ // Such transactions should be filtered by GasTxValidator.
201
+ assert(
202
+ context.getActualGasUsed().l2Gas <= MAX_PROCESSABLE_L2_GAS,
203
+ `Transaction consumes ${context.getActualGasUsed().l2Gas} L2 gas, which exceeds the maximum processable gas of ${MAX_PROCESSABLE_L2_GAS}`,
204
+ );
205
+ await this.payFee(context);
206
+
207
+ const publicInputs = await context.generateAvmCircuitPublicInputs();
208
+ const revertCode = context.getFinalRevertCode();
209
+
210
+ // We only return the app logic phase information, and only 1 per phase.
211
+ const appLogicReturnValues: NestedProcessReturnValues[] =
212
+ processedPhases.find(({ phase }) => phase === TxExecutionPhase.APP_LOGIC)?.returnValues ?? [];
213
+
214
+ // TODO(fcarreiro): This is a temporary backwards compatibility layer until we migrate to the C++ simulator.
215
+ if (context.revertReason !== undefined) {
216
+ (appLogicReturnValues as any).revertReason = context.revertReason;
261
217
  }
218
+
219
+ // Create PublicTxEffect from PublicInputs.
220
+ const publicTxEffect = new PublicTxEffect(
221
+ publicInputs.transactionFee,
222
+ publicInputs.accumulatedData.noteHashes.filter(h => !h.isEmpty()),
223
+ publicInputs.accumulatedData.nullifiers.filter(n => !n.isEmpty()),
224
+ publicInputs.accumulatedData.l2ToL1Msgs.filter(m => !m.isEmpty()),
225
+ publicInputs.accumulatedData.publicLogs.toLogs(),
226
+ publicInputs.accumulatedData.publicDataWrites.filter(w => !w.isEmpty()),
227
+ );
228
+
229
+ return new PublicTxResult(
230
+ /*gasUsed=*/ {
231
+ totalGas: context.getActualGasUsed(),
232
+ teardownGas: context.teardownGasUsed,
233
+ publicGas: context.getActualPublicGasUsed(),
234
+ billedGas: context.getTotalGasUsed(),
235
+ },
236
+ /*revertCode=*/ revertCode,
237
+ /*publicTxEffect=*/ publicTxEffect,
238
+ /*callStackMetadata=*/ appLogicReturnValues,
239
+ /*logs=*/ context.state.getActiveStateManager().getLogs(),
240
+ /*hints=*/ hints,
241
+ /*publicInputs=*/ publicInputs,
242
+ );
262
243
  }
263
244
 
264
245
  protected computeTxHash(tx: Tx) {
@@ -291,7 +272,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
291
272
 
292
273
  const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest);
293
274
 
294
- returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
275
+ returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output.bestEffortReadAll()));
295
276
 
296
277
  if (enqueuedCallResult.reverted) {
297
278
  reverted = true;
@@ -321,7 +302,11 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
321
302
  ): Promise<AvmFinalizedCallResult> {
322
303
  const stateManager = context.state.getActiveStateManager();
323
304
  const contractAddress = callRequest.request.contractAddress;
324
- const fnName = await getPublicFunctionDebugName(this.contractsDB, contractAddress, callRequest.calldata);
305
+ const fnName = await getPublicFunctionDebugName(
306
+ this.contractsDB,
307
+ contractAddress,
308
+ new CallDataArray(callRequest.calldata),
309
+ );
325
310
 
326
311
  const allocatedGas = context.getGasLeftAtPhase(phase);
327
312
 
@@ -340,7 +325,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
340
325
  );
341
326
 
342
327
  if (result.reverted) {
343
- const culprit = `${contractAddress}:${callRequest.functionSelector}`;
328
+ const culprit = `${contractAddress}:${fnName}`;
344
329
  context.revert(phase, result.revertReason, culprit);
345
330
  }
346
331
 
@@ -381,10 +366,9 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
381
366
  transactionFee,
382
367
  this.globalVariables,
383
368
  request.isStaticCall,
384
- calldata,
369
+ new CallDataArray(calldata),
385
370
  allocatedGas,
386
- this.config.clientInitiatedSimulation,
387
- this.config.maxDebugLogMemoryReads,
371
+ this.config,
388
372
  );
389
373
  const avmCallResult = await simulator.execute();
390
374
  return avmCallResult.finalize();
@@ -393,7 +377,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
393
377
  /**
394
378
  * Insert the non-revertible accumulated data from private into the public state.
395
379
  */
396
- protected async insertNonRevertiblesFromPrivate(context: PublicTxContext, tx: Tx) {
380
+ protected async insertNonRevertiblesFromPrivate(context: PublicTxContext) {
397
381
  const stateManager = context.state.getActiveStateManager();
398
382
 
399
383
  for (const siloedNullifier of context.nonRevertibleAccumulatedDataFromPrivate.nullifiers.filter(
@@ -412,11 +396,12 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
412
396
  }
413
397
  }
414
398
 
415
- // add new contracts to the contracts db so that their functions may be found and called
416
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
417
- // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
418
- // However things should work as they are now because the hinted db would still pick up the new contracts.
419
- await this.contractsDB.addNewNonRevertibleContracts(tx);
399
+ // add new contracts to the contracts db so that their code may be found and called
400
+ // FIXME(fcarreiro): this should conceptually use the hinting contracts db.
401
+ // However, things work as expected because later calls to getters on the hintingContractsDB
402
+ // will pick up the new contracts and will generate the necessary hints.
403
+ // So, a consumer of the hints will always see the new contracts.
404
+ await this.contractsDB.addContracts(context.nonRevertibleContractDeploymentData);
420
405
  }
421
406
 
422
407
  /**
@@ -428,7 +413,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
428
413
  * - NoteHashLimitReachedError
429
414
  * - L2ToL1MessageLimitReachedError
430
415
  */
431
- protected async insertRevertiblesFromPrivate(context: PublicTxContext, tx: Tx) {
416
+ protected async insertRevertiblesFromPrivate(context: PublicTxContext) {
432
417
  const stateManager = context.state.getActiveStateManager();
433
418
 
434
419
  try {
@@ -497,16 +482,21 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
497
482
  }
498
483
 
499
484
  // add new contracts to the contracts db so that their functions may be found and called
500
- // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
501
- // However things should work as they are now because the hinted db would still pick up the new contracts.
502
- await this.contractsDB.addNewRevertibleContracts(tx);
485
+ // FIXME(fcarreiro): this should conceptually use the hinting contracts db.
486
+ // However, things work as expected because later calls to getters on the hintingContractsDB
487
+ // will pick up the new contracts and will generate the necessary hints.
488
+ // So, a consumer of the hints will always see the new contracts.
489
+ await this.contractsDB.addContracts(context.revertibleContractDeploymentData);
503
490
  }
504
491
 
505
492
  private async payFee(context: PublicTxContext) {
506
493
  const txFee = context.getTransactionFee(TxExecutionPhase.TEARDOWN);
507
494
 
508
495
  if (context.feePayer.isZero()) {
509
- this.log.debug(`No one is paying the fee of ${txFee.toBigInt()}`);
496
+ // Real transactions are enforced by private kernel to have nonzero fee payer.
497
+ // Real transactions cannot skip fee enforcement (skipping fee enforcement makes them unprovable).
498
+ assert(this.config.skipFeeEnforcement, 'Fee payer cannot be 0 unless skipping fee enforcement for simulation');
499
+ this.log.debug(`Fee payer is 0. Skipping fee enforcement. No one is paying the fee of ${txFee.toBigInt()}`);
510
500
  return;
511
501
  }
512
502
 
@@ -526,23 +516,12 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
526
516
  this.config.skipFeeEnforcement,
527
517
  `Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
528
518
  );
519
+ this.log.debug(`Fee payer balance insufficient, but we're skipping fee enforcement`);
520
+ // We still proceed and perform the storage write to minimize deviation from normal execution.
529
521
  currentBalance = txFee;
530
522
  }
531
523
 
532
524
  const updatedBalance = currentBalance.sub(txFee);
533
525
  await stateManager.writeStorage(feeJuiceAddress, balanceSlot, updatedBalance, true);
534
526
  }
535
-
536
- /**
537
- * Generate the proving request for the AVM circuit.
538
- */
539
- private static generateProvingRequest(
540
- publicInputs: AvmCircuitPublicInputs,
541
- hints: AvmExecutionHints,
542
- ): AvmProvingRequest {
543
- return {
544
- type: ProvingRequestType.PUBLIC_VM,
545
- inputs: new AvmCircuitInputs(hints, publicInputs),
546
- };
547
- }
548
527
  }
@@ -1,11 +1,33 @@
1
+ import type { PublicTxResult } from '@aztec/stdlib/avm';
1
2
  import type { Tx } from '@aztec/stdlib/tx';
2
3
 
3
- import type { PublicTxResult } from './public_tx_simulator.js';
4
-
5
4
  export interface PublicTxSimulatorInterface {
6
5
  simulate(tx: Tx): Promise<PublicTxResult>;
6
+ /**
7
+ * Cancel the current simulation if one is in progress.
8
+ * This signals the underlying simulator (e.g., C++) to stop at the next safe point.
9
+ * Safe to call even if no simulation is in progress.
10
+ * Optional - not all implementations support cancellation.
11
+ *
12
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
13
+ * This is important because signaling cancellation doesn't immediately stop C++ -
14
+ * it only sets a flag that C++ checks at certain points. If C++ is in the middle
15
+ * of a slow operation (e.g., pad_trees), it won't stop until that completes.
16
+ * @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
17
+ */
18
+ cancel?(waitTimeoutMs?: number): Promise<void>;
7
19
  }
8
20
 
9
21
  export interface MeasuredPublicTxSimulatorInterface {
10
22
  simulate(tx: Tx, txLabel: string): Promise<PublicTxResult>;
23
+ /**
24
+ * Cancel the current simulation if one is in progress.
25
+ * This signals the underlying simulator (e.g., C++) to stop at the next safe point.
26
+ * Safe to call even if no simulation is in progress.
27
+ * Optional - not all implementations support cancellation.
28
+ *
29
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
30
+ * @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
31
+ */
32
+ cancel?(waitTimeoutMs?: number): Promise<void>;
11
33
  }
@@ -1,4 +1,5 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { PublicSimulatorConfig } from '@aztec/stdlib/avm';
2
3
  import type { Gas } from '@aztec/stdlib/gas';
3
4
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
4
5
  import { type GlobalVariables, PublicCallRequestWithCalldata, TxExecutionPhase } from '@aztec/stdlib/tx';
@@ -10,7 +11,6 @@ import type { PublicContractsDB } from '../public_db_sources.js';
10
11
  import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
11
12
  import { MeasuredPublicTxSimulator } from './measured_public_tx_simulator.js';
12
13
  import { PublicTxContext } from './public_tx_context.js';
13
- import type { PublicTxSimulatorConfig } from './public_tx_simulator.js';
14
14
 
15
15
  /**
16
16
  * A public tx simulator that tracks runtime/production metrics with telemetry.
@@ -24,7 +24,7 @@ export class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
24
24
  contractsDB: PublicContractsDB,
25
25
  globalVariables: GlobalVariables,
26
26
  telemetryClient: TelemetryClient = getTelemetryClient(),
27
- config?: Partial<PublicTxSimulatorConfig>,
27
+ config?: Partial<PublicSimulatorConfig>,
28
28
  ) {
29
29
  const metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
30
30
  super(merkleTree, contractsDB, globalVariables, metrics, config);
@@ -7,9 +7,9 @@ import {
7
7
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
8
8
  PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
9
9
  } from '@aztec/constants';
10
+ import { Fr } from '@aztec/foundation/curves/bn254';
10
11
  import { EthAddress } from '@aztec/foundation/eth-address';
11
- import { Fr } from '@aztec/foundation/fields';
12
- import { type LogLevel, createLogger } from '@aztec/foundation/log';
12
+ import { type LogLevel, type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
13
13
  import { PublicDataUpdateRequest } from '@aztec/stdlib/avm';
14
14
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
15
15
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
@@ -61,7 +61,7 @@ export class SideEffectArrayLengths {
61
61
  * Trace side effects for an enqueued public call's execution.
62
62
  */
63
63
  export class SideEffectTrace implements PublicSideEffectTraceInterface {
64
- public log = createLogger('simulator:side_effect_trace');
64
+ public log: Logger;
65
65
 
66
66
  /** The side effect counter increments with every call to the trace. */
67
67
  private sideEffectCounter: number;
@@ -79,6 +79,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
79
79
  constructor(
80
80
  /** The counter of this trace's first side effect. */
81
81
  public readonly startSideEffectCounter: number = 0,
82
+ bindings?: LoggerBindings,
82
83
  /** Track parent's (or previous kernel's) lengths so the AVM can properly enforce TX-wide limits,
83
84
  * otherwise the public kernel can fail to prove because TX limits are breached.
84
85
  */
@@ -90,11 +91,13 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
90
91
  private debugLogMemoryReads: number = 0,
91
92
  ) {
92
93
  this.sideEffectCounter = startSideEffectCounter;
94
+ this.log = createLogger('simulator:side_effect_trace', bindings);
93
95
  }
94
96
 
95
97
  public fork() {
96
98
  return new SideEffectTrace(
97
99
  this.sideEffectCounter,
100
+ this.log.getBindings(),
98
101
  new SideEffectArrayLengths(
99
102
  this.previousSideEffectArrayLengths.publicDataWrites + this.userPublicDataWritesLength,
100
103
  this.previousSideEffectArrayLengths.protocolPublicDataWrites + this.protocolPublicDataWritesLength,
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { LogLevel } from '@aztec/foundation/log';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { DebugLog } from '@aztec/stdlib/logs';
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
 
3
3
  import type { PublicTreesDB } from '../public_db_sources.js';
4
4
  import { NullifierCollisionError } from '../side_effect_errors.js';
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
3
 
4
4
  import type { PublicStateDBInterface } from '../db_interfaces.js';